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

yashandb教程FG043-YashanDB主备切换管理

本文档风哥主要介绍YashanDB主备切换管理相关知识,包括YashanDB主备切换概念、类型、流程、策略、准备工作、手动切换操作、自动切换配置、切换后验证、实战案例、最佳实践等内容,风哥教程参考YashanDB官方文档高可用与容灾内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 YashanDB主备切换概念

YashanDB主备切换是指将数据库服务从主库转移到备库的过程,确保在主库故障或计划维护时,业务能够持续运行。学习交流加群风哥微信: itpux-com

YashanDB主备切换的核心目标:

  • 最小化业务中断时间
  • 确保数据一致性
  • 平滑过渡服务
  • 快速恢复服务可用性

1.2 YashanDB主备切换类型

YashanDB主备切换分为两种类型:

  • 计划内切换(Switchover):在主库正常运行的情况下,有计划地将服务切换到备库,通常用于系统维护、升级等场景
  • 故障切换(Failover):在主库发生故障时,将服务切换到备库,确保业务连续性

1.3 YashanDB主备切换流程

YashanDB主备切换的基本流程:

  1. 切换前准备:检查主备状态、复制状态、应用连接等
  2. 执行切换:停止主库服务(故障切换时可能已停止)、提升备库为主库
  3. 切换后验证:验证新主库状态、数据一致性、应用连接等
  4. 恢复主备关系:将原主库重新配置为备库,建立新的主备关系
风哥提示:主备切换是高可用架构的核心功能,正确执行切换流程对确保业务连续性至关重要。学习交流加群风哥QQ113257174

Part02-生产环境规划与建议

2.1 YashanDB主备切换策略

YashanDB主备切换策略的制定:

# 切换策略制定
1. 明确切换触发条件
2. 确定切换流程和步骤
3. 制定切换时间窗口
4. 分配切换角色和责任
5. 制定回滚计划

# 切换触发条件
– 计划内维护:系统升级、硬件维护等
– 主库故障:硬件故障、软件故障、网络故障等
– 性能问题:主库负载过高,需要临时切换

# 切换时间窗口
– 计划内切换:选择业务低峰期,如凌晨2-4点
– 故障切换:立即执行,无需等待时间窗口

# 切换角色分配
– 切换执行人员:负责执行切换操作
– 监控人员:负责监控切换过程
– 应用测试人员:负责验证应用功能
– 运维人员:负责系统维护和故障处理

2.2 YashanDB主备切换准备

YashanDB主备切换前的准备工作:

# 切换前准备工作
1. 检查主备状态
2. 验证复制状态
3. 检查应用连接
4. 备份数据
5. 准备切换工具和脚本
6. 通知相关人员

# 主备状态检查
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -c “select * from pg_stat_replication;”

# 复制延迟检查
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c “SELECT now() – pg_last_xact_replay_timestamp() as replication_lag;”

# 备库状态检查
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c “select pg_is_in_recovery();”

# 应用连接检查
$ netstat -an | grep 5432 | grep ESTABLISHED

# 数据备份
$ /yashanb/app/yasdb/bin/pg_basebackup -D /backup/fgedudb -F t -z

2.3 YashanDB主备切换考量因素

YashanDB主备切换的考量因素:

  • 业务影响:切换过程对业务的影响程度
  • 数据一致性:确保切换后数据一致
  • 切换时间:切换所需的时间
  • 回滚方案:切换失败后的回滚策略
  • 监控和告警:切换过程中的监控和告警
  • 应用适配:应用对切换的适配能力
生产环境建议:在执行主备切换前,应制定详细的切换计划,包括切换步骤、责任分工、时间窗口、回滚方案等,确保切换过程顺利进行。更多学习教程公众号风哥教程itpux_com

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

3.1 YashanDB手动切换操作

YashanDB手动切换的操作步骤:

# 计划内手动切换步骤

## 1. 切换前检查
# 检查主备复制状态
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -c “select * from pg_stat_replication;”

# 检查复制延迟
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c “SELECT now() – pg_last_xact_replay_timestamp() as replication_lag;”

# 检查备库状态
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c “select pg_is_in_recovery();”

