ECNU 1002 IP Address
技術標籤:運維
一、基本概念
Keepalived軟體起初是專為LVS負載均衡軟體設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟體外,還可以作為其他服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟體。
Keepalived軟體主要是通過VRRP協議實現高可用功能的。VRRP是Virtual Router RedundancyProtocol(虛擬路由器冗餘協議)的縮寫,VRRP出現的目的就是為了解決靜態路由單點故障問題的,它能夠保證當個別節點宕機時,整個網路可以不間斷地執行。
所以,Keepalived 一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可實現系統網路服務的高可用功能。
三個重要功能:
管理LVS負載均衡軟體
實現LVS叢集節點的健康檢查中
作為系統網路服務的高可用性(failover)
Keepalived高可用故障切換轉移原理
Keepalived高可用服務對之間的故障切換轉移,是通過 VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗餘協議)來實現的。
在 Keepalived服務正常工作時,主 Master節點會不斷地向備節點發送(多播的方式)心跳訊息,用以告訴備Backup節點自己還活看,當主 Master節點發生故障時,就無法傳送心跳訊息,備節點也就因此無法繼續檢測到來自主 Master節點的心跳了,於是呼叫自身的接管程式,接管主Master節點的 IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。
那麼,什麼是VRRP呢?
VRRP ,全 稱 Virtual Router Redundancy Protocol ,中文名為虛擬路由冗餘協議 ,VRRP的出現就是為了解決靜態踣甶的單點故障問題,VRRP是通過一種競選機制來將路由的任務交給某臺VRRP路由器的。
二、keepalived例項
1、keepalived高可用伺服器(web服務示例)
(1)架構圖
(2)環境說明
client:192.168.120.190
web1:192.168.120.191
web2:192.168.120.192
(3)部署步驟
步驟一、安裝Keepalived軟體(web主機)
# yum install -y keepalived
步驟二、部署Keepalived服務
web1:
# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected] //設定報警收件人郵箱
}
notification_email_from [email protected] //設定發件人
smtp_server 127.0.0.1 //定義郵件伺服器
smtp_connect_timeout 30
router_id web1 //設定路由ID號(實驗需要修改)
}
vrrp_instance VI_1 {
state MASTER //主伺服器為MASTER(實驗需要修改)
interface eth0 //定義網路介面(實驗需要修改)
virtual_router_id 50 //主輔VRID號必須一致(實驗需要修改)
priority 100 //伺服器優先順序,優先順序高優先獲取VIP(實驗需要修改)
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主輔伺服器密碼必須一致
}
virtual_ipaddress { 192.168.120.10 } //誰是主伺服器誰獲得該VIP(實驗需要修改)
}
web2:
# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected] //設定報警收件人郵箱
}
notification_email_from [email protected] //設定發件人
smtp_server 127.0.0.1 //定義郵件伺服器
smtp_connect_timeout 30
router_id web2 //設定路由ID號(實驗需要修改)
}
vrrp_instance VI_1 {
state BACKUP //從伺服器為BACKUP(實驗需要修改)
interface eth0 //定義網路介面(實驗需要修改)
virtual_router_id 50 //主輔VRID號必須一致(實驗需要修改)
priority 50 //伺服器優先順序(實驗需要修改)
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主輔伺服器密碼必須一致(實驗需要修改)
}
virtual_ipaddress { 192.168.120.10 } //誰是主伺服器誰配置VIP(實驗需要修改)
}
步驟三、啟動服務(web主機)
# systemctl start keepalived
步驟四、配置防火牆和SELinux
啟動keepalived會自動新增一個drop的防火牆規則,需要清空!
# iptables -F
# setenforce 0
步驟五:測試
登入兩臺Web伺服器檢視VIP資訊
# ip addr show
客戶端訪問
客戶端使用curl命令連線http://192.168.120.10,檢視Web頁面;關閉web1虛擬機器,客戶端再次訪問http://192.168.120.10,驗證是否可以正常訪問服務
2、Keepalived+LVS伺服器
(1)架構圖
(2)部署步驟
步驟一:配置網路環境
1)設定Web1、Web2伺服器的網路引數
# nmcli connection modify eth0 ipv4.method manual \
ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
# nmcli connection up eth0
接下來給web1配置VIP地址
注意:這裡的子網掩碼必須是32(也就是全255),網路地址與IP地址一樣,廣播地址與IP地址也一樣
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo{,:0}
# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.15
NETMASK=255.255.255.255
NETWORK=192.168.4.15
BROADCAST=192.168.4.15
ONBOOT=yes
NAME=lo:0
注意:這裡因為web1也配置與排程器一樣的VIP地址,預設肯定會出現地址衝突。
寫入這四行的主要目的就是訪問192.168.4.15的資料包,只有排程器會響應,其他主機都不做任何響應
# vim /etc/sysctl.conf
#手動寫入如下4行內容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
#當有arp廣播問誰是192.168.4.15時,本機忽略該ARP廣播,不做任何迴應
#本機不要向外宣告自己的lo迴環地址是192.168.4.15
重啟網路服務,設定防火牆與SELinux
# systemctl restart network
# sysctl -p
# ifconfig
# systemctl stop firewalld
# setenforce 0
配置proxy1、proxy2主機的網路引數(不配置VIP,由keepalvied自動配置)
步驟二:配置後臺web服務
1)安裝軟體,自定義Web頁面(web1和web2主機)
# yum -y install httpd
# echo "192.168.4.100" > /var/www/html/index.html
# yum -y install httpd
# echo "192.168.4.200" > /var/www/html/index.html
2)啟動Web伺服器軟體(web1和web2主機)
# systemctl start httpd ; systemctl enable httpd
步驟三:排程器安裝Keepalived與ipvsadm軟體
注意:兩臺LVS排程器執行相同的操作(如何已經安裝軟體,可用忽略此步驟)
安裝軟體
# yum install -y keepalived
# systemctl enable keepalived
# yum install -y ipvsadm
# ipvsadm -C
步驟四:部署Keepalived實現LVS-DR模式排程器的高可用
LVS1排程器設定Keepalived,並啟動服務
# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected] //設定報警收件人郵箱
}
notification_email_from [email protected] //設定發件人
smtp_server 127.0.0.1 //定義郵件伺服器
smtp_connect_timeout 30
router_id lvs1 //設定路由ID號(實驗需要修改)
}
vrrp_instance VI_1 {
state MASTER //主伺服器為MASTER(實驗需要修改)
interface eth0 //定義網路介面(實驗需要修改)
virtual_router_id 50 //主輔VRID號必須一致(實驗需要修改)
priority 100 //伺服器優先順序(實驗需要修改)
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主輔伺服器密碼必須一致(實驗需要修改)
}
virtual_ipaddress { 192.168.4.15 } //配置VIP(實驗需要修改)
}
virtual_server 192.168.4.15 80 { //設定ipvsadm的VIP規則(實驗需要修改)
delay_loop 6
lb_algo wrr //設定LVS排程演算法為WRR
lb_kind DR //設定LVS的模式為DR
#persistence_timeout 50
#注意這樣的作用是保持連線,開啟後,客戶端在一定時間內始終訪問相同伺服器
protocol TCP
real_server 192.168.4.100 80 { //設定後端web伺服器真實IP(實驗需要修改)
weight 1 //設定權重為1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.4.200 80 { //設定後端web伺服器真實IP(實驗需要修改)
weight 2 //設定權重為2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# systemctl start keepalived
# iptables -F
# ipvsadm -Ln #檢視LVS規則
# ip a s #檢視VIP配置
LVS2排程器設定Keepalived
從proxy1傳給proxy2
#scp /etc/keepalived/keepalived.conf 192.168.4.6:/etc/keepalived/
# vim /etc/keepalived/keepalived.conf
router_id lvs2
state BACKUP
priority 50
# systemctl start keepalived
# iptables -F #每重啟一次服務就要清空一下防火牆
# ipvsadm -Ln #檢視LVS規則
# ip a s #檢視VIP配置
步驟五:客戶端測試
客戶端使用curl命令反覆連線http://192.168.4.15,檢視訪問的頁面是否會輪詢到不同的後端真實伺服器