一、安装keepalived
yum install -y kernel-devel (安装kernerl-devel,目的是给keepalived提供和LVS搭配使用)
yum install -y openssl-devel ( HTTPS 服务的时候要用到此模块)
yum install gcc gcc-c++ make -y (提供编译工具)
tar -xf keepalived-2.0.12.tar.gz -C /usr/local/src/
cd /usr/local/src/keepalived-2.0.12/
./configure --prefix=/usr/local/keepalived
make && make install
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
systemctl restart keepalived
二、第一个节点配置
vi /etc/keepalived/keepalived.conf
--------------------------------------------
! Configuration File for keepalived
## 全局定义
global_defs {
router_id Keepalived_openGauss01 #运行 keepalived 服务器的一个标识
script_user root #执行脚本的用户
}
vrrp_script chk_opengauss_active {
script "/etc/keepalived/chk_opengauss_active.sh" #脚本路径
interval 2 #脚本检测频率
fall 2 #如果连续两次检测失败,认为节点服务不可用
rise 1 #如果连续一次检查成功则认为节点正常
}
## VRRP实例定义
## 通常如果master服务Down掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP,这样就会发生两次数据库切换。
## 建议使用nopreempt参数设置为非抢占模式,此时主库从故障中恢复后,不会从新的主库抢回VIP,但这需要将master和backup的state都设置成backup。
vrrp_instance VI_1 {
state BACKUP #指定Keepalived的角色(BACKUP需大写)
interface eth0 #指定 HA 监测的网络接口
virtual_router_id 59 #虚拟路由的数字标识,同一个 vrrp_instance 下,MASTER 和 BACKUP 一致
nopreempt #非抢占模式,主库从故障中恢复后,不会从新的主库抢回VIP
priority 100 #优先级,备节点需要适当降低优先级
advert_int 1 #MASTER 和 BACKUP 负载均衡器同步检查的时间间隔(秒)
authentication { #设置验证码和验证类型
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #设置虚拟 IP 地址,可以设置多个,每个一行
192.168.1.10
}
notify_master "/etc/keepalived/change_to_master.sh"
track_script {
chk_opengauss_active
}
}
三、第二个节点配置
vi /etc/keepalived/keepalived.conf
--------------------------------------------
! Configuration File for keepalived
## 全局定义
global_defs {
router_id Keepalived_openGauss02 #运行 keepalived 服务器的一个标识
script_user root #执行脚本的用户
}
vrrp_script chk_opengauss_active {
script "/etc/keepalived/chk_opengauss_active.sh" #脚本路径
interval 2 #脚本检测频率
fall 2 #如果连续两次检测失败,认为节点服务不可用
rise 1 #如果连续一次检查成功则认为节点正常
}
## VRRP实例定义
## 通常如果master服务Down掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP,这样就会发生两次数据库切换。
## 建议使用nopreempt参数设置为非抢占模式,此时主库从故障中恢复后,不会从新的主库抢回VIP,但这需要将master和backup的state都设置成backup。
vrrp_instance VI_1 {
state BACKUP #指定Keepalived的角色(BACKUP需大写)
interface eth0 #指定 HA 监测的网络接口
virtual_router_id 59 #虚拟路由的数字标识,同一个 vrrp_instance 下,MASTER 和 BACKUP 一致
nopreempt #非抢占模式,主库从故障中恢复后,不会从新的主库抢回VIP
priority 90 #优先级,备节点需要适当降低优先级
advert_int 1 #MASTER 和 BACKUP 负载均衡器同步检查的时间间隔(秒)
authentication { #设置验证码和验证类型
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #设置虚拟 IP 地址,可以设置多个,每个一行
192.168.1.10
}
notify_master "/etc/keepalived/change_to_master.sh"
track_script {
chk_opengauss_active
}
}
四、存活脚本
vi /etc/keepalived/chk_opengauss_active.sh
--------------------------------------------
#!/bin/bash
active_num=$(netstat -tlnp|grep 26000|grep gaussdb|wc -l)
if [ ${active_num} -eq 0 ]; then
service keepalived stop
fi
五、切换脚本
vi /etc/keepalived/change_to_master.sh
--------------------------------------------
master_process=$(su - omm -c "gs_om -t status --detail"|grep Primary|wc -l)
if [ ${master_process} -eq 0 ]; then
su - omm -c "gs_ctl failover -D /data/opengauss/dn"
su - omm -c "gs_om -t refreshconf"
fi