目錄
前言
一、環境搭建
1.環境準備
2.安裝ipvsadm和keepalived(Lvs服務器),nginx服務器安裝nginx
3.為兩臺RS配置虛擬ip(nginx服務器)
1.配置虛擬網絡子接口
2.ARP響應級別與通告行為的概念
3.配置ARP
二、Keepalived+Lvs+Nginx高可用集群負載均衡的搭建
1. 配置 Master
2. 配置Lvs Backup
3. 測試
1.測試Lvs
2.測試nginx
前言
在大型網站中一般服務端會做集群,同時利用負載均衡器做負載均衡。這樣有利于將大量的請求分散到各個服務器上,提升網站的響應速度。當然為了解決單點故障的問題,還會做熱備份方案。這里演示利用LVS做負載均衡器,同時利用Keepalived保證其高可用,基于LVS的DR模式構建Nginx集群。
一、環境搭建
1.環境準備
HOSTNAME | IP | 說明 |
---|---|---|
nginx | 192.168.71.170 | nginx服務器 |
nginx | 192.168.71.174 | nginx服務器 |
Lvs+keepalived(主) | 192.168.71.166 | Lvs+keepalived(VIP:192.168.71.150) |
Lvs+keepalived(備) | 192.168.71.169 | Lvs+keepalived(VIP:192.168.71.150) |
2.安裝ipvsadm和keepalived(Lvs服務器),nginx服務器安裝nginx
?
圖中顯示目前版本為1.2.1,此外是一個空列表,啥都沒。
-
注:關于虛擬ip在云上的事兒
-
1.阿里云不支持虛擬IP,需要購買他的負載均衡服務
-
2.騰訊云支持虛擬IP,但是需要額外購買,一臺節點最大支持10個虛擬ip
-
3.為兩臺RS配置虛擬ip(nginx服務器)
兩臺服務器配置一樣,以下已一臺服務器配置作為演示
1.配置虛擬網絡子接口
1.進入到網卡配置目錄,找到 lo(本地環回接口,用戶構建虛擬網絡子接口),創建一個新的文件ifcfg-lo:0 :
2.修改內容如下:
DEVICE=lo:0
IPADDR=192.168.71.150
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback:0
nginx1配置
nginx2配置
2.ARP響應級別與通告行為的概念
1.arp-ignore:ARP響應級別(處理請求)
-
0:只要本機配置了ip,就能響應請求
-
1:請求的目標地址到達對應的網絡接口,才會響應請求
2.arp-announce:ARP通告行為(返回響應)
-
0:本機上任何網絡接口都向外通告,所有的網卡都能接受到通告
-
1:盡可能避免本網卡與不匹配的目標進行通告
-
2:只在本網卡通告
3.配置ARP
1.打開sysctl.conf
2.配置所有網卡、默認網卡以及虛擬網卡的arp響應級別和通告行為,分別對應:all,default,1o:
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
3.刷新配置 ?
4.增加一個網關,用于接收數據報文,當有請求到本機后,會交給lo去處理
5.防止重啟失效,做如下處理,用于開機自啟動 ?
vim /etc/profile
route add -host 192.168.71.150 dev lo
二、Keepalived+Lvs+Nginx高可用集群負載均衡的搭建
這種架構目前在很多公司都在采用的高可用高性能架構, 優點如下:
-
使用Keepalived + Lvs 后可以實現主備切換高可用
-
結合了Lvs 后, 針對于后臺的Real Server 這些真實的服務器做健康檢查, 如果某臺真實的服務器宕機后, Lvs就會自動剔除, 如果恢復后也可以自動加入.
-
其實 Keepalived 本身就是為 Lvs 定做了, 他們的匹配度, 結合度非常高, 通過 keepalivd 就可以配置 Lvs與 RS 的關系, 如負載均衡算法, 健康檢查配置等.
1. 配置 Master
1.進入keepalived配置文件, 修改配置信息, 修改如下即可(注意觀察注釋匹配自己的信息節點)
配置文件如下:
! Configuration File for keepalivedglobal_defs {router_id LVS_102
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.115.150}
}
# LVS 配置: 配置集群訪問的 IP+端口, 端口和nginx保持一致, 都是80, IP與端口是空格而不是冒號
virtual_server 192.168.115.150 80 {# 健康檢查的時間, 單位是秒delay_loop 6# 配置負載均衡的算法, 默認是 輪詢lb_algo rr# 設置LVS的工作模式 NAT|TUN|DR lb是load_balance 負載均衡的縮寫lb_kind DR# 會話持久化的時間, 默認是 50 秒persistence_timeout 5# 協議 -tprotocol TCP# Real Server 配置 nginx服務ip+端口real_server 192.168.115.113 80 {# 輪詢的權重, 默認有多少臺, 就設置為多少個 1weight 1# 設置健康檢查, 基于 tcpTCP_CHECK {# 檢查的80端口connect_port 80# 檢查的超時時間 2秒connect_timeout 2# 重試的次數 我們設置為2, 一般是5-7nb_get_retry 2# 設置間隔時間 3sdelay_before_retry 3}}real_server 192.168.115.114 80 {weight 1# 設置健康檢查, 基于 tcpTCP_CHECK {# 檢查的80端口connect_port 80# 檢查的超時時間 2秒connect_timeout 2# 重試的次數 我們設置為2, 一般是5-7nb_get_retry 2# 設置間隔時間 3sdelay_before_retry 3}}
}
清除負載均衡的規則
重啟keepalived, 使得配置生效
2. 配置Lvs Backup
步驟同 Master ,只有配置文件不一樣
! Configuration File for keepalived
global_defs {#主服務器配置不同,名稱隨便起router_id LVS_103
}vrrp_instance VI_1 {#主服務器配置不同state BACKUPinterface ens33virtual_router_id 51#主服務器配置不同,權重需要比主服務器低priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.115.150}
}
# LVS 配置: 配置集群訪問的 IP+端口, 端口和nginx保持一致, 都是80, IP與端口是空格而不是冒號
virtual_server 192.168.115.150 80 {# 健康檢查的時間, 單位是秒delay_loop 6# 配置負載均衡的算法, 默認是 輪詢lb_algo rr# 設置LVS的工作模式 NAT|TUN|DR lb是load_balance 負載均衡的縮寫lb_kind DR# 會話持久化的時間, 默認是 50 秒persistence_timeout 5# 協議 -tprotocol TCP# Real Server 配置 nginx服務ip+端口real_server 192.168.115.100 80 {# 輪詢的權重, 默認有多少臺, 就設置為多少個 1weight 1# 設置健康檢查, 基于 tcpTCP_CHECK {# 檢查的80端口connect_port 80# 檢查的超時時間 2秒connect_timeout 2# 重試的次數 我們設置為2, 一般是5-7nb_get_retry 2# 設置間隔時間 3sdelay_before_retry 3}}real_server 192.168.115.101 80 {weight 1# 設置健康檢查, 基于 tcpTCP_CHECK {# 檢查的80端口connect_port 80# 檢查的超時時間 2秒connect_timeout 2# 重試的次數 我們設置為2, 一般是5-7nb_get_retry 2# 設置間隔時間 3sdelay_before_retry 3}}
}
重啟完出現相同路由規則標識已配置成功
3. 測試
1.測試Lvs
停掉 LVS 的 Master 節點
網站還可以正常訪問
重啟Master 節點,我們發現ip有漂移回來了
2.測試nginx
我們關閉170節點的Nginx服務器(假如宕機狀態)
進入master節點進行查看集群信息
完成