1. 首页 > 国产数据库教程 > OceanBase教程 > 正文

OceanBase教程FG178-OceanBase容灾切换自动化配置实战

本文档风哥主要介绍OceanBase数据库的容灾切换自动化配置实战,包括容灾架构搭建、配置文件设置、自动化脚本编写等。风哥教程参考OceanBase官方文档OceanBase容灾备份手册、OceanBase高可用管理手册等。

通过本文的学习,您将了解如何实际配置OceanBase的容灾切换自动化,确保系统的高可用性。

目录大纲

Part01-基础概念与理论知识

1.1 容灾切换自动化配置基本概念

容灾切换自动化配置是指通过配置文件和脚本实现OceanBase集群的自动故障检测和切换。具有以下特点:

  • 自动化:实现故障自动检测和切换,减少人工干预
  • 可靠性:确保切换过程的可靠性和稳定性
  • 可配置性:通过配置文件灵活调整切换策略
  • 可监控性:实现切换过程的监控和告警

1.2 容灾架构配置要点

容灾架构配置的要点:

  • 网络配置:确保主备集群之间的网络连通性
  • 数据同步:配置主备集群之间的数据同步
  • 监控配置:设置完善的监控和告警机制
  • 切换策略:配置合理的切换策略和阈值
  • 权限配置:确保切换脚本的执行权限

1.3 自动化配置组件

容灾切换自动化配置的组件:

  • 故障检测组件:检测主集群的状态
  • 切换决策组件:根据检测结果做出切换决策
  • 切换执行组件:执行切换操作
  • 监控告警组件:监控切换过程并告警
  • 回切组件:实现主集群恢复后的回切

风哥提示:容灾切换自动化配置是确保OceanBase数据库高可用性的关键,需要合理配置各个组件

Part02-生产环境规划与建议

2.1 容灾切换自动化配置规划

容灾切换自动化配置规划的建议:

  • 架构设计:根据业务需求设计合理的容灾架构
  • 网络规划:确保主备集群之间的网络连通性
  • 存储规划:确保主备集群有足够的存储空间
  • 监控规划:设置完善的监控和告警机制
  • 脚本规划:编写自动化切换脚本
  • 测试规划:定期进行容灾切换测试

2.2 容灾切换自动化配置建议

容灾切换自动化配置的建议:

  • 合理设置阈值:根据实际情况设置故障检测阈值
  • 完善监控:设置多维度的监控指标
  • 定期测试:定期进行容灾切换测试
  • 文档记录:记录配置过程和切换流程
  • 权限管理:确保切换脚本的执行权限
  • 备份策略:制定合理的备份策略

,风哥提示:。

Part03-生产环境项目实施方案

3.1 容灾架构搭建

容灾架构搭建的步骤:

# 1. 部署主集群

# 在192.168.1.1、192.168.1.2、192.168.1.3部署主集群

# 初始化主集群
obd cluster deploy obcluster --home /ob/app/obcluster -c /ob/app/conf/obcluster.yml

# 启动主集群
obd cluster start obcluster
                    

Deploying obcluster…
Deploy obcluster successfully
Starting obcluster…
Start obcluster successfully

# 2. 部署备用集群

# 在192.168.2.1、192.168.2.2、192.168.2.3部署备用集群,学习交流加群风哥微信: itpux-com。

# 初始化备用集群
obd cluster deploy obcluster_standby --home /ob/app/obcluster_standby -c /ob/app/conf/obcluster_standby.yml

# 启动备用集群
obd cluster start obcluster_standby
                    

Deploying obcluster_standby…
Deploy obcluster_standby successfully
Starting obcluster_standby…
Start obcluster_standby successfully

# 3. 配置数据同步

# 在主集群上配置数据同步
export OB_HOME=/ob/app/obcluster
${OB_HOME}/bin/ob_admin replica --operation=add_peer --zone=zone1 --server=192.168.2.1:2882 --tenant=fgedudb
${OB_HOME}/bin/ob_admin replica --operation=add_peer --zone=zone2 --server=192.168.2.2:2882 --tenant=fgedudb
${OB_HOME}/bin/ob_admin replica --operation=add_peer --zone=zone3 --server=192.168.2.3:2882 --tenant=fgedudb
                    

