

在YashanDB 23.2.7 YAC集群部署手册中,部署了YAC 23.2.7,在那一段时间关于YAC集群的文章,我也向崖山提出了关于VIP和SCAN的需求,崖山数据库的产品经理也给了非常正向的反馈,在内部建立了相应处理流程并承诺在未来版本中解决。一年快过去了,崖山数据库的新品发布也将到来,作为崖山数据库YVP也提前获得了内测邀请,可以深入体验即将发布的23.5.1版本,在这个版本中YAC集群已经实现了VIP与SCAN。
这里介绍的主要是崖山共享集群高可用方面的新特性:
本期主要对去年留下的执念VIP和SCAN进行探索。
YashanDB版本: yashandb-23.5.1.100-linux-x86_64
主机信息:

共享磁盘信息:

已在yasdb-storage完成存储分配与iscsi配置,挂载后根据磁盘id使用udev进行处理至对应路径并给予对应权限,相关过程可查看Oracle Database 23ai测试版RAC部署文档,有类似处理过程,本文省略。


HOSTS信息:
10.10.10.111 yasdb01
10.10.10.112 yasdb02
10.10.10.113 yasdb01-vip
10.10.10.114 yasdb02-vip
10.10.10.115 yasdb-scan
20.20.20.111 yasdb01-priv
20.20.20.112 yasdb02-priv
30.30.30.111 yasdb01-san
30.30.30.112 yasdb02-san
30.30.30.110 yasdb-storage
其余操作系统配置仍然按照YashanDB 23.2.7 YAC集群部署手册中内容进行操作,本文省略。两个节点的yashan用户已配置SSH互信和sudo权限。
su - yashan
mkdir /data/install
mv yashandb-23.5.1.100-linux-x86_64.tar.gz /data/install
cd /data/install
tar -xvf yashandb-23.5.1.100-linux-x86_64.tar.gz

cd ./om
./bin/yasom --web --listen 10.10.10.111:9001

访问WEB部署页面:
http://10.10.10.111:9001






sys密码为YashanDB#123











VIP和SCANIP都已成功运行。
cd /data/yasdb/23.5.1.100/conf/
cat yashandb.bashrc >> ~/.bash_profile
source ~/.bash_profile
yasql sys/YashanDB#123@10.10.10.115:1688

通过SCAN可以正常访问数据库。

通过SCAN可以正常路由到两个节点。
这里尝试关闭yasdb01节点,检查yasdb02网络:

yasdb01节点的VIP和SCAN都正常漂移到了yasdb02节点。

可以通过SCAN访问存活节点。
恢复yasdb01节点,检查网络配置情况:

yasdb01节点的VIP未恢复至对应节点,那么开始尝试解决这个问题。
# yasdb01执行或添加至环境变量
export YASCS_HOME=/data/yasdb/yasdb_data/ycs/ce-1-1
# yasdb02执行或添加至环境变量
export YASCS_HOME=/data/yasdb/yasdb_data/ycs/ce-1-2
# 任意节点检查
ycsctl show config

在检查官方文档的过程中发现安装后还需要添加自启动:
# yasdb01环境变量
export YASDB_HOME=/data/yasdb/23.5.1.100
export PATH=${YASDB_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${YASDB_HOME}/lib
ifcommand -v rlwrap >/dev/null 2>&1; then
alias yasql="rlwrap yasql"
fi
export YASDB_DATA=/data/yasdb/yasdb_data/ce-1-1
export YASCS_HOME=/data/yasdb/yasdb_data/ycs/ce-1-1
# yasdb02环境变量
export YASDB_HOME=/data/yasdb/23.5.1.100
export PATH=${YASDB_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${YASDB_HOME}/lib
ifcommand -v rlwrap >/dev/null 2>&1; then
alias yasql="rlwrap yasql"
fi
export YASDB_DATA=/data/yasdb/yasdb_data/ce-1-2
export YASCS_HOME=/data/yasdb/yasdb_data/ycs/ce-1-2
# yasdb01 root用户执行
cat > /usr/local/bin/yashan_monit.sh <<EOF
#!/bin/bash
MONIT_AUTOSTART="true" # 是否监控monit进程,true表示是,其他值表示否
YCSROOTAGENT_AUTOSTART="true" # 是否监控ycsrootagent进程,true表示是,其他值表示否
YASDB_USER=yashan # YashanDB的安装用户
YASDB_HOME=/data/yasdb/23.5.1.100 # YashanDB的HOME目录
YASCS_HOME=/data/yasdb/yasdb_data/ycs/ce-1-1 # ycsrootagent进程对应目录
INTERVAL=3 # 监控间隔,单位为秒,定期根据进程名监控对应进程是否正常,若否则重新启动
while true; do
if "\$MONIT_AUTOSTART" = "true"; then
if ! pgrep -a monit | grep "\$YASDB_HOME" > /dev/null; then
echo "\$(date) monit abnormal, try restart..."
su - \$YASDB_USER -c "source ~/.bash_profile && \$YASDB_HOME/om/bin/monit -c \$YASDB_HOME/om/monit/monitrc" &
fi
fi
if "\$YCSROOTAGENT_AUTOSTART" = "true"; then
if ! pgrep -a ycsrootagent | grep "\$YASCS_HOME" > /dev/null; then
echo "\$(date) ycsrootagent abnormal, try restart..."
export LD_LIBRARY_PATH=\$YASDB_HOME/lib # 官方文档中未使用export而是env,实测RHEL9.6无法生效
\$YASDB_HOME/bin/ycsrootagent start -H \$YASCS_HOME &
fi
fi
sleep "\$INTERVAL"
done
EOF
chmod +x /usr/local/bin/yashan_monit.sh
cat > /etc/systemd/system/yashan_monit.service <<EOF
[Unit]
Description=Yashan Monitor
After=network.target
[Service]
ExecStart=/usr/local/bin/yashan_monit.sh
Type=simple
Restart=always
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable yashan_monit
systemctl start yashan_monit
# yasdb02 root用户执行
cat > /usr/local/bin/yashan_monit.sh <<EOF
#!/bin/bash
MONIT_AUTOSTART="true" # 是否监控monit进程,true表示是,其他值表示否
YCSROOTAGENT_AUTOSTART="true" # 是否监控ycsrootagent进程,true表示是,其他值表示否
YASDB_USER=yashan # YashanDB的安装用户
YASDB_HOME=/data/yasdb/23.5.1.100 # YashanDB的HOME目录
YASCS_HOME=/data/yasdb/yasdb_data/ycs/ce-1-2 # ycsrootagent进程对应目录
INTERVAL=3 # 监控间隔,单位为秒,定期根据进程名监控对应进程是否正常,若否则重新启动
while true; do
if "\$MONIT_AUTOSTART" = "true"; then
if ! pgrep -a monit | grep "\$YASDB_HOME" > /dev/null; then
echo "\$(date) monit abnormal, try restart..."
su - \$YASDB_USER -c "source ~/.bash_profile && \$YASDB_HOME/om/bin/monit -c \$YASDB_HOME/om/monit/monitrc" &
fi
fi
if "\$YCSROOTAGENT_AUTOSTART" = "true"; then
if ! pgrep -a ycsrootagent | grep "\$YASCS_HOME" > /dev/null; then
echo "\$(date) ycsrootagent abnormal, try restart..."
export LD_LIBRARY_PATH=\$YASDB_HOME/lib
\$YASDB_HOME/bin/ycsrootagent start -H \$YASCS_HOME &
fi
fi
sleep "\$INTERVAL"
done
EOF
chmod +x /usr/local/bin/yashan_monit.sh
cat > /etc/systemd/system/yashan_monit.service <<EOF
[Unit]
Description=Yashan Monitor
After=network.target
[Service]
ExecStart=/usr/local/bin/yashan_monit.sh
Type=simple
Restart=always
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable yashan_monit
systemctl start yashan_monit



yasdb01节点的VIP已正常恢复至对应节点。测试yasdb02关闭并启动,VIP和SCAN也能正常漂移。
去年的简单吐槽,让崖山数据库完成了VIP和SCAN的支持,那么在本次安装部署和简单使用中也有一些意见和建议:
在本文写好,反馈给官方的时候,崖山也给出了这三个问题的回答:
jdbc:yasdb:primary://192.168.1.2:1688,192.168.1.3:1688/yashan?poolTimeout=180&failover=on&failoverType=session&failoverMethod=basic&failoverRetries=5&failoverDelay=1
经过近一年的发展,从23.2.7到23.5.1,崖山数据库共享集群带来如VIP和SCAN的重要功能更新。 老规矩,知道写了些啥。