1.簡介
- Keepalived的設計目标是建構高可用的LVS負載均衡群集,可以調用ipvsadm工具來建立虛拟伺服器、管理伺服器池,而不僅僅是雙機熱備。優點:keepalived對lvs負載排程器實作熱備切換,提高可用性,對伺服器池中的節點進行健康檢查,自動移除失效節點,恢複後再重新加入。
- 基于lvs+keepalived實作的lvs群集結構中,至少包含兩台熱備的負載排程器。使用keepalived建構lvs群集時,也需要用到ipvsadm管理工具,但是大部分工作會由keepalived自動完成,不需要手動執行ipvsadm(除了檢視和監控群集以外)。
- LVS群集是針對Linux核心開發的一個負載均衡項目,基于IP位址虛拟化應用VIP,為基于IP位址和内容請求分發的負載均衡提出了一種高效的解決辦法。可使用ipvsadm管理工具。通過整合多台相對廉價的普通伺服器,以同一個位址對外提供相同的服務。
- 負載均衡的直接路由工作模式。簡稱DR工作模式,負載排程器僅作為客戶機的通路入口,各節點伺服器與排程器位于同一個實體網絡,節點伺服器直接回應客戶機的請求,而不再經過負載排程器。
- Keepalived是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換(Failover)和健康檢查(Health Checking)功能--判斷LVS負載排程器,節點伺服器的可用性,及時隔離并替換為新的伺服器,當故障主機恢複後将其重新加入叢集。
2.配置清單
LVS-DR-MASTER 192.168.253.130 centos7.5
LVS-DR-BACKUP 192.168.253.135 centos7.5
LVS-DR-VIP 192.168.253.100 centos7.5
WEB1-Realserver 192.168.253.178 centos6.5
WEB2-Realserver 192.168.253.179 centos6.5
基本思路如下圖(忽略ip)
3.分别在master和backup上安裝lvs(LVS采用dr模式)和keepalived軟體包
[ro[email protected] ~]# yum -y install ipvsadm.x86_64 keepalived.x86_64
[[email protected] ~]# service keepalived start
配置主keepalived:
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived #http://www.keepalived.org/pdf/UserGuide.pdf 官方配置文檔
global_defs {
router_id LVS_R1 #辨別本節點的字條串,通常為hostname,但不一定非得是hostname。故障發生時,郵件通知會用到,主機和備機上的router_id設定為一緻,同一個網絡中必須唯一,注意在一個網段裡有多個叢集的話需要設定成不同的router_id。
}
vrrp_instance VI_1 {
state MASTER #指定執行個體狀态,配置為MASTER
interface eth0 #指定執行個體運作在哪個網絡接口上
virtual_router_id 51 #虛拟路由ID(0-255),在一個VRRP執行個體中主備伺服器ID必須一樣,但是在同一個網絡中不可存在同樣的virtual_router_id,不要和其他叢集重複,如果一個配置檔案中配置了多個VRRP執行個體,各個執行個體的virtual_router_id也必須區分開來
priority 100 #優先級值設定:MASTER要比BACKUP的值大
advert_int 1 #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,機關是秒。
authentication { #認證機制
auth_type PASS #預設PASS; 有兩種:PASS或AH
auth_pass 1111 #預設1111; 可多位字元串,但僅前8位有效,設定驗證密碼,在一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信。 }
}
virtual_ipaddress {
192.168.253.100 #虛拟IP,可多個,寫法為每行一個
}
}
virtual_server 192.168.253.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
! persistence_timeout 50 #持久連接配接逾時時間,會話保持時間,機關是秒,這個選項對于動态網頁是非常有用的,為叢集系統中session共享提供了一個很好的解決方案。有了這個會話保持功能,使用者的請求會被一直分發到某個服務節點,直到超過這個會話保持時間。需要注意的是,這個會話保持時間,是最大無響應逾時時間,也就是說使用者在操作動态頁面時,如果在50秒内沒有執行任何操作,那麼接下來的操作會被分發到另外節點,但是如果一直在操作動态頁面,則不受50秒的時間限制。
protocol TCP #指定轉發協定類型,有tcp和udp兩種。
real_server 192.168.253.178 80 {
weight 1
TCP_CHECK { #使用TCP_CHECK檢測RS的使用可用性
connect_port 80 #指定連接配接的RS端口
connect_timeout 3 #指定連接配接RS逾時時間
nb_get_retry 3 #重試次數
delay_before_retry 3 #重試間隔
}
}
real_server 192.168.253.179 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[[email protected] ~]# service keepalived start
正在啟動 keepalived: [确定]
通過ip指令檢視(ifconfig看不到),實際狀态為MASTER的主伺服器上将為eth0自動添加VIP位址。在主上:
[[email protected] ~]# ip a
4.備keepalived配置檔案配置資訊:備用伺服器可以有多台,配置時候基本相同隻要修改路由器名稱,熱備狀态,優先級就可以
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_R2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
! Configuration File for keepalived
global_defs {
router_id LVS_R2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.253.100
}
}
virtual_server 192.168.253.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
! persistence_timeout 50
protocol TCP
real_server 192.168.253.178 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.253.179 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[[email protected] ~]# service keepalived start
正在啟動 keepalived: [确定]
5.節點伺服器配置
使用DR模式的時候,節點伺服器也需要配置vip位址,并且調整核心的ARP響應參數以阻止更新VIP的MAC位址,避免發生沖突。
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# cp ifcfg-lo ifcfg-lo:0
[[email protected] network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.253.100
NETMASK=255.255.255.255
ONBOOT=yes
[[email protected] ~]# systemctl restart network #重新開機下網卡
添加VIP本地通路路由(将通路VIP的資料限制正在本地,避免通信紊亂)
[[email protected] network-scripts]# vim /etc/rc.local
/sbin/route add -host 192.168.253.100 dev lo:0
[[email protected] network-scripts]# route add -host 192.168.253.100 dev lo:0
修改核心參數
[[email protected] network-scripts]# vim /etc/sysctl.conf #在最下面添加
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#注意:
arp_announce為2時:隻向該網卡回應與該網段比對的ARP封包。
arp_ignore為1:隻響應目的IP位址為接收網卡上的本地位址的arp請求
其主要是實作禁止響應ARP的請求。
[[email protected] network-scripts]# sysctl -p #檢測參數是否寫錯
6.另一個節點也是同樣的操做.
7.安裝httpd,建立網頁測試lvs叢集
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# vim /var/www/html/index.html
welcome to web1!
[[email protected] ~]# systemctl start httpd
#web2跟上面操作一樣
8.測試
在外面直接通路虛拟ip位址,則可以通路到對應節點上的網站資訊,當主排程器壞掉的時候,會自動切換到備用的排程器上面,網站通路量根據權重和算法來計算。
檢視負載配置設定情況可以執行下面指令
這時候我們的部署就完成了.