1、什麼是高可用,爲什麼要設計高可用
一般指啓動兩臺相同的業務系統,當有一臺故障,另外一臺自動接管,對於用戶而言是無感知的, 專業解釋:減少系統不能提供服務的時間。
2、keepalived如何實現高可用
keepalived需要藉助一個VRRP協議來實現高可用(VRRP 虛擬路由冗餘協議)
3、keepalived高可用核心概念
1、選舉 ---> 優先級
2、搶佔式 與 非搶佔式
3、腦裂 ---> fance仲裁 --> 關閉一臺服務器的電源
軟件方案 --> 漏洞百出
4、keepalived高可用環境準備
狀態 IP 角色
節點1 10.0.0.5 Master
節點2 10.0.0.6 Backup
VIP 10.0.0.3
5、keepalived高可用安裝使用
1、在Lb01、Lb02上安裝keepalived高可用
[root@lb01 ~]# yum install keepalived -y
[root@lb02 ~]# yum install keepalived -y
2、在Lb01、Lb02配置keeplaived
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
3、在Lb01、Lb02上啓動keeplaived
[root@lb01 ~]# systemctl start keepalived.service
[root@lb01 ~]# systemctl enable keepalived.service
[root@lb02 ~]# systemctl start keepalived.service
[root@lb02 ~]# systemctl enable keepalived.service
4、 如果nginx故障了,怎麼結局,腳本怎麼寫
[root@lb01 conf.d]# cat /scripts/check_web.sh
#!/usr/bin/bash
#1.檢查nginx進程數量
Nginx_Process_Number=$(ps -C nginx --no-header|wc -l)
#2.判斷nginx進程數量
if [ $Nginx_Process_Number -lt 2 ];then
#3.如果進程小於2,則嘗試重新啓動一次Nginx,並等待2s
systemctl restart nginx &>/dev/null
sleep 2
Nginx_Process_Number=$(ps -C nginx --no-header|wc -l)
#4.如果再次執行進程還是小於2,則直接kill掉keeplaived
if [ $Nginx_Process_Number -lt 2 ];then
pkill keepalived
fi
fi
[root@lb01 conf.d]# chmod +x /opt/keepalived.sh
5、腳本如何執行
2.1 定時任務 ( 分鐘級 )
2.2 sleep命令 ( 秒級 )
2.3 keeplaived 調腳本 ( 秒 | 分 )
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_01
}
#1.每5秒執行一次腳本, 腳本執行內容不能超過5秒,否則會被中斷再次重新運行腳本
vrrp_script check_web {
script "/server/scripts/check_web.sh"
interval 5
}
vrrp_instance VI_1 {
nopreempt
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
#2.調用並運行該腳本
track_script {
check_web
}
}