VastbaseG100

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

Menu

部署HAS

HAS部署于Vastbase G100数据库节点中。根据此部分内容对各HAS节点进行部署,以下操作需使用root与vastbase用户操作。

HAS节点

本次部署基于HAS版本V1.2的一主一备高可用集群,HAS各节点列表如下:

节点名称 IP 默认端口
HAS节点1(数据库主节点) 192.xx.xx.1 8008
HAS节点2(数据库备节点) 192.xx.xx.2 8008

安装HAS

上传HAS二进制文件包,解压即用。并将可执行文件has、hasctl拷贝至/usr/bin目录下。

su - root
cd /data/soft/    #软件上传目录,此处以/data/soft为例
unzip HAS_VastbaseG100_${平台}_${版本}_${datetime}.zip
chmod +x ./has*
chown vastbase:vastbase ./has*
cp ./has* /usr/bin

配置HAS

配置vb.yml

编辑HAS配置文件vb.yml,写入DCS、Vastbase G100相关信息。

  • 2个数据库节点的HAS配置文件略有不同,需要注意修改。

  • 以vastbase用户执行。

步骤1 数据库主备节点执行以下内容(注意根据实际情况修改)。

mkdir -p /usr/local/has
chown -R vastbase.vastbase /usr/local/has

步骤2 数据库主备节点执行以下内容,编辑新增文件vb.yml,模板和配置项说明参见vb.yml,其中用户需对关键参数结合实际情况进行修改。

su - vastbase 
cd /usr/local/has
vi vb.yml
  • 本配置文件对格式要求较敏感,初次配置时建议用户在模板文件上修改。

  • use_extreme_rto:false 如果开启极致RTO,该参数必须设置为true,开启极致RTO后,备机不可读。

  • pg_ctl_timeout:600 数据库启动超时时间,根据实际情况设置。

  • vb.yml文件模板参见vb.yml

  • 集群搭建完成之后调整参数时,建议使用hasctl工具调整集群环境下的数据库参数,该工具可将参数变化同时应用至主备数据库中。

  • 在任意节点执行使用数据库用户在安装有has的节点上执行:

    cd /usr/local/has
    hasctl -c /usr/local/has/vb.yml edit -config
    
    • 编辑参数需注意:

      • hasctl编辑方式与vi工具相同,以:wq保存修改。

      • 新增参数时,注意将数据库参数添加至parameters分组下。

      • 参数缩进与max_connections等参数保持一致。

      • 参数名与参数值之间以:分隔,即冒号+1个空格。

      • 保存修改时,主备数据库将同步重载参数,应用变更。

配置HAS服务

步骤1 配置HAS服务,新增配置文件/usr/lib/systemd/system/has.service。

  • 凝思系统下配置文件路径为/lib/systemd/system/has.service。

  • 以下操作注意需使用root用户执行。

su - root
vi /usr/lib/systemd/system/has.service

[Unit]
Description=Vastbase HAS server daemon
After=network.target                #网络服务启动完成后,再启动has服务

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
#WorkingDirectory=/usr/local/has  #此参数从HAS V1.2 Build17开始添加
User=vastbase
EnvironmentFile=-/etc/sysconfig/vastbase-has
ExecStart=/usr/bin/has  /usr/local/has/vb.yml
ExecStopPost=/usr/bin/sudo /usr/sbin/ip addr del ${VIP}/${VIPNETMASKBIT} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL} #${}表示变量,取值将自动从EnvironmentFile指定的vastbase-has文件中获取
TimeoutStopSec=600
Restart=no
LimitMEMLOCK=infinity
LimitNOFILE=1024000

其中关键配置项含义如下:

  • After:指定HAS服务在network启动成功后启动。

  • Type:一般设置simple即可,如操作系统支持exec,则配置为exec。

  • EnvironmentFile:服务启动的环境变量文件路径。路径名之前‘ - ’号含义为如果该文件不存在则忽略。该文件路径根据实际部署路径填写。

  • User:HAS运行过程中可能会初始化或者启动数据库,这些操作不能以root用户执行,故指定该服务的用户跟数据库用户一致为vastbase。

  • WorkingDirectory:命令执行时的工作目录,在此目录下的lib目录用于存放运行时临时解压出来的python依赖;目前该目录需要配置为has可执行文件的上级目录(即和bin目录平级),该目录下有lib目录。

  • ExecStopPost:指定HAS进程终止后执行的命令,需要使用绝对路径指定命令路径,在HAS服务中,用于释放VIP。${}表示变量,需按VIP服务器实际网卡、ip信息进行配置

  • TimeoutStopSec:设置等待关闭的超时时间。

步骤2 保存后执行:

systemctl daemon-reload
  • 以服务方式启动HAS后,数据库进程也属于该服务,若使用kill -9杀死HAS进程,数据库进程也会被杀死。

  • 修改vb.yml和has.service配置文件之后都应该重新加载一次参数。

配置VIP

Vastbase G100高可用环境下,主节点可以是2个数据库节点中的任意一个。因此,如果应用通过物理IP访问主库,每当主备切换时,都需要人工调整应用访问数据库的连接串,这显然很不友好。因此,引入了VIP机制,即主库虚拟IP,以此来访问主库。

步骤1 切换至root用户。

步骤2 has_vip.sh中执行的命令需要管理员权限,因此需要设置sudo权限(使用root用户执行visudo命令),在最后边添加行,如(vastbase为用户名,可替换成实际的用户名,ip与arping命令路径也需要根据实际情况配置)。在数据库主、备节点以root用户执行如下命令:

(1)使用root用户执行visudo命令。

visudo 