Add peer successfully
Add peer successfully
Add peer successfully

3.2 配置文件设置

配置文件设置的方法:

# 1. 主集群配置文件

# /ob/app/conf/obcluster.yml
name: obcluster
topology:,学习交流加群风哥QQ113257174。
  obcluster:
    servers:
      - 192.168.1.1
      - 192.168.1.2
      - 192.168.1.3
    global:
      cluster_id: 1
      mysql_port: 2881
      rpc_port: 2882
      zone_list: zone1,zone2,zone3
      observer_count: 3
      data_dir: /ob/fgdata
      log_dir: /ob/app/log
      memstore_size: 16G
      system_memory: 8G
      cpu_count: 8
      disk_size: 500G
      root_password: fgedu123
                    

# 2. 备用集群配置文件

# /ob/app/conf/obcluster_standby.yml
name: obcluster_standby
topology:
  obcluster_standby:
    servers:
      - 192.168.2.1
      - 192.168.2.2
      - 192.168.2.3
    global:
      cluster_id: 2
      mysql_port: 2881
      rpc_port: 2882
      zone_list: zone1,zone2,zone3
      observer_count: 3
      data_dir: /ob/fgdata
      log_dir: /ob/app/log,更多视频教程www.fgedu.net.cn。
      memstore_size: 16G
      system_memory: 8G
      cpu_count: 8
      disk_size: 500G
      root_password: fgedu123
                    

# 3. 应用配置文件

# /ob/app/config/application.yml
spring:
  datasource:
    url: jdbc:oceanbase://192.168.1.1:2881/fgedudb
    username: fgedu
    password: fgedu123
    driver-class-name: com.oceanbase.jdbc.Driver
                    

3.3 自动化脚本编写

自动化脚本编写的方法:

# 1. 故障检测脚本

#!/bin/bash
# check_cluster.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 配置参数
MASTER_HOST="192.168.1.1"
MASTER_PORT="2881"
STANDBY_HOST="192.168.2.1"
STANDBY_PORT="2881"
USERNAME="fgedu"
PASSWORD="fgedu123"
DATABASE="oceanbase",更多学习教程公众号风哥教程itpux_com。

# 检查主集群状态
check_master_cluster() {
    obclient -h${MASTER_HOST} -P${MASTER_PORT} -u${USERNAME} -p${PASSWORD} -D${DATABASE} -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;" > /dev/null 2>&1
    return $?
}

# 检查备用集群状态
check_standby_cluster() {
    obclient -h${STANDBY_HOST} -P${STANDBY_PORT} -u${USERNAME} -p${PASSWORD} -D${DATABASE} -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;" > /dev/null 2>&1
    return $?
}

# 执行检查
check_master_cluster
MASTER_STATUS=$?

check_standby_cluster
STANDBY_STATUS=$?

# 输出状态
echo "$(date) Master cluster status: $MASTER_STATUS"
echo "$(date) Standby cluster status: $STANDBY_STATUS"

# 切换决策
if [ $MASTER_STATUS -ne 0 ] && [ $STANDBY_STATUS -eq 0 ]; then
    echo "$(date) Master cluster is down, standby cluster is up. Need to switch."
    # 执行切换
    /ob/app/scripts/switch_to_standby.sh
elif [ $MASTER_STATUS -eq 0 ] && [ $STANDBY_STATUS -ne 0 ]; then,from DB视频:www.itpux.com。
    echo "$(date) Master cluster is up, standby cluster is down. No need to switch."
elif [ $MASTER_STATUS -ne 0 ] && [ $STANDBY_STATUS -ne 0 ]; then
    echo "$(date) Both clusters are down. Need manual intervention."
else
    echo "$(date) Both clusters are up. No need to switch."
fi
                    

# 2. 切换到备用集群脚本

