天天看點

本地虛拟機模拟LVS+Keepalived+Nginx叢集 (含關閉NetworkManager, 克隆虛拟機用)

前言

Nginx是伺服器叢集的網關, 在生産中有流量分發的作用; 另外它屬于應用層的負載均衡(第七層), 可以對請求和響應作額外的代理操作, 比如: gzip, 添加響應頭以支援跨域, 防盜鍊配置

為保證Nginx的高可用, 需要搭建Nginx叢集, LVS的負載均衡是基于鍊路層(第四層), 隻分發請求而不進行代理, 是以LVS的吞吐量是高于Nginx的, 适合為Nginx叢集作負載均衡

伺服器與ip規劃

  • LVS一台: VIP(虛拟ip, 生産中應是公網ip): 192.168.209.150;

    DIP(内網ip): 192.168.209.151

  • Nginx2台, RIP(真實ip, 因被LVS負載均衡, 是以生産中處于内網): 192.168.209.222和 192.168.209.223

上述3個計算機節點關閉網絡配置管理器,因為有可能會和網絡接口沖突

systemctl stop NetworkManager 
systemctl disable NetworkManager
           

LVS節點配置虛拟ip和負載均衡規則

配置虛拟ip

在LVS節點 (本案例為151節點)進入網卡配置目錄

/etc/sysconfig/network-scripts

拷貝網卡, 建立子接口

cp ifcfg-ens33 ifcfg-ens33:1

修改子接口配置:

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=cbebd981-2b3f-4271-812c-9b7d202ba714
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.209.150
GATEWAY=192.168.209.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
           

注意改

DEVICE

IPADDR

即可

重新開機網絡服務

service network restart

, 再執行

ip addr

, 檢視虛拟ip是否添加成功

本地虛拟機模拟LVS+Keepalived+Nginx叢集 (含關閉NetworkManager, 克隆虛拟機用)

在雲端, 阿裡雲不支援虛拟IP,需要購買他的負載均衡服務

騰訊雲支援虛拟IP,但是需要額外購買,一台節點最大支援10個虛拟ip

用ipvsadm配置負載均衡規則

安裝ipvsadm:

yum install ipvsadm

建立LVS節點,使用者通路的叢集排程者

ipvsadm -A -t 192.168.209.150:80 -s rr -p 5
           

各參數含義如下:

-A:添加叢集

-t:tcp協定

ip位址:設定叢集的通路ip,也就是LVS的虛拟ip

-s:設定負載均衡的算法,rr表示輪詢

-p:設定連接配接持久化的時間

建立2台RS真實伺服器

ipvsadm -a -t 192.168.209.150:80 -r 192.168.209.222:80 -g
ipvsadm -a -t 192.168.209.150:80 -r 192.168.209.223:80 -g
           

-a:添加真實伺服器

-t:tcp協定

-r:真實伺服器的ip位址

-g:設定DR模式

儲存到規則庫,否則重新開機失效

ipvsadm -S
           

檢視叢集清單:

ipvsadm -Ln
           

LVS持久化配置, 選做, 參考連結 LVS持久化配置

為兩台Nginx配置虛拟ip和arp(響應級别和通告行為)

配置虛拟ip

在Nginx所在的真實伺服器節點(以222為例),

/etc/sysconfig/network-scripts

複制 lo網卡

cp ifcfg-lo ifcfg-lo:1

,

vim ifcfg-lo:1

修改為如下:

DEVICE=lo:1
IPADDR=192.168.209.150
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
           

arp配置

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.209.150 dev lo:1
           

防止重新開機失效,做如下處理,用于開機自啟動:

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

此時, 開啟兩台RS上的Nginx服務, 即可通過通路 LVS中配置的虛拟ip(150節點), 通路Nginx了

Keepalived +LVS 高可用

LVS單個節點當機, 則所有Nginx都不可通路, 考慮Keepalived +LVS實作高可用

下面, 以151節點為例, 使用keepalived配置LVS主節點

安裝Keepalived過程省略, 需要提示一點: 執行make編譯前, 需要指定核心配置檔案所在位置:

--prefix=/usr/local/keepalived --sysconf=/etc

keepalived注冊為系統服務:

keepalived 注冊為系統服務:
- 切換到路徑 /home/software/keepalived-2.0.18/keepalived/etc
- 将自啟動腳本複制到系統檔案夾 cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/
- systemctl daemon-reload, 重加載系統服務
- 将keepalived作為系統服務啟動, systemctl start keepalived.service
           

在 /etc/keepalived/ 下, 修改keepalived主配置檔案如下

! Configuration File for keepalived

global_defs {
   # 主機辨別符,全局唯一
   router_id keep_151
}

# 計算機節點執行個體
vrrp_instance VI_1 {
    # MASTER, nginx 主節點
    state MASTER
    # 網卡名
    interface ens33
    virtual_router_id 151
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.209.150
    }
}

# 配置叢集位址通路的IP+端口, 端口和Nginx保持一緻, 都是80
virtual_server 192.168.209.150 80 {
  # 健康檢查時間  
  delay_loop 6
  # 負載均衡算法, 預設輪詢
  lb_algo rr
  # 設定LVS的模式 NAT|TUN|DR
  lb_kind DR
  # 設定會話持久化時間
  persistence_timeout 5
  protocol TCP

  # 負載均衡的RS
  real_server 192.168.209.222 80 {
    weight 1
    # 設定健康檢查
    TCP_CHECK {
      connect_port 80
      # 檢查的逾時時間
      connect_timeout 2
      # 重試次數
      nb_get_retry 3
      # 間隔時間
      delay_before_retry 3   
    }
  }  
  real_server 192.168.209.223 80 {
    weight 1
    # 設定健康檢查
    TCP_CHECK {
      connect_port 80
      # 檢查的逾時時間
      connect_timeout 2
      # 重試次數
      nb_get_retry 3
      # 間隔時間
      delay_before_retry 3
    }
  }
}
           

由于負載均衡規則已經由 keepalived定義了, 那我們可以清除 LVS此前定義的負載均衡規則

ipvsadm -C

啟動或重新開機 keepalived服務

systemctl start keepalived

systemctl restart keepalived

執行

ipvsadm -Ln

, 檢視 LVS負載均衡規則是否設定成功

本地虛拟機模拟LVS+Keepalived+Nginx叢集 (含關閉NetworkManager, 克隆虛拟機用)

151節點的配置完成了,152節點類似配置。通路192.168.209.150即可通路nginx

最後,150節點在生産環境應當是公網ip, 其他節點都是内網ip