主頁 > 後端開發 > Nginx 從安裝到高可用,一篇搞定,99% 的人都收藏了。。

Nginx 從安裝到高可用,一篇搞定,99% 的人都收藏了。。

2022-04-14 11:10:21 後端開發

來源:blog.csdn.net/qq_34886352/article/details/103581973


一、Nginx安裝

1、去官網http://nginx.org/下載對應的nginx包,推薦使用穩定版本

2、上傳nginx到linux系統

3、安裝依賴環境

(1)安裝gcc環境

yum install gcc-c++

(2)安裝PCRE庫,用于決議正則運算式

yum install -y pcre pcre-devel

(3)zlib壓縮和解壓縮依賴

yum install -y zlib zlib-devel

(4)SSL 安全的加密的套接字協議層,用于HTTP安全傳輸,也就是https

yum install -y openssl openssl-devel

4、解壓,需要注意,解壓后得到的是原始碼,原始碼需要編譯后才能安裝

tar -zxvf nginx-1.16.1.tar.gz

5、編譯之前,先創建nginx臨時目錄,如果不創建,在啟動nginx的程序中會報錯

mkdir /var/temp/nginx -p

6、在nginx目錄,輸入如下命令進行配置,目的是為了創建makefile檔案

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

注:代表在命令列中換行,用于提高可讀性配置命令:

圖片

7、make編譯&安裝

make
make install

8、進入sbin目錄啟動nginx

啟動:nginx停止:./nginx -s stop重新加載:./nginx -s reload

二、配置反向代理

1、配置upstream

upstream [proxyName] {
    server 192.168.1.173:8080;
    server 192.168.1.174:8080;
    server 192.168.1.175:8080;
}

2、配置server

server {
    listem  80;
    server_name www.tomcats.com;

    location / {
        proxy_pass http://tomcats;
    }
}

三、配置負載均衡

nginx默認采用輪訓的方式進行負載均衡

1、使用加權輪詢

upstream [proxyName] {
    server 192.168.1.173:8080 weight=1;
    server 192.168.1.174:8080 weight=5;
    server 192.168.1.175:8080 weight=2;
}

2、hash負載均衡

upstream [proxyName] {
    ip_hash

    server 192.168.1.173:8080;
    server 192.168.1.174:8080;
    server 192.168.1.175:8080;
}

hash演算法實際上只會計算 192.168.1這段做哈希

使用ip_hash的注意點:

  • 不能把后臺服務器直接移除,只能標記down.

3、url hash負載均衡

upstream [proxyName] {
    hash $request_url;

    server 192.168.1.173:8080;
    server 192.168.1.174:8080;
    server 192.168.1.175:8080;
}

4、最小連接負載均衡

upstream [proxyName] {
    least_conn;

    server 192.168.1.173:8080;
    server 192.168.1.174:8080;
    server 192.168.1.175:8080;
}

四、upstream指令引數

  • max_conns:限制最大同時連接數 1.11.5之前只能用于商業版
  • slow_start:單位秒,權重在指定時間內從1上升到指定值,不適用與hash負載均衡、隨機負載均衡 如果在 upstream 中只有一臺 server,則該引數失效(商業版才有)
  • down:禁止訪問
  • backup:備用機 只有在其他服務器無法訪問的時候才能訪問到 不適用與hash負載均衡、隨機負載均衡
  • max_fails:表示失敗幾次,則標記server已宕機,剔出上游服務 默認值1
  • fail_timeout:表示失敗的重試時間 默認值10

1、keepalived

upstream [proxyName] {
    server 192.168.1.173:8080 weight=1;
    server 192.168.1.174:8080 weight=5;
    server 192.168.1.175:8080 weight=2;

    keepalive 32; #保持的連接數
}

server {
    listem  80;
    server_name www.tomcats.com;

    location / {
        proxy_pass http://tomcats;
        proxy_http_version 1.1; #連接的協議版本
        proxy_set_header Connection ""; 清空連接請求頭
    }
}

2、控制瀏覽器快取

server {
    listem  80;
    server_name www.tomcats.com;

    location / {
        proxy_pass http://tomcats;
               expires 10s;  #瀏覽器快取10秒鐘
               #expires @22h30m  #在晚上10點30的時候過期
               #expires -1h  #快取在一小時前時效
               #expires epoch  #不設定快取
               #expires off  #快取關閉,瀏覽器自己控制快取
               #expires max  #最大過期時間
    }
}

3、反向代理快取

upstream [proxyName] {
    server 192.168.1.173:8080 weight=1;
    server 192.168.1.174:8080 weight=5;
    server 192.168.1.175:8080 weight=2;
}