#!/bin/bash
# switch_to_standby.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 配置参数
STANDBY_HOST="192.168.2.1"
STANDBY_PORT="2881"
USERNAME="fgedu"
PASSWORD="fgedu123"
DATABASE="oceanbase"
APP_CONFIG="/ob/app/config/application.yml"
APP_SERVICE="app.service"

# 开始切换
echo "$(date) 开始切换到备用集群"

# 1. 验证备用集群状态
echo "$(date) 验证备用集群状态"
obclient -h${STANDBY_HOST} -P${STANDBY_PORT} -u${USERNAME} -p${PASSWORD} -D${DATABASE} -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;"

# 2. 更新应用配置,指向备用集群
echo "$(date) 更新应用配置,指向备用集群"
sed -i "s/192.168.1.1/${STANDBY_HOST}/g" ${APP_CONFIG}
sed -i "s/2881/${STANDBY_PORT}/g" ${APP_CONFIG}

# 3. 重启应用服务
echo "$(date) 重启应用服务"
systemctl restart ${APP_SERVICE}

# 4. 验证应用状态
echo "$(date) 验证应用状态"
systemctl status ${APP_SERVICE}

# 5. 验证业务功能
echo "$(date) 验证业务功能"
curl -s http://192.168.2.100:8080/health

echo "$(date) 切换到备用集群完成"
                    

# 3. 回切到主集群脚本

#!/bin/bash
# switch_back_to_master.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 配置参数
MASTER_HOST="192.168.1.1"
MASTER_PORT="2881"
STANDBY_HOST="192.168.2.1"
STANDBY_PORT="2881"
USERNAME="fgedu"
PASSWORD="fgedu123"
DATABASE="oceanbase"
APP_CONFIG="/ob/app/config/application.yml"
APP_SERVICE="app.service"

# 开始回切
echo "$(date) 开始回切到主集群"

# 1. 验证主集群状态
echo "$(date) 验证主集群状态"
obclient -h${MASTER_HOST} -P${MASTER_PORT} -u${USERNAME} -p${PASSWORD} -D${DATABASE} -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;"

# 2. 验证数据一致性
echo "$(date) 验证数据一致性"
echo "主集群数据量:"
obclient -h${MASTER_HOST} -P${MASTER_PORT} -u${USERNAME} -p${PASSWORD} -Dfgedudb -e "SELECT COUNT(*) FROM fgedu_order;"
echo "备用集群数据量:"
obclient -h${STANDBY_HOST} -P${STANDBY_PORT} -u${USERNAME} -p${PASSWORD} -Dfgedudb -e "SELECT COUNT(*) FROM fgedu_order;"

# 3. 更新应用配置,指向主集群
echo "$(date) 更新应用配置,指向主集群"
sed -i "s/${STANDBY_HOST}/${MASTER_HOST}/g" ${APP_CONFIG}
sed -i "s/${STANDBY_PORT}/${MASTER_PORT}/g" ${APP_CONFIG}

# 4. 重启应用服务
echo "$(date) 重启应用服务"
systemctl restart ${APP_SERVICE}

# 5. 验证应用状态
echo "$(date) 验证应用状态"
systemctl status ${APP_SERVICE}

# 6. 验证业务功能
echo "$(date) 验证业务功能"
curl -s http://192.168.1.100:8080/health

echo "$(date) 回切到主集群完成"
                    

Part04-生产案例与实战讲解

4.1 容灾切换自动化配置实战

容灾切换自动化配置的实战案例:

场景描述

某电商系统的OceanBase数据库需要配置容灾切换自动化,确保系统的高可用性。

实施步骤

  1. 部署主备集群
  2. 配置数据同步
  3. 编写自动化脚本
  4. 设置定时任务
  5. 测试容灾切换

# 1. 部署主备集群

# 部署主集群
obd cluster deploy obcluster --home /ob/app/obcluster -c /ob/app/conf/obcluster.yml
obd cluster start obcluster

# 部署备用集群
obd cluster deploy obcluster_standby --home /ob/app/obcluster_standby -c /ob/app/conf/obcluster_standby.yml
obd cluster start obcluster_standby
                    

Deploying obcluster…
Deploy obcluster successfully
Starting obcluster…
Start obcluster successfully

Deploying obcluster_standby…
Deploy obcluster_standby successfully
Starting obcluster_standby…
Start obcluster_standby successfully

# 2. 配置数据同步

# 在主集群上配置数据同步
export OB_HOME=/ob/app/obcluster
${OB_HOME}/bin/ob_admin replica --operation=add_peer --zone=zone1 --server=192.168.2.1:2882 --tenant=fgedudb
${OB_HOME}/bin/ob_admin replica --operation=add_peer --zone=zone2 --server=192.168.2.2:2882 --tenant=fgedudb
${OB_HOME}/bin/ob_admin replica --operation=add_peer --zone=zone3 --server=192.168.2.3:2882 --tenant=fgedudb
                    

Add peer successfully
Add peer successfully
Add peer successfully

# 3. 编写自动化脚本

# 创建脚本目录
mkdir -p /ob/app/scripts

# 创建故障检测脚本
cat > /ob/app/scripts/check_cluster.sh << 'EOF'
#!/bin/bash
# check_cluster.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 配置参数
MASTER_HOST="192.168.1.1"
MASTER_PORT="2881"
STANDBY_HOST="192.168.2.1"
STANDBY_PORT="2881"
USERNAME="fgedu"
PASSWORD="fgedu123"
DATABASE="oceanbase"

# 检查主集群状态
check_master_cluster() {
    obclient -h${MASTER_HOST} -P${MASTER_PORT} -u${USERNAME} -p${PASSWORD} -D${DATABASE} -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;" > /dev/null 2>&1
    return $?
}

# 检查备用集群状态
check_standby_cluster() {
    obclient -h${STANDBY_HOST} -P${STANDBY_PORT} -u${USERNAME} -p${PASSWORD} -D${DATABASE} -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;" > /dev/null 2>&1
    return $?
}

# 执行检查
check_master_cluster
MASTER_STATUS=$?

check_standby_cluster
STANDBY_STATUS=$?

# 输出状态
echo "$(date) Master cluster status: $MASTER_STATUS"
echo "$(date) Standby cluster status: $STANDBY_STATUS"

# 切换决策
if [ $MASTER_STATUS -ne 0 ] && [ $STANDBY_STATUS -eq 0 ]; then
    echo "$(date) Master cluster is down, standby cluster is up. Need to switch."
    # 执行切换
    /ob/app/scripts/switch_to_standby.sh
elif [ $MASTER_STATUS -eq 0 ] && [ $STANDBY_STATUS -ne 0 ]; then
    echo "$(date) Master cluster is up, standby cluster is down. No need to switch."
elif [ $MASTER_STATUS -ne 0 ] && [ $STANDBY_STATUS -ne 0 ]; then
    echo "$(date) Both clusters are down. Need manual intervention."
else
    echo "$(date) Both clusters are up. No need to switch."
fi
EOF

# 创建切换到备用集群脚本
cat > /ob/app/scripts/switch_to_standby.sh << 'EOF'
#!/bin/bash
# switch_to_standby.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 配置参数
STANDBY_HOST="192.168.2.1"
STANDBY_PORT="2881"
USERNAME="fgedu"
PASSWORD="fgedu123"
DATABASE="oceanbase"
APP_CONFIG="/ob/app/config/application.yml"
APP_SERVICE="app.service"

# 开始切换
echo "$(date) 开始切换到备用集群"

# 1. 验证备用集群状态
echo "$(date) 验证备用集群状态"
obclient -h${STANDBY_HOST} -P${STANDBY_PORT} -u${USERNAME} -p${PASSWORD} -D${DATABASE} -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;"

# 2. 更新应用配置,指向备用集群
echo "$(date) 更新应用配置,指向备用集群"
sed -i "s/192.168.1.1/${STANDBY_HOST}/g" ${APP_CONFIG}
sed -i "s/2881/${STANDBY_PORT}/g" ${APP_CONFIG}

