為什么用它,為了做高可用
服務功能
1.故障自動切換
2.健康檢查
3.節點服務器高可用-HA
Keepalived的三個模塊:
core:Keepalived的核心,負責主進程的啟動、維護;調用全局配置文件進行加載和解析
vrrp:實現VRRP協議
check:負責健康檢查
????????tcp端口檢查:三次握手
????????http url檢查:返回碼
Keepalived實現原理
底層基于VRRP協議實現的高可用
? ? ? ? VRRP就是虛擬路由冗余協議,它的出現是為了解決靜態路由單點故障
? ? ? ? VRRP是通過競選一種協議機制來將路由交給某臺VRRP路由器
? ? ? ? VRRP用IP多播的方式()實現高可用之間的通信;工作時,主節點發包,備節點接包,當備節點收不到主節點的數據包時,就啟動接管主節點的資源,備節點可以有多個,通過優先級來進行競選;一般Keepalived系統運維時只有一對
? ? ? ? VRRP使用加密協議加密數據,但Keepalived目前還是推薦是用明文
腦裂現象
????????Master一直發送心跳消息給backup主機,如果中間的鏈路突然斷掉,backup主機將無法收到master主機發送過來的心跳消息(也就是vrrp報文),backup這時候會立即搶占master的工作,但其實這時候的master是正常工作的,此時就會出現腦裂的現象。
怎么預防腦裂現象
1.使用shell腳本對這兩個主機之間的連通性進行監測,如果發現有問題,就會立即關閉keepalived服務來防止腦裂的產生。
2.增加一條鏈路作為備用鏈路,即使主鏈路掛掉了,備用鏈路也會頂上來,master主機可以繼續給backup主機發送心跳消息。
3.監控軟件的方法,這邊主要是采用的zabbix來監控的,主要就是創建監控項,創建觸發器來測試關閉keepalived服務。
?
掌握LVS+keepalived高可用集群部署?
示意圖:(待修改)
主DR 服務器:ens33(192.168.220.121) ipvsadm 、keepalived(熱備) 虛擬IP:192.168.220.135? 網卡 ens33:0
備DR 服務器:ens33(192.168.220.122) ipvsadm 、keepalived
虛擬IP:192.168.220.135? 網卡 ens33:0
Web 服務器1:ens33 192.168.220.111
lo:0(VIP)192.168.220.135
Web 服務器2:ens33 192.168.220.112
lo:0(VIP)192.168.220.135
vip:192.168.220.135? ? ? ? ?
客戶端:192.168.220.10
1.配置負載調度器(主、備相同) ?(192.168.220.121、192.168.220.122)
systemctl stop firewalld.service
setenforce 0yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs
(1)配置keeplived(主、備DR 服務器上都要設置)
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.confglobal_defs { #定義全局參數
--10行--修改,郵件服務指向本地smtp_server 127.0.0.1
--12行--修改,指定服務器(路由器)的名稱,主備服務器名稱須不同,主為LVS_01,備為LVS_02router_id LVS_01
--14行--注釋掉,取消嚴格遵守VRRP協議功能,否則VIP無法被連接#vrrp_strict
}vrrp_instance VI_1 { #定義VRRP熱備實例參數
--20行--修改,指定熱備狀態,主為MASTER,備為BACKUPstate MASTER
--21行--修改,指定承載vip地址的物理接口interface ens33
--22行--修改,指定虛擬路由器的ID號,每個熱備組保持一致 virtual_router_id 10#nopreempt #默認為搶占模式;如果設置非搶占模式,兩個節點state必須為bakcup,并加上配置 nopreempt
--23行--修改,指定優先級,數值越大優先級越高,這里設置主為100,備為90priority 100advert_int 1 #通告間隔秒數(心跳頻率)authentication { #定義認證信息,每個熱備組保持一致auth_type PASS #認證類型
--27行--修改,指定驗證密碼,主備服務器保持一致auth_pass abc123}virtual_ipaddress { #指定群集vip地址192.168.220.135}
}
--36行--修改,指定虛擬服務器地址(VIP)、端口,定義虛擬服務器和Web服務器池參數
virtual_server 192.168.220.135 80 {delay_loop 6 #健康檢查的間隔時間(秒)lb_algo rr #指定調度算法,輪詢(rr)
--39行--修改,指定群集工作模式,直接路由(DR)lb_kind DRpersistence_timeout 50 #連接保持時間(秒)protocol TCP #應用服務采用的是 TCP協議
--43行--修改,指定第一個Web節點的地址、端口real_server 192.168.220.111 80 {weight 1 #節點的權重
--45行--刪除,添加以下健康檢查方式 TCP_CHECK {connect_port 80 #添加檢查的目標端口connect_timeout 3 #添加連接超時(秒)nb_get_retry 3 #添加重試次數delay_before_retry 3 #添加重試間隔}}real_server 192.168.220.112 80 { #添加第二個 Web節點的地址、端口weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
##刪除后面多余的配置##
}
192.168.220.121和122都需要配置vip(虛擬IP)
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.220.135
NETMASK=255.255.255.255重啟網卡
systemctl restart network
ifup ens33:0 #主備服務器一起啟動
systemctl restart keepalived
#查看虛擬網卡vip
ifconfig ens33:0
ip addr
(2)啟動 ipvsadm 服務
????????--192.168.220.121---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -C ##清空規則
ipvsadm -A -t 192.168.220.135:80 -s rr
ipvsadm -a -t 192.168.220.135:80 -r 192.168.220.111:80 -g
ipvsadm -a -t 192.168.220.135:80 -r 192.168.220.112:80 -gipvsadm -ln
#如沒有VIP 的分發策略,則重啟 keepalived 服務,systemctl restart keepalived
????????--192.168.220.122---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadmipvsadm -ln
(3)調整 proc 響應參數,關閉Linux 內核的重定向參數響應
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0sysctl -p
2.配置節點服務器
systemctl stop firewalld
setenforce 0yum -y install httpd
systemctl start httpd
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.220.135
NETMASK=255.255.255.255systemctl restart network
ifup lo:0
ifconfig lo:0
route add -host 192.168.220.135 dev lo:0vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2sysctl -p
--192.168.220.111---
echo 'this is L+K web1!' > /var/www/html/index.html
--192.168.220.112---
echo 'this is L+K web2!' > /var/www/html/index.html
3.測試驗證
在客戶端訪問 http://192.168.220.135
#需要等一會再刷新,才能輪詢
再在主服務器關閉 keepalived 服務后再測試
systemctl stop keepalived