#proxy_cache_path 設定快取保存的目錄的位置
#keys_zone設定共享內以及占用的空間大小
#mas_size 設定快取最大空間
#inactive 快取過期時間,錯過此時間自動清理
#use_temp_path 關閉零時目錄
proxy_cache_path /usr/local/nginx/upsteam_cache keys_zone=mycache:5m max_size=1g inactive=8h use_temp_path=off;

server {
    listem  80;
    server_name www.tomcats.com;
    #開啟并使用快取
    proxy_cache mycache;
    #針對200和304回應碼的快取過期時間
    proxy_cache_valid 200 304 8h;

    location / {
        proxy_pass http://tomcats;
    }
}

五、配置ssl證書提供https訪問

1. 安裝SSL模塊

要在nginx中配置https,就必須安裝ssl模塊,也就是: http_ssl_module

進入到nginx的解壓目錄:/home/software/nginx-1.16.1

新增ssl模塊(原來的那些模塊需要保留)

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi  \
--with-http_ssl_module

編譯和安裝

makemake install

2、配置HTTPS

把ssl證書 *.crt 和 私鑰 *.key 拷貝到/usr/local/nginx/conf目錄中,

新增 server 監聽 443 埠:

server {
    listen       443;
    server_name  www.imoocdsp.com;
    # 開啟ssl
    ssl     on;
    # 配置ssl證書
    ssl_certificate      1_www.imoocdsp.com_bundle.crt;
    # 配置證書秘鑰
    ssl_certificate_key  2_www.imoocdsp.com.key;
    # ssl會話cache
    ssl_session_cache    shared:SSL:1m;
    # ssl會話超時時間
    ssl_session_timeout  5m;
    # 配置加密套件,寫法遵循 openssl 標準
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://tomcats/;
        index  index.html index.htm;
    }
}

六、配置ha nginx

1、安裝keepalived

(1)下載

https://www.keepalived.org/download.html

(2)解壓

tar -zxvf keepalived-2.0.18.tar.gz

(3)使用configure命令配置安裝目錄與核心組態檔所在位置:

./configure --prefix=/usr/local/keepalived --sysconf=/etc
  • prefix :keepalived安裝的位置sysconf:keepalived核心組態檔所在位置,固定位置,改成其他位置則keepalived啟動不了,/var/log/messages中會報錯
  • sysconf :keepalived核心組態檔所在位置,固定位置,改成其他位置則keepalived啟動不了,/var/log/messages中會報錯

配置程序中可能會出現警告資訊,如下所示:

*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

# 安裝libnl/libnl-3依賴
yum -y install libnl libnl-devel

(4)安裝keepalived

make && make install

(5)組態檔 在/etc/keepalived/keepalived.conf

(6)忘記安裝配置的目錄,則通過如下命令找到:

whereis keepalived

(7)啟動keepalived

進入sbin目錄

./keepalived

2、配置keepalived 主機

(1)通過命令 vim keepalived.conf 打開組態檔

global_defs {
    # 路由id:當前安裝keepalived的節點主機識別符號,保證全域唯一
    router_id keep_171
}

vrrp_instance VI_1 {
    # 表示狀態是MASTER主機還是備用機BACKUP
    state MASTER
    # 該實體系結的網卡
    interface ens33
    # 保證主備節點一致即可
    virtual_router_id 51
    # 權重,master權重一般高于backup,如果有多個,那就是選舉,誰的權重高,誰就當選
    priority 100
    # 主備之間同步檢查時間間隔,單位秒
    advert_int 2
    # 認證權限密碼,防止非法節點進入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虛擬出來的ip,可以有多個(vip)
    virtual_ipaddress {
        192.168.1.161
    }
}

附:查看網卡資訊命令

ip addr

(2)啟動keepalived

(3)查看行程

ps -ef|grep keepalived

(4)查看vip(虛擬ip)

在網卡ens33下,多了一個192.168.1.161,這個就是虛擬ip

3、把keepalived注冊為系統服務

(1)拷貝組態檔

  • 將keepalived目錄下etc/init.d/keepalived拷貝到/etc/init.d/
  • 將keepalived目錄下etc/sysconfig/keepalived拷貝到/etc/sysconfig/

(2)重繪systemctl

systemctl daemon-reload

(3)啟動、停止、重啟keepalived

#啟動
systemctl start keepalived.service
#停止
systemctl stop keepalived.service
#重啟
systemctl restart keepalived.service

4、實作雙機主備高可用

圖片

(1)修改備機配置

global_defs {
    router_id keep_172
}
vrrp_instance VI_1 {
    # 備用機設定為BACKUP
    state BACKUP
    interface ens33
    virtual_router_id 51
    # 權重低于MASTER
    priority 80
    advert_int 2
    authentication {
        auth_type PASS auth_pass 1111
    }
    virtual_ipaddress {
        # 注意:主備兩臺的vip都是一樣的,系結到同一個vip
        192.168.1.161
    }
}

(2) 啟動 Keepalived

(3) 訪問vip即可訪問主機,當主機失效時訪問vip就會訪問到備機

5、keepalived配置nginx自動重啟

(1)撰寫腳本

/etc/keepalived/下創建腳本check_nginx_alive_or_not

#!/bin/bash

A=`ps -C nginx --no-header |wc -l`
# 判斷nginx是否宕機,如果宕機了,嘗試重啟
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    # 等待一小會再次檢查nginx,如果沒有啟動成功,則停止keepalived,使其啟動備用機
    sleep 3
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            killall keepalived
        fi
fi

(2)添加運行權限

chmod +x /etc/keepalived/check_nginx_alive_or_not.sh

(3)配置keepalived監聽nginx腳本

vrrp_script check_nginx_alive {
    script "/etc/keepalived/check_nginx_alive_or_not.sh"
    interval 2 # 每隔兩秒運行上一行腳本
    weight 10 # 如果腳本運行失敗,則升級權重+10
}

(4)在vrrp_instance中新增監控的腳本

track_script {
    check_nginx_alive # 追蹤 nginx 腳本
}

(5)重啟Keepalived使得組態檔生效

systemctl restart keepalived

6、keepalived雙主熱備

(1)配置DNS輪詢

在同一個域名下配置兩個ip,自行百度

(2)配置第一臺主機

global_defs {
    router_id keep_171
}
vrrp_instance VI_1 {
    state MASTER i
    nterface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.161
    }
}

vrrp_instance VI_2  {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.162
    }
}

(3)配置第二臺主機

global_defs {
    router_id keep_172
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.161
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.162
    }
}

(4)重啟兩臺Keepalived

systemctl restart keepalived

七、LVS(Linux Virtual Server)實作高可用負載均衡

1、為什么要使用LVS+Nginx

  • lvs基于四層負載均衡,作業效率較Nginx的七層負載更高,使用LVS搭建Nginx集群,可以提高性能
  • 四層負載均衡無法對資訊處理,只能通過ip+埠的形式轉發,所以需要七成負載進行資料的處理
  • Nginx接收請求來回,LVS可以只接受不回應

2、LVS的三種模式

(1)NAT模式

  • 客戶端將請求發往LVS,LVS會選擇一臺服務器回應請求,服務器將結果回傳給LVS,LVS再回傳給客戶端,
  • 在NAT模式中,服務器的網關必須指向LVS,否則報文無法送達客戶端
  • NAT 技術將請求的報文和回應的報文都需要通過LVS進行地址改寫,因此網站訪問量比較大的時候負載均衡調度器有比較大的瓶頸,一般要求最多之能 10-20 臺節點
  • NAT 模式支持對 IP 地址和埠進行轉換,即用戶請求的埠和真實服務器的埠可以不一致

(2)TUN模式

  • 客戶端將請求發往LVS,LVS會選擇一臺服務器回應請求,在客戶端與服務器之間建立隧道,回傳結果的時候直接由服務器回傳回應,不在經過LVS,
  • TUN模式必須所有的服務器上都系結VIP的IP地址,所有的服務器都必須有網卡,
  • TUN模式走隧道運維難度大,并且會直接暴露服務器地址
  • 服務器將應答包直接發給用戶,所以,減少了負載均衡器的大量資料流動,負載均衡器不再是系統的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器能夠為很多服務器進行分發,而且跑在公網上就能進行不同地域的分發

(3)DR模式

  • 客戶端將請求發往LVS,LVS會選擇一臺服務器回應請求,回傳結果的時候通過統一的路由進行回傳,不在經過LVS,
  • 和TUN模式一樣,LVS只是分發請求,應答包通過單獨的路由回傳給客戶端,與TUN相比這種方式不需要隧道結構,可以兼容大多數的作業系統,同時統一路由可以隱藏真實的物理服務器,DR模式效率更高,但配置更復雜.
  • 所有服務器節點和LVS只能在一個局域網里面,

3、搭建LVS-DR模式

先關閉掉服務器上網路配置管理器,避免網路介面沖突

systemctl stop NetworkManagersystemctl disable NetworkManager

(1)創建子介面(創建LVS的虛擬ip)

