从需求到落地!崖山YAC集群补齐VIP+SCAN
数据库管理-第393期 从需求到落地!崖山YAC集群补齐VIP+SCAN(20251124)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE
OpenTenBase ACE
10年数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸
CSDN:胖头鱼的鱼缸(尹海文)
墨天轮:胖头鱼的鱼缸
ITPUB:yhw1809
IFClub:胖头鱼的鱼缸
除授权转载并标明出处外,均为“非法”抄袭
在YashanDB 23.2.7 YAC集群部署手册中,部署了YAC 23.2.7,在那一段时间关于YAC集群的文章,我也向崖山提出了关于VIP和SCAN的需求,崖山数据库的产品经理也给了非常正向的反馈,在内部建立了相应处理流程并承诺在未来版本中解决。一年快过去了,崖山数据库的新品发布也将到来,作为崖山数据库YVP也提前获得了内测邀请,可以深入体验即将发布的23.5.1版本,在这个版本中YAC集群已经实现了VIP与SCAN。
1 主要新特性介绍
这里介绍的主要是崖山共享集群高可用方面的新特性:
VIP与SCAN 共享集群全库闪回
指定优先级的实例链接和切换 YFS磁盘级故障处理机制
本期主要对去年留下的执念VIP和SCAN进行探索。
2 基础环境与信息
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权限。
3 部署YAC
3.1 解压安装包
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
3.2 启动WEB部署页面
cd ./om
./bin/yasom --web --listen 10.10.10.111:9001
3.3 WEB部署
访问WEB部署页面:
http://10.10.10.111:9001
3.3.1 添加服务器并进行校验
3.3.2 sudo相关配置
3.3.3 配置节点信息
sys密码为YashanDB#123
3.3.3 配置建库参数
3.3.4 配置数据库节点参数
3.3.5 全局信息确认
3.3.6 开始部署
3.3.7 完成部署
4 访问数据库数据库
4.1 检查网络
VIP和SCANIP都已成功运行。
4.2 配置环境变量
cd /data/yasdb/23.5.1.100/conf/
cat yashandb.bashrc >> ~/.bash_profile
source ~/.bash_profile
4.3 访问数据库
yasql sys/YashanDB#[email protected]:1688
通过SCAN可以正常访问数据库。
4.4 检查访问节点
通过SCAN可以正常路由到两个节点。
5 高可用测试
5.1 关闭节点
这里尝试关闭yasdb01节点,检查yasdb02网络:
yasdb01节点的VIP和SCAN都正常漂移到了yasdb02节点。
可以通过SCAN访问存活节点。
5.2 恢复节点
恢复yasdb01节点,检查网络配置情况:
yasdb01节点的VIP未恢复至对应节点,那么开始尝试解决这个问题。
5.3 检查配置
# 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
5.4 配置开机自启动
在检查官方文档的过程中发现安装后还需要添加自启动:
5.4.1 重新调整环境变量
# 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
5.4.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
5.5 检查网络
yasdb01节点的VIP已正常恢复至对应节点。测试yasdb02关闭并启动,VIP和SCAN也能正常漂移。
6 吐槽
去年的简单吐槽,让崖山数据库完成了VIP和SCAN的支持,那么在本次安装部署和简单使用中也有一些意见和建议:
因配置了sudo权限,集群自启动配置应当在集群部署过程中完成,或添加选项是否配置集群自启动,额外的配置略微有点复杂(实际操作中需要根据操作系统版本调整部分文档提供的内容,需要一定的操作系统和shell基础);与之对应的环境变量也应当实现自动配置 经过实测(环境为4C16G),VIP和SCAN的漂移判断完成时间大概是一分钟左右,如果仅配置一个SCANIP在节点异常时会出现一定时间的数据库无法访问,因此可以和Oracle一样一个SCAN_NAME(域名)对应3个IP的方式实现高可用,但数据库连接可能需要额外配置DNS或其他模式的负载均衡(包括JDBC配置)。当然我也希望VIP和SCAN漂移时间能进一步缩短,降低造成影响的概率 实测节点异常中断,连接在对应节点的会话也会中断,这就需要业务应用针对这种情况配置相应的应对机制,那么下一个建议就是崖山数据库也能实现类似于Oracle的TAF/TAC的功能,实现数据库节点异常业务不报错不中断
在本文写好,反馈给官方的时候,崖山也给出了这三个问题的回答:
安装过程中是可以配置开机集群/数据库开机启动的,WEB安装中我也勾选了对应选项,但是在实际使用中没有生效,目前怀疑是RHEL9.6操作系统版本问题,主要是systemd版本更新后对应的脚本也需要变化,在本文自启动脚本中也有对应说明 目前崖山数据库共享集群VIP和SCAN的默认切换时间为60s,可以通过参数DISK_HB_KEEP_ALIVE调整以达到更快的切换时间,但需要综合考虑网络波动(存储网络、私网)和故障的推荐值,配置过小可能会产生故障误判。 目前崖山数据库其实已支持类似于Oracle TAF的功能,已在C驱动,OCI,ODBC,JDCB中支持。select过程中节点异常业务不报错不中断;其他操作会有"Cannot be safely called repeatedly."的TAF报错,需要业务捕获并处理。JDBC连接串范例如下:
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的重要功能更新。
老规矩,知道写了些啥。