VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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为例的节点上。