進入網卡配置目錄/etc/sysconfig/network-scripts/,找到網卡組態檔,這里以ifcfg-ens33為例,拷貝并創建子介面

cp ifcfg-ens33 ifcfg-ens33:1

修改子介面配置如下

  • 配置中的 192.168.1.150 就是vip,是提供給外網用戶訪問的ip地址
DEVICE="ens33:1"ONBOOT="yes"IPADDR=192.168.1.150NETMASK=255.255.255.0BOOTPROTO=static
  • 重啟網路服務
service network restart

重啟成功后,ip addr 查看一下,你會發現多了一個ip,也就是虛擬ip(vip)

注意:阿里云不支持配置網卡,需要購買相應的負載均衡服務,騰訊云支持配置網卡,但需要購買網卡支持,一個網卡支持10個虛擬ip配置

(2)安裝ipvsadm

如今的centos都集成了LVS,所以ipvs是自帶的,我們只需要安裝ipvsadm即可(ipvsadm是管理集群的工具,通過ipvs可以管理集群,查看集群等操作)

yum install ipvsadm

(3)配置服務器(RS)的虛擬ip

進入網卡配置目錄/etc/sysconfig/network-scripts/,找到ifcfg-lo,拷貝并創建子介面

cp ifcfg-lo ifcfg-lo:1

修改子介面配置如下

DEVICE="lo:1"
IPADDR=192.168.1.150
NETMASK=255.255.255.255
NETWORK=127.0.0.0
BROADCAST=127.255.255.255
ONBOOT="yes"
NAME=loopback

重啟網路服務成功后,ip addr 查看一下,你會發現多了一個ip,也就是虛擬ip(vip)

(4)為服務器(RS)配置arp

ARP回應級別與通告行為引數說明

arp-ignore:ARP回應級別(處理請求)
    0:只要本機配置了ip,就能回應請求
    1:請求的目標地址到達對應的網路介面,才會回應請求
arp-announce:ARP通告行為(回傳回應)
    0:本機上任何網路介面都向外通告,所有的網卡都能接受到通告
    1:盡可能避免本網卡與不匹配的目標進行通告2:只在本網卡通告

打開sysctl.conf:

vim /etc/sysctl.conf

配置所有網卡、默認網卡以及虛擬網卡的arp回應級別和通告行為,分別對應:all,default,lo

# configration for lvs net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2

重繪組態檔

sysctl -p

增加一個網關,用于接收資料報文,當有請求到本機后,會交給lo去處理

route add -host 192.168.1.150 dev lo:1

將網關添加至開機啟動

echo "route add -host 192.168.1.150 dev lo:1" >> /etc/rc.local

(4)使用ipvsadm配置集群規則

創建LVS節點,用戶訪問的集群調度者

ipvsadm -A -t 192.168.1.150:80 -s rr -p 5
  • -A:添加集群
  • -t:tcp協議ip地址:設定集群的訪問
  • ip:也就是LVS的虛擬ip
  • -s:設定負載均衡的演算法,
  • rr:表示輪詢
  • -p:設定連接持久化的時間,在指定時間內同一個用戶的請求會訪問到同一個服務器中

創建多臺RS真實服務器

ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.171:80 -g
ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.172:80 -g
  • -a:添加真實服務器
  • -t:tcp協議
  • -r:真實服務器的ip地址
  • -g:設定DR模式

保存到規則庫,否則重啟失效

ipvsadm -S

檢查集群

#查看集群串列
ipvsadm -Ln
#查看集群狀態
ipvsadm -Ln --stats

一些其他命令

 # 重啟ipvsadm,重啟后需要重新配置
 service ipvsadm restart
 # 查看持久化連接
 ipvsadm -Ln --persistent-conn
 # 查看連接請求過期時間以及請求源ip和目標ip
 ipvsadm -Lnc
 # 設定tcp tcpfin udp 的過期時間(一般保持默認)
 ipvsadm --set 1 1 1
 # 查看過期時間
 ipvsadm -Ln --timeout

(5)訪問虛擬ip,完成LVS搭建

附:LVS的負載均衡演算法

(1)靜態演算法

靜態:根據LVS本身自由的固定的演算法分發用戶請求,

  • 輪詢(Round Robin 簡寫’rr’):輪詢演算法假設所有的服務器處理請求的能力都一樣的,調度器會把所有的請求平均分配給每個真實服務器,(同Nginx的輪詢)
  • 加權輪詢(Weight Round Robin 簡寫’wrr’):安裝權重比例分配用戶請求,權重越高,被分配到處理的請求越多,(同Nginx的權重)
  • 源地址散列(Source Hash 簡寫’sh’):同一個用戶ip的請求,會由同一個RS來處理,(同Nginx的ip_hash)
  • 目標地址散列(Destination Hash 簡寫’dh’):根據url的不同,請求到不同的RS,(同Nginx的url_hash)

