部署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} #${}表示变量,需按VIP服务器实际网卡、ip信息进行配置 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_name
、replconninfo1
两个参数注释掉,注释时数据库保持启动即可,修改后无需重启,无需重载参数。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
正常查询结果样例如下: