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. 部署主备集群
# 部署主集群
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. 准备测试环境
# 检查主备集群状态
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
