前言:
優化nginx_proxy**可能出現單點故障的情況,通過keepalived得方式來完成nginx_proxy伺服器之間的高可用,因為keepalived的工作機制是通過心跳線來檢測伺服器之間是否出現故障,但是並不能檢測nginx_proxy**服務是否正常工作,所以需要採用編寫指令碼判斷的方式來檢測nginx_proxy**伺服器,當nginx_proxy **伺服器出現故障時。立馬切換到vip
名詞解釋:
vip:使用者通過訪問vip虛擬ip位址,從而訪問對應的主節點
選舉:兩台業務系統,由選舉的方式確認誰是主節點,誰是備節點
心跳線:選舉之後主要用來檢測對方的狀態
列腦:主備權重一致,造成列腦
keepalived的高可用列腦
由於某些原因,導致兩台keepalived高可用伺服器在指定時間內,無法檢測到對方的心跳訊息,各自取得資源及服務的所有權,而此時的兩台高可用伺服器又都還活著。
原因:伺服器網線鬆動等網路故障
硬體故障發生損壞現象而崩潰
都開啟firewalld防火牆
nginx服務死掉等等
實驗環境:
| 伺服器系統 | 角色 | 外網ip | 內網ip
| -------- | -------- | -------- |
| centos7 | master | 10.0.0.5 |172.16.1.5
| centos7 | backup | 10.0.0.6 |172.16.1.6
環境準備:
兩台nginx_proxy伺服器都需安裝
[root@1b01t ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=
gpgcheck=0
enabled=1
[root@1b01 ~]# yum install keepalived -y
[root@1b01 ~]# yum install nginx -y
實驗步驟:
1.兩台nginx_proxy都執行以下步驟
[root@1b01 ~]# mkdir -p /server/scripts/
[root@1b01 scripts]# vim keepalived.sh
#!/bin/sh
nginxpid=$(ps -c nginx --no-header|wc -l)
#1.判斷nginx是否存活,如果不存活則嘗試啟動nginx
if [ $nginxpid -eq 0 ];then
systemctl start nginx
sleep 3
#2.等待3秒後再次獲取一次nginx狀態
nginxpid=$(ps -c nginx --no-header|wc -l)
#3.再次進行判斷, 如nginx還不存活則停止keepalived,讓位址進行漂移,並退出指令碼
if [ $nginxpid -eq 0 ];then
systemctl stop keepalived
fifi
2.master keepalibed 的配置檔案
[root@1b01 ~]# vim /etc/keepalived/keepalived.conf
global_defs
#1.每5秒執行一次指令碼, 指令碼執行內容不能超過5秒,否則會被中斷再次重新執行指令碼
vrrp_script keepalived
vrrp_instance vi_1
virtual_ipaddress
#2.呼叫並執行該指令碼
track_script
}3.backup keepalived的配置檔案
[root@1b02 scripts]# vim /etc/keepalived/keepalived.conf
lobal_defs
#1.每5秒執行一次指令碼, 指令碼執行內容不能超過5秒,否則會被中斷再次重新執行指令碼
vrrp_script keepalived
vrrp_instance vi_1
virtual_ipaddress
#2.呼叫並執行該指令碼
track_script
}3.2 在備上編寫測試指令碼,如果能ping 通主,並且還有vip的話則認為產生列腦
[root@lb02 ~]# cat check_split_brain.sh
#!/bin/sh
lb01_vip=10.0.0.3
lb01_ip=10.0.0.5
while true;do
ping -c 2 -w 3 $lb01_ip &>/dev/null
if [ $? -eq 0 -a `ip add|grep "$lb01_vip"|wc -l` -eq 1 ];then
echo "ha is split brain.warning."
else
echo "ha is ok"
fisleep 5
done
測試:隨意在[root@1b01 ~]# vim /etc/nginx/nginx.conf 的配置檔案裡面寫入字元,讓nginx啟動失效
[root@1b01 ~]# systemctl restart nginx
job for nginx.service failed because the control process exited with error code. see "systemctl status nginx.service" and "journalctl -xe" for details.
檢查會發現它自已通過指令碼切換到backup keepalived
[root@1b01 ~]# hostname -i
10.0.0.5 172.16.1.5
[root@1b02 scripts]# hostname -i
10.0.0.6 10.0.0.3 172.16.1.6
則成功!!!!!!
Keepalived 實現高可用
對於主負載均衡伺服器,修改配置檔案 vim etc keepalived keepalived.conf configuration file for keepalived global defs vrrp instance vi 1 virtual ipaddress 備用負載均衡伺服器 vim ...
keepalived實現高可用
一.keepalived是什麼 keepalived最初是為lvs負載均衡設計的,用於監控lvs集群系統中的各個節點的服務狀態。後來又加入了基於vrrp的高可用功能,所以也可以作為nginx,mysql等服務的高可用解決方案使用。vrrp virtual router redundancy prot...
keepalived實現主備切換
wget tar zxvf keepalived 1.2.18 tar.gz c usr local yum install y openssl openssl devel cd keepalived 1.2.18 configure prefix usr local keepalived make...