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

yashandb教程FG085-YashanDB主库故障切换

内容简介

本文档风哥主要介绍YashanDB数据库的主库故障切换方法和实战经验,包括主库故障的检测、从库提升为主库的操作步骤、故障切换后的处理等内容。风哥教程参考yashandb官方文档高可用与容灾部分,结合生产环境实际案例进行详细讲解。

目录大纲

Part01-基础概念与理论知识

1.1 主从架构

YashanDB的主从架构是一种高可用解决方案,主要包括:

  • 主库(Primary):负责处理所有的写操作和读操作
  • 从库(Standby):通过复制机制从主库同步数据,可用于读操作和故障切换
  • 复制机制:YashanDB使用物理复制或逻辑复制将主库的数据同步到从库

1.2 主库故障的影响

主库故障会对系统产生以下影响:

  • 无法处理写操作:所有写请求会失败
  • 读操作可能受影响:如果应用只连接主库
  • 业务中断:如果没有及时进行故障切换
  • 数据一致性风险:如果故障处理不当

1.3 故障切换的原则

主库故障切换应遵循以下原则:

  • 快速切换:最小化业务中断时间
  • 数据一致性:确保切换后数据不丢失
  • 自动化:减少人工干预,提高可靠性
  • 可回滚:在切换失败时能够回滚到原始状态
  • 可监控:实时监控切换过程和结果

Part02-生产环境规划与建议

2.1 高可用架构规划

YashanDB高可用架构规划应考虑:

  • 部署模式:同城双活、异地灾备等
  • 网络架构:确保网络连接稳定
  • 存储规划:使用高性能、高可靠的存储
  • 服务器配置:主从服务器配置应保持一致

2.2 故障检测机制

故障检测机制包括:

  • 心跳检测:定期发送心跳包检测主库状态
  • 连接检测:监控主库连接状态
  • 服务检测:检查主库服务是否正常运行
  • 数据检测:检查主从数据同步状态

2.3 故障切换策略

故障切换策略包括:

  • 手动切换:由运维人员手动执行切换操作
  • 半自动切换:系统检测到故障后,由运维人员确认后执行切换
  • 自动切换:系统检测到故障后自动执行切换操作

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

3.1 主从配置

配置YashanDB主从复制:

# 在主库上创建复制用户

CREATE USER repl WITH REPLICATION PASSWORD ‘repl123’;

CREATE USER

# 备份主库数据

yasdump -h localhost -U fgedu -d fgedudb -f /backup/fgedudb_backup.sql

[INFO] Starting backup…
[INFO] Backup completed successfully!

# 在从库上恢复数据

yassql -h localhost -U fgedu -d fgedudb -f /backup/fgedudb_backup.sql

[INFO] Starting restore…
[INFO] Restore completed successfully!

# 配置从库连接主库

ALTER SYSTEM SET primary_conninfo = ‘host=192.168.1.1 port=5432 user=repl password=repl123 dbname=fgedudb’;

ALTER SYSTEM SET

# 启动从库复制

SELECT pg_start_replication();

pg_start_replication
——————-
t

3.2 故障检测配置

配置故障检测:

# 配置Zabbix监控

# 添加主库状态监控项
UserParameter=yashandb.primary.status,/usr/local/bin/check_primary_status.sh

Configuration updated

# 编写主库状态检查脚本

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

# 检查主库连接
yassql -h 192.168.1.1 -U fgedu -d fgedudb -c “SELECT 1” > /dev/null 2>&1

if [ $? -eq 0 ]; then
echo “1”
else
echo “0”
fi

1

3.3 故障切换脚本

编写故障切换脚本:

# 故障切换脚本

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

# 停止从库复制
echo “Stopping replication on standby…”
yassql -h localhost -U fgedu -d fgedudb -c “SELECT pg_stop_replication();”

# 提升从库为主库
echo “Promoting standby to primary…”
yasboot promote -D /yashandb/fgdata_standby

# 检查新主库状态
echo “Checking new primary status…”
yasboot status -D /yashandb/fgdata_standby