# 3. 重启应用服务
echo "$(date) 重启应用服务"
systemctl restart ${APP_SERVICE}

# 4. 验证应用状态
echo "$(date) 验证应用状态"
systemctl status ${APP_SERVICE}

# 5. 验证业务功能
echo "$(date) 验证业务功能"
curl -s http://192.168.2.100:8080/health

echo "$(date) 切换到备用集群完成"
EOF

# 创建回切到主集群脚本
cat > /ob/app/scripts/switch_back_to_master.sh << 'EOF'
#!/bin/bash
# switch_back_to_master.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 配置参数
MASTER_HOST="192.168.1.1"
MASTER_PORT="2881"
STANDBY_HOST="192.168.2.1"
STANDBY_PORT="2881"
USERNAME="fgedu"
PASSWORD="fgedu123"
DATABASE="oceanbase"
APP_CONFIG="/ob/app/config/application.yml"
APP_SERVICE="app.service"

# 开始回切
echo "$(date) 开始回切到主集群"

# 1. 验证主集群状态
echo "$(date) 验证主集群状态"
obclient -h${MASTER_HOST} -P${MASTER_PORT} -u${USERNAME} -p${PASSWORD} -D${DATABASE} -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;"

# 2. 验证数据一致性
echo "$(date) 验证数据一致性"
echo "主集群数据量:"
obclient -h${MASTER_HOST} -P${MASTER_PORT} -u${USERNAME} -p${PASSWORD} -Dfgedudb -e "SELECT COUNT(*) FROM fgedu_order;"
echo "备用集群数据量:"
obclient -h${STANDBY_HOST} -P${STANDBY_PORT} -u${USERNAME} -p${PASSWORD} -Dfgedudb -e "SELECT COUNT(*) FROM fgedu_order;"

# 3. 更新应用配置,指向主集群
echo "$(date) 更新应用配置,指向主集群"
sed -i "s/${STANDBY_HOST}/${MASTER_HOST}/g" ${APP_CONFIG}
sed -i "s/${STANDBY_PORT}/${MASTER_PORT}/g" ${APP_CONFIG}

# 4. 重启应用服务
echo "$(date) 重启应用服务"
systemctl restart ${APP_SERVICE}

# 5. 验证应用状态
echo "$(date) 验证应用状态"
systemctl status ${APP_SERVICE}

# 6. 验证业务功能
echo "$(date) 验证业务功能"
curl -s http://192.168.1.100:8080/health

echo "$(date) 回切到主集群完成"
EOF

# 设置脚本执行权限
chmod +x /ob/app/scripts/*.sh
                    

# 4. 设置定时任务

# 设置定时任务,每5分钟执行一次故障检测
crontab -e

# 添加定时任务
*/5 * * * * /ob/app/scripts/check_cluster.sh >> /ob/app/log/check_cluster.log 2>&1
                    

# 5. 测试容灾切换

# 模拟主集群故障
ip link set eth0 down

# 查看切换日志
tail -f /ob/app/log/check_cluster.log
                    

2026-04-09 10:00:00 Master cluster status: 0
2026-04-09 10:00:00 Standby cluster status: 0
2026-04-09 10:00:00 Both clusters are up. No need to switch.