(2)在文件中找到root ALL=(ALL) ALL,在该行下添加如下内容:

vastbase ALL=(ALL:ALL) NOPASSWD:/sbin/ip,/usr/sbin/arping,/sbin/iptables

步骤3 赋予/usr/bin/sudo命令执行权限。在数据库主、备节点以root用户执行如下命令:

chmod u+s /usr/bin/sudo

步骤4 赋予各命令执行权限。在数据库主、备节点以root用户执行如下命令:

chmod +x /usr/sbin/ip
chmod +x /usr/sbin/arping
chmod +x /usr/sbin/iptable
chmod +x /usr/sbin/ifconfig

步骤5 查看VIP节点的网卡信息。

ip a

步骤6 以vastbase用户编辑has_vip.sh文件,注意根据实际情况调整网卡名称、广播地址、掩码等参数值,需与步骤2查询的信息一致。在数据库主备节点均进行如下配置:

su - vastbase
cd /usr/local/has
vi has_vip.sh

#!/bin/bash
readonly cb_name=$1
readonly role=$2
readonly scope=$3

# 以下参数请根据实际情况填写,可参考步骤5返回的网卡信息
VIP=172.xx.xx.xx          # 虚拟IP
VIPBRD=172.xx.xx.xx       # 广播地址 
VIPNETMASK=255.xx.xx.xx    # 子网掩码
VIPNETMASKBIT=22            # 网络前缀

#VIPifconfig 
VIPDEV=xxx                 # 绑定VIP的网络接口
VIPLABEL=1                  # 网口接口标签

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: /usr/sbin/ip addr add ${VIP}/${VIPNETMASKBIT} brd ${VIPBRD} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}"
    sudo /usr/sbin/ip addr add ${VIP}/${VIPNETMASKBIT} brd ${VIPBRD} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}
    sudo /usr/sbin/arping -q -A -c 1 -b -I ${VIPDEV} ${VIP}
}

function delvip(){
    echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` INFO: sudo /usr/sbin/ip addr del ${VIP}/${VIPNETMASKBIT} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}"
    sudo /usr/sbin/ip addr del ${VIP}/${VIPNETMASKBIT} dev ${VIPDEV} label ${VIPDEV}:${VIPLABEL}
    sudo /usr/sbin/arping -q -A -c 1 -b -I ${VIPDEV} ${VIP}
}

echo "`date +%Y-%m-%d\ %H:%M:%S,%3N` WARNING: has callback $cb_name $role $scope"

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
        ;; 
    *)
        usage
        ;;
esac

步骤7 分别在数据库主、备节点切换至root用户下授予执行权限。

chmod +x has_vip.sh

配置vastbase-has配置文件

配置/etc/sysconfig/vastbase-has,即has.service的EnvironmentFile配置项指定的配置文件。

  • CONFIG_FILE为yml配置文件的路径,可参考vb.yml

  • VIP相关信息请根据实际情况填写,可参考has_vip.sh

    vi /etc/sysconfig/vastbase-has
    
    PYTHONPATH=${HAS_PATH}/lib/python2.7/site-packages
    CONFIG_FILE=/usr/local/has/vb.yml
    VIP=172.xx.xx.xx
    VIPBRD=172.xx.xx.xx
    VIPNETMASK=255.xx.xx.xx
    VIPNETMASKBIT=22
    VIPDEV=xxx
    VIPLABEL=1
    

主备参数配置

启动HAS之前,需要将主库和备库postgresql.conf中的application_namereplconninfo1两个参数注释掉,注释时数据库保持启动即可,修改后无需重启,无需重载参数。

vi $PGDATA/postgresql.conf   #主备均需注释以下两个参数
#replconninfo1='localhost=192.xx.xx.2 localport=26001 localheartbeatport=26002 localservice=26003 remotehost=192.xx.xx.1 remoteport=26001 remoteheartbeatport=26002 remoteservice=26003'
#application_name= 'vdb2'

启动HAS服务

Vastbase G100流复制正常,且Dcs也正常运行的情况下,手工启动2个数据库节点的HAS服务。

以下操作注意需使用root用户执行。

步骤1 依次启动两个节点的HAS服务,启动命令如下:

systemctl start has

步骤2 启动成功后,依次查看两个节点的HAS服务状态。

systemctl status has

步骤3 依次将两个节点的HAS服务设为开机启动。

systemctl enable has

步骤4 依次查看两个节点的HAS启动后的日志。

tail -f /var/log/message 或 journalctl -u has.service

主节点日志样例如下:

备节点HAS日志样例如下:

步骤5 HAS服务启动完毕后,检查集群状态。

使用数据库用户在安装有 has 的机器上进入安装目录下执行hasctl -c <yml 配置文件> list <集群名>,其中<集群名>可以省略。

cd /usr/local/has
hasctl -c /usr/local/has/vb.yml list

集群正常状态查询结果样例如下:

步骤6 若集群状态正常,检查流复制状态。

su - vastbase
vb_ctl query

正常查询结果样例如下:

步骤7 若集群流复制状态正常,检查主节点VIP是否正常启用。

ip a

正常查询结果样例如下:

步骤8 VIP成功启动后,测试VIP是否连通。

vsql -r -h 192.xx.xx.4 -d vastbase -U vbadmin -W Vbase@admin 

集群功能验证

重启主节点,验证主备是否自动切换、VIP是否自动切换、原主库是否自动加入集群。

主节点执行reboot,在原备库查看集群状态:

cd /usr/local/has
hasctl -c vb.yml list 
ip a

经验证,集群功能正常。

至此,HAS V1.2 for Vastbase G100高可用集群部署完成。