VIP配置
集群管理支持通过回调脚本方式在主备切换场景下自动切换VIP的功能。has_agent在本地数据库角色发生切换为主库时,可以通过回调脚本或配置参数的形式,绑定VIP地址;当本节点数据库角色切换为备机时,主动解除VIP地址绑定。
创建VIP绑定回调脚本
使用数据库安装用户,在集群内所有节点的has_agent的配置文件目录下创建VIP绑定功能的回调shell脚本has_callback.sh文件。
步骤1 切换至数据库安装用户(本文以用户vastbase为例)。
步骤2 在has_agent目录下创建回调脚本has_callback.sh。
su - vastbase
cd /opt/vastbase/data/cmserver/cm_agent
vi has_callback.sh
脚本内容如下,注意根据实际情况调整要绑定的VIP网卡名称、广播地址、掩码等参数值:
#!/bin/bash
# -------------------------------------------------------------------------------
# Filename: has_callback.sh
# Revision: 1.0
# Date: 2019/10/09
# Description:
# Notes:
# callback 仅实现vip 的 添加和移除
#
# -------------------------------------------------------------------------------
#
# -------------------------------------------------------------------------------
readonly cb_name=$1
readonly role=$2
readonly scope=$3
VIP=172.16.105.107 # vip 地址
#VIP=2001::e1:172:16:102:5
VIPBRD=172.16.107.255 # 广播地址
VIPNETMASKBIT=22 # 掩码
VIPDEV=eth0 # 网络接口名称,vip会绑定到该接口
VIPLABEL=1 # 接口标签,默认为1
PING_TIMEOUT=2 # 设置为不高于vastbase.yml配置文件里loop_wait的40%,如果loop_wait设置为10,PING_TIMEOUT建议设置为3,如果loop_wait设置为5,
建议设置为2
function usage() {
echo "Usage: $0 <on_start|on_stop|on_role_change> <role> <scope>";
exit 1;
}
function addvip(){
echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` INFO: /sbin/ip addr add ${VIP}/${VIPNETMASKBIT} brd ${VIPBRD} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}"
sudo /sbin/ip addr add ${VIP}/${VIPNETMASKBIT} brd ${VIPBRD} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}
sudo /usr/sbin/arping -q -A -c 1 -I ${VIPDEV} ${VIP}
#sudo /sbin/iptables -F
}
function delvip(){
echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` INFO: sudo /sbin/ip addr del ${VIP}/${VIPNETMASKBIT} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}"
sudo /sbin/ip addr del ${VIP}/${VIPNETMASKBIT} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}
#sudo /usr/sbin/arping -q -A -c 1 -I ${VIPDEV} ${VIP}
#sudo /sbin/iptables -F
}
#if [[ $cb_name != 'on_master_check' ]]; then
# echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` WARNING: has callback $cb_name $role $scope"
#fi
#if [[ $cb_name != 'on_master_check' ]]; then
# echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` WARNING: has callback $cb_name $role $scope"
#fi
case $cb_name in
on_stop)
delvip
;;
on_start)
if [[ $role == 'master' ]]; then
addvip
fi
;;
on_role_change)
if [[ $role == 'master' ]]; then
addvip
elif [[ $role == 'slave' ]]||[[ $role == 'replica' ]]||[[ $role == 'logical' ]]; then
delvip
fi
;;
on_master_check)
if [[ $role == 'master' ]]; then
vip_status=`ip addr|grep ${VIP}`
if [[ ${vip_status} == '' ]]; then
echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` WARNING: has callback $cb_name $role $scope"
echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` WARNING: The vip was lost,bind vip because i am leader"
/usr/bin/ping -I ${VIPDEV} -q -c 3 -W ${PING_TIMEOUT} ${VIP}
is_vip_used=$?
if [[ $is_vip_used -eq 0 ]]; then
echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` WARNING: The vip bind failed, ${VIP} is in use"
else
addvip
fi
fi
fi
;;
on_slave_check)
if [[ $role == 'slave' ]]; then
vip_status=`ip addr|grep ${VIP}`
if [[ ${vip_status} != '' ]]; then
delvip
fi
fi
;;
*)
usage
;;
esac
步骤3 给脚本文件赋执行权限,用于在本节点数据库主备角色发生变化时,自动由集群管理服务执行绑定和释放VIP的操作。
chmod u+x has_callback.sh
步骤4 切换至root用户。
步骤5 has_callback.sh中执行的命令需要管理员权限,因此需要设置sudo权限(使用root用户执行visudo命令),在最后边添加行,如(vastbase为用户名,可替换成实际的用户名,ip与arping命令路径也需要根据实际情况配置)。
1、使用root用户执行visudo命令。
visudo
2、在文件中找到root ALL=(ALL) ALL,在该行下方添加以下内容:
vastbase ALL=(ALL:ALL) NOPASSWD:/sbin/ip,/usr/sbin/arping,/sbin/iptables,/sbin/ifconfig
步骤6 赋予/usr/bin/sudo命令执行权限。
chmod u+s /usr/bin/sudo
步骤7 赋予各命令执行权限。
chmod +x /usr/sbin/ip
chmod +x /usr/sbin/arping
chmod +x /usr/sbin/iptables
chmod +x /usr/sbin/ifconfig
修改HAS相关配置文件
用数据库安装用户,修改集群中每个节点的has_agent配置文件cm_agent.conf中的callback_bin_path参数,将建的shell脚本路径/opt/vastbase/data/cmserver/cm_agent/has_callback.sh写入。
步骤1 切换至数据库安装目录,执行如下命令:
cd /opt/vastbase/data/cmserver/cm_agent
vi cm_agent.conf
修改内容:
callback_bin_path=/opt/vastbase/data/cmserver/cm_agent/has_callback.sh
修改完成显示如下:
步骤2 修改alarmConfig.conf配置文件,也同样将has_callback.sh脚本路径写入参数callback_bin_path。
vi $GAUSSHOME/bin/alarmConfig.conf
修改内容:
callback_bin_path=/opt/vastbase/data/cmserver/cm_agent/has_callback.sh
修改完成显示如下:
在其他节点上重复上述步骤。
has_callback.sh 脚本和callback_bin_path配置参数修改需要在所有集群内的节点上完成以上修改配置。
重启集群VIP绑定功能生效
使用数据库安装用户vastbase用户重启集群使VIP功能的配置生效。
has_ctl stop
has_ctl start
查看IP,下图表示VIP已经成功绑定至172.16.105.54为例的节点上。