## 2. 执行切换
# 停止主库服务
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb stop

# 提升备库为主库
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb promote

## 3. 切换后验证
# 检查新主库状态
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c “select pg_is_in_recovery();”

# 验证数据一致性
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c “SELECT * FROM fgedu_test;”

# 验证应用连接
$ psql -h fgedu-standby -U fgedu -d fgedudb -c “SELECT 1;”

## 4. 恢复主备关系
# 重新配置原主库为备库
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb stop

# 清理数据目录
$ rm -rf /yashanb/fgdata/fgedudb/*

# 从新主库备份数据
$ /yashanb/app/yasdb/bin/pg_basebackup -h fgedu-standby -U fgedu -D /yashanb/fgdata/fgedudb -P -v

# 创建recovery.conf文件
$ cat > /yashanb/fgdata/fgedudb/recovery.conf << EOF standby_mode = 'on' primary_conninfo = 'host=fgedu-standby port=5432 user=fgedu password=fgedu123' recovery_target_timeline = 'latest' EOF # 启动备库 $ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb start # 验证新的主备关系 $ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c "select * from pg_stat_replication;"

3.2 YashanDB自动切换配置

YashanDB自动切换的配置方法:

# 配置自动故障切换

## 1. 安装和配置pg_auto_failover
# 安装pg_auto_failover
$ dnf install -y pg-auto-failover

# 初始化主库
$ pg_autoctl create postgres –hostname=192.168.1.100 –pgdata=/yashanb/fgdata/fgedudb –auth=trust –ssl-self-signed

# 初始化备库
$ pg_autoctl create postgres –hostname=192.168.1.101 –pgdata=/yashanb/fgdata/fgedudb –auth=trust –ssl-self-signed –formation=default –join=192.168.1.100

## 2. 配置故障检测参数
$ cat >> /yashanb/fgdata/fgedudb/postgresql.conf << EOF # 故障检测参数 failover_election = on failover_election_timeout = 30 heartbeat_interval = 10 heartbeat_timeout = 60 EOF ## 3. 配置自动切换监控 # 启动pg_autoctl服务 $ systemctl start pg-auto-failover $ systemctl enable pg-auto-failover # 查看pg_autoctl状态 $ pg_autoctl status ## 4. 测试自动故障切换 # 模拟主库故障 $ ssh root@fgedu-primary "systemctl stop yasdb" # 查看自动切换状态 $ pg_autoctl status # 验证新主库 $ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c "select pg_is_in_recovery();"

3.3 YashanDB切换后验证

YashanDB切换后的验证步骤:

# 切换后验证步骤

## 1. 数据库状态验证
# 检查数据库是否正常运行
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb status

# 检查数据库状态
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -c “SELECT 1;”

# 检查数据库角色
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -c “select pg_is_in_recovery();”

## 2. 数据一致性验证
# 检查关键表数据
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -c “SELECT count(*) FROM fgedu_test;”

# 检查最新数据
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -c “SELECT * FROM fgedu_test ORDER BY id DESC LIMIT 10;”

## 3. 应用连接验证
# 测试应用连接
$ psql -h fgedu-standby -U fgedu -d fgedudb -c “SELECT 1;”

# 检查连接数
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -c “SELECT count(*) FROM pg_stat_activity;”

## 4. 复制状态验证
# 检查复制状态
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -c “select * from pg_stat_replication;”

# 检查复制延迟
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-primary -c “SELECT now() – pg_last_xact_replay_timestamp() as replication_lag;”

## 5. 监控系统验证
# 检查监控告警
# 确认所有监控指标正常

## 6. 业务功能验证
# 执行业务操作测试
# 验证核心业务功能正常

风哥提示:切换后的验证是确保系统正常运行的关键步骤,应全面检查数据库状态、数据一致性、应用连接等方面,确保切换成功。from yashanb视频:www.itpux.com

Part04-生产案例与实战讲解

4.1 YashanDB计划内切换实战

某企业进行YashanDB主备计划内切换,用于主库硬件维护。

# 案例背景
– 业务系统:企业CRM系统
– 数据量:200GB
– 并发用户:500
– 切换窗口:凌晨2-4点
– 切换类型:计划内切换

# 切换前准备
1. 提前通知业务部门
2. 备份数据
3. 检查主备状态
4. 准备切换脚本

# 切换执行
# 1. 检查主备状态
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -c “select * from pg_stat_replication;”
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag | replay_lag | sync_priority | sync_state
——-+———-+——–+——————+—————+—————–+————-+——————————-+————–+———–+———–+———–+———–+————+———–+———–+————+—————+————
12345 | 10001 | fgedu | walreceiver | 192.168.1.101 | fgedu-standby | 54321 | 2026-04-11 10:00:00.000000+08 | | streaming | 0/1234567 | 0/1234567 | 0/1234567 | 0/1234567 | | | | 1 | sync
(1 row)

# 2. 停止应用服务
$ systemctl stop crm-app

# 3. 停止主库服务
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb stop

# 4. 提升备库为主库
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb promote

# 5. 更新应用连接配置
$ sed -i ‘s/fgedu-primary/fgedu-standby/’ /etc/crm-app/config.yml

# 6. 启动应用服务
$ systemctl start crm-app

# 7. 验证应用功能
$ curl -I http://localhost:8080/crm
HTTP/1.1 200 OK

# 8. 重新配置原主库为备库
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb stop
$ rm -rf /yashanb/fgdata/fgedudb/*
$ /yashanb/app/yasdb/bin/pg_basebackup -h fgedu-standby -U fgedu -D /yashanb/fgdata/fgedudb -P -v
$ cat > /yashanb/fgdata/fgedudb/recovery.conf << EOF standby_mode = 'on' primary_conninfo = 'host=fgedu-standby port=5432 user=fgedu password=fgedu123' recovery_target_timeline = 'latest' EOF $ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb start # 9. 验证新的主备关系 $ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c "select * from pg_stat_replication;"

4.2 YashanDB故障切换实战

某企业遭遇YashanDB主库故障,执行故障切换确保业务连续性。

# 案例背景
– 业务系统:电商交易系统
– 数据量:500GB
– 并发用户:2000
– 故障类型:主库服务器硬件故障
– 切换类型:故障切换

# 故障发现
# 监控系统告警:主库连接失败
$ ping -c 5 fgedu-primary
ping: fgedu-primary: Name or service not known

# 故障切换执行
# 1. 确认主库故障
$ ssh root@fgedu-primary “systemctl status yasdb”
ssh: connect to host fgedu-primary port 22: No route to host

# 2. 检查备库状态
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c “select pg_is_in_recovery();”
pg_is_in_recovery
——————-
t
(1 row)

# 3. 提升备库为主库
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb promote

# 4. 检查新主库状态
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c “select pg_is_in_recovery();”
pg_is_in_recovery
——————-
f
(1 row)

# 5. 更新DNS或VIP
$ sed -i ‘s/192.168.1.100/192.168.1.101/’ /etc/hosts

# 6. 验证应用连接
$ psql -h fgedu-primary -U fgedu -d fgedudb -c “SELECT 1;”
?column?
———-
1
(1 row)

# 7. 检查业务功能
$ curl -I http://localhost:8080/shop
HTTP/1.1 200 OK

# 8. 处理故障主库
# 修复硬件故障
# 重新配置为备库

4.3 YashanDB切换回切实战

某企业在主库故障修复后,执行回切操作恢复原主备关系。

# 案例背景
– 业务系统:金融交易系统
– 数据量:300GB
– 并发用户:1500
– 切换类型:回切操作

# 回切前准备
1. 确认原主库已修复
2. 检查当前主备状态
3. 选择回切时间窗口
4. 通知业务部门

# 回切执行
# 1. 检查当前主备状态
$ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-standby -c “select * from pg_stat_replication;”

# 2. 停止应用服务
$ systemctl stop finance-app

# 3. 停止当前主库服务
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb stop

# 4. 提升原主库为主库
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb promote

# 5. 更新应用连接配置
$ sed -i ‘s/fgedu-standby/fgedu-primary/’ /etc/finance-app/config.yml

# 6. 启动应用服务
$ systemctl start finance-app

# 7. 验证应用功能
$ curl -I http://localhost:8080/finance
HTTP/1.1 200 OK

# 8. 重新配置原备库为备库
$ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb stop
$ rm -rf /yashanb/fgdata/fgedudb/*
$ /yashanb/app/yasdb/bin/pg_basebackup -h fgedu-primary -U fgedu -D /yashanb/fgdata/fgedudb -P -v
$ cat > /yashanb/fgdata/fgedudb/recovery.conf << EOF standby_mode = 'on' primary_conninfo = 'host=fgedu-primary port=5432 user=fgedu password=fgedu123' recovery_target_timeline = 'latest' EOF $ /yashanb/app/yasdb/bin/pg_ctl -D /yashanb/fgdata/fgedudb start # 9. 验证主备关系 $ /yashanb/app/yasdb/bin/psql -U yasdb -d fgedudb -h fgedu-primary -c "select * from pg_stat_replication;"

Part05-风哥经验总结与分享

5.1 YashanDB主备切换最佳实践

YashanDB主备切换的最佳实践:

  • 制定详细的切换计划:包括切换步骤、责任分工、时间窗口、回滚方案等
  • 定期进行切换演练:每季度至少进行一次切换演练,确保切换流程顺畅
  • 使用自动化工具:配置pg_auto_failover等自动化工具,减少人为操作错误
  • 监控复制状态:定期检查复制状态和延迟,确保备库数据同步正常
  • 备份数据:在切换前进行数据备份,确保数据安全
  • 通知相关方:提前通知业务部门、运维团队等相关方
  • 验证切换结果:切换后全面验证系统状态和业务功能
  • 文档化切换过程:记录切换过程和结果,便于后续分析和改进
持续改进:每次切换后应进行总结,分析切换过程中遇到的问题和改进点,不断优化切换流程和策略。

5.2 YashanDB主备切换常见问题

YashanDB主备切换的常见问题及解决方案:

# 常见问题及解决方案

## 1. 切换后数据不一致
– 原因:复制延迟、备库应用WAL失败
– 解决方案:
– 切换前检查复制延迟
– 确保备库已应用所有WAL日志
– 必要时重新初始化备库

## 2. 切换后应用连接失败
– 原因:连接字符串未更新、DNS解析问题、网络故障
– 解决方案:
– 使用VIP或负载均衡器
– 配置应用连接池自动重连
– 及时更新连接字符串

## 3. 切换过程中出现错误
– 原因:权限问题、配置错误、网络中断
– 解决方案:
– 检查权限设置
– 验证配置文件
– 确保网络连接正常

## 4. 切换后性能下降
– 原因:备库硬件配置不足、参数设置不当
– 解决方案:
– 确保备库硬件配置与主库一致
– 优化备库参数设置
– 监控系统性能

## 5. 自动切换失败
– 原因:故障检测配置不当、网络分区
– 解决方案:
– 调整故障检测参数
– 配置合理的心跳间隔
– 实现网络冗余

5.3 YashanDB主备切换检查清单

YashanDB主备切换的检查清单:

# 主备切换检查清单

## 切换前检查
– [ ] 主备复制状态正常
– [ ] 复制延迟在可接受范围内
– [ ] 备库状态正常
– [ ] 数据备份已完成
– [ ] 切换计划已制定
– [ ] 相关人员已通知
– [ ] 应用服务已停止(计划内切换)

## 切换执行
– [ ] 停止主库服务(计划内切换)
– [ ] 提升备库为主库
– [ ] 更新应用连接配置
– [ ] 启动应用服务

## 切换后验证
– [ ] 新主库状态正常
– [ ] 数据一致性验证
– [ ] 应用连接正常
– [ ] 业务功能正常
– [ ] 监控系统正常
– [ ] 原主库已重新配置为备库
– [ ] 新的主备关系已建立

## 切换后维护
– [ ] 记录切换过程和结果
– [ ] 分析切换中遇到的问题
– [ ] 制定改进措施
– [ ] 更新切换文档

风哥提示:主备切换是高可用架构的重要组成部分,正确的切换流程和管理策略对确保业务连续性至关重要。建议定期进行切换演练,熟悉切换流程,提高应对故障的能力。

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

联系我们

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

微信号:itpux-com

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