1.用keepalived管理nginx服務
7-1和7-2配置
#安裝nginx
systemctl stop firewalld
setenforce 0
yum install epel-release.noarch -y
yum install -y nginx
systemctl start nginxvim /etc/nginx/nginx.confupstream web {server 192.168.91.102;server 192.168.91.103;}location / {proxy_pass http://web;}scp /etc/nginx/nginx.conf 192.168.91.101:/etc/nginx/nginx.confsystemctl stop firewalld
setenforce 0
yum install epel-release.noarch -y
yum install -y nginx
systemctl start nginx#7-1和7-2安裝keepalived
yum install keepalived -y7-1
vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1 # 修改郵箱地址smtp_connect_timeout 30 router_id LVS01 # 修改名稱vrrp_skip_check_adv_addr #vrrp_strict #關閉嚴格模式vrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_down {script "/etc/keepalived/ng.sh" interval 1weight -30fall 3rise 2timeout 2
}vrrp_script check_down {script "/etc/keepalived/ng.sh" #指明腳本的位置 interval 1 #每隔1s 執行一次檢測weight -30 #如果 腳本執行失敗自動減少優先級30fall 3 # 3次不成功才標注為失敗 rise 2 #nginx 重新起來后檢測兩次成功 才真的成功 timeout 2 #超時時間 2s
}vrrp_instance VI_1 {state MASTERinterface ens33 #修改網卡的名稱virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.91.188 #修改vip }track_script {check_down}}vim /etc/keepalived/ng.sh
killall -0 nginx
chmod +x /etc/keepalived/ng.sh
scp /etc/keepalived/keepalived.conf 192.168.91.101://etc/keepalived/7-2 上操作
從節點做修改 192.168.91.101/etc/keepalived/keepalived.confglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS01 vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0vrrp_gna_interval 0
}
實驗效果
使用tcpdump命令抓包可以看到ip地址來源與主的那臺keeplived管理nginx的服務器
當主的那臺nginx服務下線后不會影響7-3和7-4繼續提供web服務
可以通過抓包看到看到當keepalived判斷主的nginx停止服務了以后,將服務轉交給了從的nginx
用keepalived管理haproxy提供web服務
#在haproxy的配置文件中配置代理真實服務器
listen ky26_port_80bind 192.168.91.100:80mode httplog global server rs1 192.168.10.20:80 checkserver rs2 192.168.10.1:80 check#需要開啟優化使haproxy可以監聽虛擬ip
sysctl -a |grep bind
#net.ipv4.ip_nonlocal_bind = 1vim /etc/sysctl.confnet.ipv4.ip_nonlocal_bind = 1sysctl -p#修改腳本檢測
vim /etc/keepalived/ng.sh
killall -0 haproxy
#tcpdump -i ens33 -nn port 80
keepalived腦裂現象
什么是腦裂?
在高可用(HA)系統中,當聯系2個節點的“心跳線”斷開時,本來為一整體、動作協調的HA系統,就分裂成為2個獨立的個體。
由于相互失去了聯系,都以為是對方出了故障。兩個節點上的HA軟件像“裂腦人”一樣,爭搶“共享資源”、爭起“應用服務”,就會發生嚴重后果。共享資源被瓜分、兩邊“服務”都起不來了或者兩邊“服務”都起來了,但同時讀寫“共享存儲”,導致數據損壞
都有哪些原因導致腦裂?
1.高可用服務器對之間心跳線鏈路發生故障,導致無法正常通信。
2.因心跳線壞了(包括斷了,老化)。
3.因網卡及相關驅動壞了,ip配置及沖突問題(網卡直連)
4.因心跳線間連接的設備故障(網卡及交換機)高可用服務器上開啟了 iptables防火墻阻擋了心跳消息傳輸。
5.高可用服務器上心跳網卡地址等信息配置不正確,導致發送心跳失敗
6.其他服務配置不當等原因,如心跳方式不同,心跳廣插沖突、軟件Bug等。
如何解決keepalived腦裂問題?
在實際生產環境中,我們從以下方面防止腦裂:
1.同時使用串行電纜和以太網電纜連接、同時使用兩條心跳線路,這樣一條線路斷了,另外一條還是好的,依然能傳送心跳消息
2.當檢查腦裂時強行關閉一個心跳節點(這個功能需要特殊設備支持,如stonith、fence)相當于備節點接收不到心跳消息,通過單獨的線路發送關機命令關閉主節點的電源
3.做好對腦裂的監控報警解決常見方案:
(1)如果開啟防火墻,一定要讓心跳消息通過,一般通過允許IP段的形式解決
(2)可以拉一條以太網網線或者串口線作為主被節點心跳線路的冗余
(3)開發檢測程序通過監控軟件檢測腦裂