下載包?下載地址?https://www.keepalived.org/software/keepalived-2.0.20.tar.gz
解壓縮?tar -zxvf keepalived-2.0.20.tar.gz
進入到解壓完的目錄?cd keepalived-2.0.20
準備環(huán)境
安裝openssl-devel
yum -y install openssl-devel
安裝gcc
yum -y install gcc
安裝
./configure --prefix=/usr/local/keepalived
make && make install
安裝完成后系統(tǒng)會在/usr/local/keepalived目錄下生成 bin etc sbin share 這 4 個文件夾。 配置文件(keepalived.conf)在 /usr/local/keepalived/etc/keepalived 這個路徑下
拷貝配置文件
mkdir -p /etc/keepalived/?*keepalived啟動時默認去這個路徑加載配置文件*
cp keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
復制后就可以操作/etc/keepalived/keepalived.conf文件了
配置文件
主配置文件
global_defs {
? router_id NodeA
? vrrp_skip_check_adv_addr
? vrrp_garp_interval 0
? vrrp_gna_interval 0
}
vrrp_script check_script {
? ? ? ? script "/etc/keepalived/check_nginx.sh 80"
? ? ? ? interval 10
}
vrrp_instance VI_1 {
? ? state MASTER
? ? interface ens33
? ? virtual_router_id 131
? ? priority 100
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.152.131
? ? }
}
從配置文件
global_defs {
? router_id NodeB
? vrrp_skip_check_adv_addr
? vrrp_garp_interval 0
? vrrp_gna_interval 0
}
vrrp_script check_script {
? ? ? ? script "/etc/keepalived/check_nginx.sh 80"
? ? ? ? interval 10
}
vrrp_instance VI_1 {
? ? state BACKUP
? ? interface ens33
? ? virtual_router_id 131
? ? priority 100
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.152.131
? ? }
}
按同樣的方法配置節(jié)點B并修改配置文件,可將A節(jié)點的配置文件復制到B節(jié)點,并修改以下幾項:
router_id NodeB
state BACKUP
priority 99
其它項不必修改。
啟動keepalived
/usr/local/keepalived/sbin/keepalived -D
查看進程
ps aux | grep keepalived

Keepalived 正常運行時,共啟動 3 個進程,其中一個進程是父進程,負責監(jiān)控其子進程;一個是 vrrp 子進程;另外一個是 checkers 子進程
查看虛擬IP是否已經綁定到網卡上
ip a
常用命令
systemctl restart keepalived
配置nginx主從切換
將寫好的腳本復制到/etc/keepalived/文件夾下*就是keepalived的配置文件內配置的 vrrp_script check_script 節(jié)點*
腳本內容
#!/bin/bash
#author:liudan
#description:check nginx service
port=$1
count=0
for (( k=0; k<2; k++ ))
do
? ? check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://127.0.0.1:$port -o /dev/null )
? ? if [ "$check_code" != "200" ]; then
? ? ? ? count=$(expr $count + 1)
? ? ? ? sleep 3
? ? ? ? continue
? ? else
? ? ? ? count=0
? ? ? ? break
? ? fi
done
if [ "$count" != "0" ]; then
? ? #/usr/local/nginx/sbin/nginx -s restart
? ? exit 1
else
? ? exit 0
fi
配置mysql主從切換
配置文件
主配置文件
! Configuration File for keepalived
global_defs {
? ? router_id HA_MySQL #標識,雙主相同
}
vrrp_instance VI_1 {
? ? state MASTER
? ? interface ens33
? ? virtual_router_id 51 #分組,主備相同
? ? priority 100 #優(yōu)先級,這個高一點則先把它作為master
? ? advert_int 1
? ? nopreempt #不主動搶占資源,設置非搶占模式
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.152.131
? ? }
}
virtual_server 192.168.152.131 3306 {
? ? delay_loop 2
? ? lb_algo wrr #帶有權重的輪詢
? ? lb_kind DR
? ? persistence_timeout 60 #同一IP的連接60秒內被分配到同一臺真實服務器
? ? protocol TCP
? ? real_server 192.168.152.132 3306 {
? ? ? ? weight 3 #權重為3
? ? ? ? notify_down /data/keepalived_shutdown.sh #當mysq服down時,執(zhí)行此腳本,殺死keepalived實現(xiàn)切換, 自殺腳本.
? ? ? ? TCP_CHECK {
? ? ? ? ? ? connect_timeout 10
? ? ? ? ? ? nb_get_retry 3
? ? ? ? ? ? delay_before_retry 3
? ? ? ? ? ? connect_port 3306
? ? ? ? }
? ? }
}
從配置文件
! Configuration File for keepalived
global_defs {
? ? router_id HA_MySQL
}
vrrp_instance VI_1 {
? ? state BACKUP
? ? interface ens33
? ? virtual_router_id 51
? ? priority 90 #優(yōu)先級,這個低一點
? ? advert_int 1
? ? nopreempt
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress { #虛擬IP (VIP)
? ? ? ? 192.168.152.131
? ? }
}
virtual_server 192.168.152.131 3306 {
? ? delay_loop 2 #每2秒檢查一次real_server存活
? ? lb_algo wrr
? ? lb_kind DR
? ? persistence_timeout 60
? ? protocol TCP
? ? real_server 192.168.152.130 3306 {
? ? ? ? weight 3
? ? ? ? notify_down /data/keepalived_shutdown.sh
? ? ? ? TCP_CHECK {
? ? ? ? ? ? connect_timeout 10 #連接超時時間
? ? ? ? ? ? nb_get_retry 3 #重連次數(shù)
? ? ? ? ? ? delay_before_retry 3 #重連間隔時間
? ? ? ? ? ? connect_port 3306 #健康檢查端口,配置自己mysql服務端口
? ? ? ? }
? ? }
}