echo “Master switchover completed!”

Stopping replication on standby…
Promoting standby to primary…
Checking new primary status…
[INFO] YashanDB server is running.
[INFO] Role: PRIMARY
Master switchover completed!

Part04-生产案例与实战讲解

4.1 YashanDB主库故障切换实战

执行主库故障切换:

# 模拟主库故障

# 在主库执行
shutdown -h now

Broadcast message from root@fgedu.net.cn
The system is going down for halt NOW!

# 检查从库状态

yasboot status -D /yashandb/fgdata_standby

[INFO] YashanDB server is running.
[INFO] Replication status: ERROR
[INFO] Role: STANDBY

# 执行故障切换

./master_switchover.sh

Stopping replication on standby…
Promoting standby to primary…
Checking new primary status…
[INFO] YashanDB server is running.
[INFO] Role: PRIMARY
Master switchover completed!

4.2 故障切换后的处理

故障切换后的处理步骤:

# 更新应用连接配置

# 修改应用配置文件,将数据库连接地址指向新主库
vi /app/config/database.yml

# 重启应用
systemctl restart app

[INFO] App restarted successfully!

# 配置原主库为新从库

# 启动原主库
yasboot start -D /yashandb/fgdata

# 配置原主库连接新主库
ALTER SYSTEM SET primary_conninfo = ‘host=192.168.1.2 port=5432 user=repl password=repl123 dbname=fgedudb’;

# 启动复制
SELECT pg_start_replication();

[INFO] YashanDB server started successfully!
ALTER SYSTEM SET
pg_start_replication
——————-
t

4.3 故障切换验证

验证故障切换结果:

# 检查新主库状态

SELECT * FROM v$instance;

instance_name | status | role
——————————–
fgedudb | running | PRIMARY

# 测试写操作

INSERT INTO fgedu.test (id, name) VALUES (1, ‘test’);

INSERT 0 1

# 测试读操作

SELECT * FROM fgedu.test;

id | name
———–
1 | test

# 检查从库同步状态

SELECT * FROM v$replication_status;

role | status | apply_lag
————————
PRIMARY | ACTIVE | 0
STANDBY | ACTIVE | 0

风哥提示:

主库故障切换是一项关键的运维操作,应在测试环境中反复演练,确保在生产环境中能够快速、准确地执行。同时,故障切换后应及时检查系统状态,确保所有服务正常运行。

Part05-风哥经验总结与分享

5.1 主库故障切换最佳实践

  • 建立完善的监控系统:实时监控主库状态
  • 制定详细的故障切换预案:明确切换步骤和责任分工
  • 定期进行故障切换演练:提高运维人员的操作熟练度
  • 使用自动化工具:减少人工干预,提高切换速度
  • 建立回滚机制:在切换失败时能够快速回滚
  • 记录切换过程:详细记录切换步骤和结果,便于后续分析

5.2 常见问题与解决方案

  • 切换后数据不一致:检查主从同步状态,确保数据完全同步后再进行切换
  • 切换后应用连接失败:检查应用连接配置,确保指向新主库
  • 切换后从库无法同步:检查网络连接,重新配置复制
  • 切换时间过长:优化切换脚本,减少切换步骤

5.3 故障切换经验分享

在实际生产环境中,主库故障切换应注意以下几点:

  • 选择合适的切换时机:避免业务高峰期
  • 提前通知相关人员:确保所有相关人员了解切换计划
  • 准备必要的工具和脚本:确保切换过程顺利
  • 监控切换过程:实时监控切换状态,及时处理异常
  • 切换后验证:确保系统正常运行,数据一致
  • 总结经验教训:分析切换过程中的问题,持续改进

更多视频教程www.fgedu.net.cn

学习交流加群风哥微信: itpux-com

学习交流加群风哥QQ113257174

风哥提示:主库故障切换应在测试环境中反复演练,确保在生产环境中能够快速、准确地执行

更多学习教程公众号风哥教程itpux_com

from yashandb视频:www.itpux.com

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

联系我们

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

微信号:itpux-com

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