首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从需求到落地!崖山YAC集群补齐VIP+SCAN

从需求到落地!崖山YAC集群补齐VIP+SCAN

作者头像
胖头鱼的鱼缸
发布2026-07-02 14:56:50
发布2026-07-02 14:56:50
720
举报

数据库管理-第393期 从需求到落地!崖山YAC集群补齐VIP+SCAN(20251124)

914fcc7ad57defa7868c3be1ca7fb4f5.jpg
914fcc7ad57defa7868c3be1ca7fb4f5.jpg

在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

主机信息:

image.png
image.png

共享磁盘信息:

image.png
image.png

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

image.png
image.png
image.png
image.png

HOSTS信息:

代码语言:javascript
复制
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 解压安装包

代码语言:javascript
复制
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
image.png
image.png

3.2 启动WEB部署页面

代码语言:javascript
复制
cd ./om
./bin/yasom --web --listen 10.10.10.111:9001
image.png
image.png

3.3 WEB部署

访问WEB部署页面:

http://10.10.10.111:9001

3.3.1 添加服务器并进行校验
image.png
image.png
image.png
image.png
3.3.2 sudo相关配置
image.png
image.png
3.3.3 配置节点信息
image.png
image.png
image.png
image.png
image.png
image.png

sys密码为YashanDB#123

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
3.3.3 配置建库参数
image.png
image.png
3.3.4 配置数据库节点参数
image.png
image.png
3.3.5 全局信息确认
image.png
image.png
3.3.6 开始部署
image.png
image.png
3.3.7 完成部署
image.png
image.png

4 访问数据库数据库

4.1 检查网络

image.png
image.png
image.png
image.png

VIP和SCANIP都已成功运行。

4.2 配置环境变量

代码语言:javascript
复制
cd /data/yasdb/23.5.1.100/conf/
cat yashandb.bashrc >> ~/.bash_profile
source ~/.bash_profile

4.3 访问数据库

代码语言:javascript
复制
yasql sys/YashanDB#123@10.10.10.115:1688
image.png
image.png

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

4.4 检查访问节点

image.png
image.png

通过SCAN可以正常路由到两个节点。

5 高可用测试

5.1 关闭节点

这里尝试关闭yasdb01节点,检查yasdb02网络:

image.png
image.png

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

image.png
image.png

可以通过SCAN访问存活节点。

5.2 恢复节点

恢复yasdb01节点,检查网络配置情况:

image.png
image.png

yasdb01节点的VIP未恢复至对应节点,那么开始尝试解决这个问题。

5.3 检查配置

代码语言:javascript
复制
# 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
image.png
image.png

5.4 配置开机自启动

在检查官方文档的过程中发现安装后还需要添加自启动:

5.4.1 重新调整环境变量
代码语言:javascript
复制
# 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 配置自启动脚本
代码语言:javascript
复制
# 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
image.png
image.png

5.5 检查网络

image.png
image.png
image.png
image.png

yasdb01节点的VIP已正常恢复至对应节点。测试yasdb02关闭并启动,VIP和SCAN也能正常漂移。

6 吐槽

去年的简单吐槽,让崖山数据库完成了VIP和SCAN的支持,那么在本次安装部署和简单使用中也有一些意见和建议:

  1. 因配置了sudo权限,集群自启动配置应当在集群部署过程中完成,或添加选项是否配置集群自启动,额外的配置略微有点复杂(实际操作中需要根据操作系统版本调整部分文档提供的内容,需要一定的操作系统和shell基础);与之对应的环境变量也应当实现自动配置
  2. 经过实测(环境为4C16G),VIP和SCAN的漂移判断完成时间大概是一分钟左右,如果仅配置一个SCANIP在节点异常时会出现一定时间的数据库无法访问,因此可以和Oracle一样一个SCAN_NAME(域名)对应3个IP的方式实现高可用,但数据库连接可能需要额外配置DNS或其他模式的负载均衡(包括JDBC配置)。当然我也希望VIP和SCAN漂移时间能进一步缩短,降低造成影响的概率
  3. 实测节点异常中断,连接在对应节点的会话也会中断,这就需要业务应用针对这种情况配置相应的应对机制,那么下一个建议就是崖山数据库也能实现类似于Oracle的TAF/TAC的功能,实现数据库节点异常业务不报错不中断

在本文写好,反馈给官方的时候,崖山也给出了这三个问题的回答:

  1. 安装过程中是可以配置开机集群/数据库开机启动的,WEB安装中我也勾选了对应选项,但是在实际使用中没有生效,目前怀疑是RHEL9.6操作系统版本问题,主要是systemd版本更新后对应的脚本也需要变化,在本文自启动脚本中也有对应说明
  2. 目前崖山数据库共享集群VIP和SCAN的默认切换时间为60s,可以通过参数DISK_HB_KEEP_ALIVE调整以达到更快的切换时间,但需要综合考虑网络波动(存储网络、私网)和故障的推荐值,配置过小可能会产生故障误判。
  3. 目前崖山数据库其实已支持类似于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的重要功能更新。 老规矩,知道写了些啥。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 胖头鱼的鱼缸 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据库管理-第393期 从需求到落地!崖山YAC集群补齐VIP+SCAN(20251124)
    • 1 主要新特性介绍
    • 2 基础环境与信息
    • 3 部署YAC
      • 3.1 解压安装包
      • 3.2 启动WEB部署页面
      • 3.3 WEB部署
    • 4 访问数据库数据库
      • 4.1 检查网络
      • 4.2 配置环境变量
      • 4.3 访问数据库
      • 4.4 检查访问节点
    • 5 高可用测试
      • 5.1 关闭节点
      • 5.2 恢复节点
      • 5.3 检查配置
      • 5.4 配置开机自启动
      • 5.5 检查网络
    • 6 吐槽
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档