下載包?下載地址?https://www.keepalived.org/software/keepalived-2.0.20.tar.gz
解壓縮?tar -zxvf keepalived-2.0.20.tar.gz
進(jìn)入到解壓完的目錄?cd keepalived-2.0.20
準(zhǔn)備環(huán)境
安裝openssl-devel
yum -y install openssl-devel
安裝gcc
yum -y install gcc
安裝
./configure --prefix=/usr/local/keepalived
make && make install
安裝完成后系統(tǒng)會(huì)在/usr/local/keepalived目錄下生成 bin etc sbin share 這 4 個(gè)文件夾葱蝗。 配置文件(keepalived.conf)在 /usr/local/keepalived/etc/keepalived 這個(gè)路徑下
拷貝配置文件
mkdir -p /etc/keepalived/?*keepalived啟動(dòng)時(shí)默認(rèn)去這個(gè)路徑加載配置文件*
cp keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
復(fù)制后就可以操作/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é)點(diǎn)B并修改配置文件芹橡,可將A節(jié)點(diǎn)的配置文件復(fù)制到B節(jié)點(diǎn),并修改以下幾項(xiàng):
router_id NodeB
state BACKUP
priority 99
其它項(xiàng)不必修改誓竿。
啟動(dòng)keepalived
/usr/local/keepalived/sbin/keepalived -D
查看進(jìn)程
ps aux | grep keepalived
Keepalived 正常運(yùn)行時(shí)纳猫,共啟動(dòng) 3 個(gè)進(jìn)程婆咸,其中一個(gè)進(jìn)程是父進(jìn)程,負(fù)責(zé)監(jiān)控其子進(jìn)程芜辕;一個(gè)是 vrrp 子進(jìn)程尚骄;另外一個(gè)是 checkers 子進(jìn)程
查看虛擬IP是否已經(jīng)綁定到網(wǎng)卡上
ip a
常用命令
systemctl restart keepalived
配置nginx主從切換
將寫好的腳本復(fù)制到/etc/keepalived/文件夾下*就是keepalived的配置文件內(nèi)配置的 vrrp_script check_script 節(jié)點(diǎn)*
腳本內(nèi)容
#!/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 #標(biāo)識(shí),雙主相同
}
vrrp_instance VI_1 {
? ? state MASTER
? ? interface ens33
? ? virtual_router_id 51 #分組侵续,主備相同
? ? priority 100 #優(yōu)先級(jí)绳匀,這個(gè)高一點(diǎn)則先把它作為master
? ? advert_int 1
? ? nopreempt #不主動(dòng)搶占資源袭祟,設(shè)置非搶占模式
? ? 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 #帶有權(quán)重的輪詢
? ? lb_kind DR
? ? persistence_timeout 60 #同一IP的連接60秒內(nèi)被分配到同一臺(tái)真實(shí)服務(wù)器
? ? protocol TCP
? ? real_server 192.168.152.132 3306 {
? ? ? ? weight 3 #權(quán)重為3
? ? ? ? notify_down /data/keepalived_shutdown.sh #當(dāng)mysq服down時(shí),執(zhí)行此腳本,殺死keepalived實(shí)現(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)先級(jí)薪铜,這個(gè)低一點(diǎn)
? ? 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 #連接超時(shí)時(shí)間
? ? ? ? ? ? nb_get_retry 3 #重連次數(shù)
? ? ? ? ? ? delay_before_retry 3 #重連間隔時(shí)間
? ? ? ? ? ? connect_port 3306 #健康檢查端口含衔,配置自己mysql服務(wù)端口
? ? ? ? }
? ? }
}