(2)動態演算法

動態:會根據流量的不同,或者服務器的壓力不同來分配用戶請求,這是動態計算的,

  • 最小連接數(Least Connections 簡寫’lc’):把新的連接請求分配到當前連接數最小的服務器,

  • 加權最少連接數(Weight Least Connections 簡寫’wlc’):服務器的處理性能用數值來代表,權重越大處理的請求越多,Real Server 有可能會存在性能上的差異,wlc動態獲取不同服務器的負載狀況,把請求分發到性能好并且比較空閑的服務器,

  • 最短期望延遲(Shortest Expected Delay 簡寫’sed’):特殊的wlc演算法,舉例闡述,假設有ABC三臺服務器,權重分別為1、2、3 ,如果使用wlc演算法的話,當一個新請求進來,它可能會分給ABC中的任意一個,使用sed演算法后會進行如下運算:

    • A:(1+1)/1=2
  • B:(1+2)/2=3/2

  • C:(1+3)/3=4/3

最終結果,會把這個請求交給得出運算結果最小的服務器,最少佇列調度(Never Queue 簡寫’nq’):永不使用佇列,如果有Real Server的連接數等于0,則直接把這個請求分配過去,不需要在排隊等待運算了(sed運算),

八、搭建Keepalived+Lvs+Nginx高可用集群負載均衡

如果原先服務器上配置了LVS+nginx需要清空ipvsadm中的配置

ipvsadm -C

如果配置了Keepalived+Nginx雙主集群也需要去除掉Keepalived中原先的配置,按照的后文進行配置

(1)使用keepalived配置Master LVS

在LVS的機器上安裝keepalived,安裝程序參考上文

(1)修改keepalived的配置

global_defs {
    router_id keep_151
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 41
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.150
    }
}

#配置集群訪問的ip+埠,埠和nginx保持一致
virtual_server 192.168.1.150 80{
    #健康檢查的時間,單位:秒
    delay_loop 6
    #配置負載均衡的演算法,默認的輪詢
    lb_algo rr
    #設定LVS的模式 NAT|TUN|DR
    lb-kind DR
    #設定會話持久化的時間
    persistence_timeout 5
    #協議
    protocol TCP

    #配置負載均衡的真實服務器,也就是nginx節點的具體的ip地址
    real_server 192.168.1.171 80{
        #輪詢權重配比
        weight 1
        #設定健康檢查
        TCP_CHECK {
            #檢查80埠
            connect_port 80
            #超時時間
            connect_timeout 2
            #重試次數
            nb_get_retry 2
            #重試間隔時間
            delay_before_retry 3
        }
    }
    real_server 192.168.1.171 80{
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 2
            nb_get_retry 2
            delay_before_retry 3
        }
    }
}

(2)啟動/重啟keepalived

systemctl restart keepalived

(2)使用keepalived配置Backup LVS

配置在備用機上

global_defs {
    router_id keep_152
}
vrrp_instance VI_1 {
    state  BACKUP
    interface ens33
    virtual_router_id 41
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.150
    }
}

#配置集群訪問的ip+埠,埠和nginx保持一致
virtual_server 192.168.1.150 80{
    #健康檢查的時間,單位:秒
    delay_loop 6
    #配置負載均衡的演算法,默認的輪詢
    lb_algo rr
    #設定LVS的模式 NAT|TUN|DR
    lb-kind DR
    #設定會話持久化的時間
    persistence_timeout 5
    #協議
    protocol TCP

    #配置負載均衡的真實服務器,也就是nginx節點的具體的ip地址
    real_server 192.168.1.171 80{
        #輪詢權重配比
        weight 1
        #設定健康檢查
        TCP_CHECK {
            #檢查80埠
            connect_port 80
            #超時時間
            connect_timeout 2
            #重試次數
            nb_get_retry 2
            #重試間隔時間
            delay_before_retry 3
        }
    }
    real_server 192.168.1.171 80{
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 2
            nb_get_retry 2
            delay_before_retry 3
        }
    }
}

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2022最新版)

2.勁爆!Java 協程要來了,,,

3.Spring Boot 2.x 教程,太全了!

4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優雅的方式!!

5.《Java開發手冊(嵩山版)》最新發布,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458175.html

標籤:Java

上一篇:IOS – OpenGL ES 指定顏色摳圖 GPUImageChromaKeyFilter

下一篇:C++ placement new學習

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more