2026-04-09 10:05:00 Master cluster status: 1
2026-04-09 10:05:00 Standby cluster status: 0
2026-04-09 10:05:00 Master cluster is down, standby cluster is up. Need to switch.
2026-04-09 10:05:00 开始切换到备用集群
2026-04-09 10:05:00 验证备用集群状态
+-------------------+----------------------------+----------------------------+-------------------+-----------------+----------+-------------------+---------------+------------------+---------------+
| CLUSTER_NAME | CREATE_TIME | MODIFY_TIME | STATUS | TENANT_MODE | PRIMARY_ZONE | ZONE_LIST | SERVER_LIST | READONLY_ZONE_LIST | LOG_LEVEL |
+-------------------+----------------------------+----------------------------+-------------------+-----------------+----------+-------------------+---------------+------------------+---------------+
| obcluster_standby | 2026-04-01 10:00:00.000000 | 2026-04-01 10:00:00.000000 | NORMAL | COMPATIBLE | zone1 | zone1,zone2,zone3 | 192.168.2.1:2881,192.168.2.2:2881,192.168.2.3:2881 | NULL | INFO |
+-------------------+----------------------------+----------------------------+-------------------+-----------------+----------+-------------------+---------------+------------------+---------------+
2026-04-09 10:05:00 更新应用配置,指向备用集群
2026-04-09 10:05:00 重启应用服务
2026-04-09 10:05:00 验证应用状态
● app.service - Application Service
Loaded: loaded (/etc/systemd/system/app.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-09 10:05:30 CST; 10s ago
Main PID: 12345 (java)
Tasks: 50
Memory: 512.0M
CPU: 10.0%
CGroup: /system.slice/app.service
└─12345 /usr/bin/java -jar /ob/app/app.jar
2026-04-09 10:05:00 验证业务功能
{
"status": "UP",
"timestamp": "2026-04-09T10:05:40Z"
}
2026-04-09 10:05:00 切换到备用集群完成

4.2 容灾切换测试实战

容灾切换测试的实战案例:

场景描述

某电商系统的OceanBase数据库需要进行容灾切换测试,验证切换流程的可靠性。

实施步骤

  1. 准备测试环境
  2. 执行切换测试
  3. 验证切换结果
  4. 回切到主集群

# 1. 准备测试环境

# 检查主备集群状态
obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;"
obclient -h192.168.2.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;"

# 检查应用状态
curl -s http://192.168.1.100:8080/health
                    

+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| CLUSTER_NAME | CREATE_TIME | MODIFY_TIME | STATUS | TENANT_MODE | PRIMARY_ZONE | ZONE_LIST | SERVER_LIST | READONLY_ZONE_LIST | LOG_LEVEL |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| obcluster | 2026-04-01 10:00:00.000000 | 2026-04-01 10:00:00.000000 | NORMAL | COMPATIBLE | zone1 | zone1,zone2,zone3 | 192.168.1.1:2881,192.168.1.2:2881,192.168.1.3:2881 | NULL | INFO |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+

+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| CLUSTER_NAME | CREATE_TIME | MODIFY_TIME | STATUS | TENANT_MODE | PRIMARY_ZONE | ZONE_LIST | SERVER_LIST | READONLY_ZONE_LIST | LOG_LEVEL |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| obcluster_standby | 2026-04-01 10:00:00.000000 | 2026-04-01 10:00:00.000000 | NORMAL | COMPATIBLE | zone1 | zone1,zone2,zone3 | 192.168.2.1:2881,192.168.2.2:2881,192.168.2.3:2881 | NULL | INFO |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+

{
“status”: “UP”,
“timestamp”: “2026-04-09T14:00:00Z”
}

# 2. 执行切换测试

# 模拟主集群故障
ip link set eth0 down

# 等待自动切换
sleep 60

# 检查切换结果
curl -s http://192.168.2.100:8080/health
                    

{
“status”: “UP”,
“timestamp”: “2026-04-09T14:01:30Z”
}

# 3. 验证切换结果

# 检查备用集群状态
obclient -h192.168.2.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;"

# 检查应用配置
cat /ob/app/config/application.yml | grep url
                    

+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| CLUSTER_NAME | CREATE_TIME | MODIFY_TIME | STATUS | TENANT_MODE | PRIMARY_ZONE | ZONE_LIST | SERVER_LIST | READONLY_ZONE_LIST | LOG_LEVEL |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| obcluster_standby | 2026-04-01 10:00:00.000000 | 2026-04-01 10:00:00.000000 | NORMAL | COMPATIBLE | zone1 | zone1,zone2,zone3 | 192.168.2.1:2881,192.168.2.2:2881,192.168.2.3:2881 | NULL | INFO |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+

url: jdbc:oceanbase://192.168.2.1:2881/fgedudb

# 4. 回切到主集群

# 恢复主集群
ip link set eth0 up

# 等待主集群恢复
sleep 30

# 执行回切
/ob/app/scripts/switch_back_to_master.sh
                    

2026-04-09 14:05:00 开始回切到主集群
2026-04-09 14:05:00 验证主集群状态
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| CLUSTER_NAME | CREATE_TIME | MODIFY_TIME | STATUS | TENANT_MODE | PRIMARY_ZONE | ZONE_LIST | SERVER_LIST | READONLY_ZONE_LIST | LOG_LEVEL |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| obcluster | 2026-04-01 10:00:00.000000 | 2026-04-09 14:04:30.000000 | NORMAL | COMPATIBLE | zone1 | zone1,zone2,zone3 | 192.168.1.1:2881,192.168.1.2:2881,192.168.1.3:2881 | NULL | INFO |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
2026-04-09 14:05:00 验证数据一致性
主集群数据量:
+———-+
| COUNT(*) |
+———-+
| 1000 |
+———-+
备用集群数据量:
+———-+
| 1000 |
+———-+
2026-04-09 14:05:00 更新应用配置,指向主集群
2026-04-09 14:05:00 重启应用服务
2026-04-09 14:05:00 验证应用状态
● app.service – Application Service
Loaded: loaded (/etc/systemd/system/app.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-09 14:05:30 CST; 10s ago
Main PID: 24680 (java)
Tasks: 50
Memory: 512.0M
CPU: 10.0%
CGroup: /system.slice/app.service
└─24680 /usr/bin/java -jar /ob/app/app.jar
2026-04-09 14:05:00 验证业务功能
{
“status”: “UP”,
“timestamp”: “2026-04-09T14:05:40Z”
}
2026-04-09 14:05:00 回切到主集群完成

Part05-风哥经验总结与分享

5.1 容灾切换自动化配置最佳实践

OceanBase容灾切换自动化配置的最佳实践:

  • 合理设计容灾架构:根据业务需求设计合理的容灾架构,如同城双中心或异地多中心
  • 完善网络配置:确保主备集群之间的网络连通性,避免网络瓶颈
  • 配置数据同步:确保主备集群之间的数据同步,保持数据一致性
  • 编写自动化脚本:编写完善的自动化切换脚本,实现故障自动检测和切换
  • 设置定时任务:设置合理的定时任务,定期检查集群状态
  • 定期测试演练:定期进行容灾切换测试,确保切换流程的可靠性
  • 监控告警:设置完善的监控和告警机制,及时发现故障
  • 文档记录:记录配置过程和切换流程,便于后续参考

5.2 常见问题与解决方案

容灾切换自动化配置中常见的问题与解决方案:

# 1. 网络连接问题
- 症状:主备集群之间网络连接不稳定
- 解决方案:检查网络配置,确保网络连通性,考虑使用专线

# 2. 数据同步延迟
- 症状:主备集群之间数据同步延迟较大
- 解决方案:优化网络连接,调整同步参数,确保数据及时同步

# 3. 切换失败
- 症状:容灾切换失败,业务中断
- 解决方案:检查切换脚本,确保脚本的正确性,定期测试切换流程

# 4. 回切失败
- 症状:主集群恢复后回切失败
- 解决方案:确保主集群完全恢复,验证数据一致性后再回切

# 5. 监控告警误报
- 症状:监控告警误报,导致不必要的切换
- 解决方案:调整监控阈值,减少误报

# 6. 应用配置错误
- 症状:应用配置错误,导致切换后应用无法正常运行
- 解决方案:确保应用配置的正确性,定期验证配置

# 7. 权限问题
- 症状:切换脚本执行权限不足
- 解决方案:设置正确的执行权限,确保脚本可以正常执行
                

风哥提示:容灾切换自动化配置是确保OceanBase数据库高可用性的关键,需要合理配置各个组件,并定期进行测试演练

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息