keepalived實現nginx的高可用

2021-09-05 09:11:59 字數 3021 閱讀 5110

前言: 

優化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...