yashandb教程FG121-YashanDB两地三中心
本文档风哥主要介绍YashanDB两地三中心架构的相关知识,包括YashanDB两地三中心的概念、架构原理、环境规划、部署步骤、配置详解、故障切换案例、灾备演练等内容,风哥教程参考YashanDB官方文档高可用与容灾相关内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 YashanDB两地三中心的概念
YashanDB两地三中心是一种高可用容灾架构,指的是在两个地理区域(两地)部署三个数据中心(三中心),包括一个主中心、一个同城灾备中心和一个异地灾备中心。这种架构可以提供更高的可用性和灾难恢复能力,学习交流加群风哥微信: itpux-com。
- 主中心:主要生产环境,处理所有业务请求
- 同城灾备中心:与主中心位于同一城市,用于同城故障切换
- 异地灾备中心:与主中心位于不同城市,用于异地灾难恢复
- 数据同步:主中心与两个灾备中心之间的数据同步机制
- 切换机制:当主中心发生故障时,自动或手动切换到灾备中心
1.2 YashanDB两地三中心架构原理
YashanDB两地三中心架构基于主备复制技术,通过日志同步实现数据一致性。主中心与同城灾备中心之间采用同步复制,确保数据实时一致性;主中心与异地灾备中心之间采用异步复制,平衡数据一致性和网络延迟。
– 主中心(Site A):生产环境,处理所有业务请求
– 同城灾备中心(Site B):与主中心同城市,距离较近,网络延迟低
– 异地灾备中心(Site C):与主中心不同城市,距离较远,网络延迟较高
# 数据同步策略
– 主中心 → 同城灾备中心:同步复制,确保数据实时一致
– 主中心 → 异地灾备中心:异步复制,平衡一致性和延迟
– 同城灾备中心 → 异地灾备中心:可选,作为数据同步的补充路径
# 切换策略
– 主中心故障:切换到同城灾备中心
– 同城灾备中心故障:切换到主中心或异地灾备中心
– 主中心和同城灾备中心同时故障:切换到异地灾备中心
1.3 YashanDB两地三中心的优势与特性
YashanDB两地三中心架构具有以下优势与特性:
- 高可用性:提供多级别故障切换能力,确保业务连续运行
- 灾难恢复:在发生区域性灾难时,可快速恢复业务
- 数据安全:多中心数据备份,确保数据不丢失
- 灵活性:支持多种切换策略,适应不同场景需求
- 可扩展性:支持横向扩展,适应业务增长
Part02-生产环境规划与建议
2.1 YashanDB两地三中心环境规划
YashanDB两地三中心环境规划需要考虑以下因素:
– 主中心(Site A):主要生产数据中心
– 同城灾备中心(Site B):与主中心距离不超过50公里
– 异地灾备中心(Site C):与主中心距离至少200公里
# 硬件规划
– 服务器配置:主中心和灾备中心配置相同
– 存储配置:主中心和灾备中心存储容量和性能相当
– 网络配置:主中心与同城灾备中心之间采用高速网络,异地灾备中心采用专线
# 软件规划
– YashanDB版本:所有中心使用相同版本
– 操作系统:所有中心使用相同版本
– 补丁级别:所有中心保持相同补丁级别
# 人员规划
– 运维人员:熟悉YashanDB两地三中心架构
– 应急响应团队:24小时待命
– 定期培训:确保运维人员熟悉切换流程
2.2 YashanDB两地三中心网络要求
YashanDB两地三中心网络要求:
– 主中心 ↔ 同城灾备中心:至少10Gbps
– 主中心 ↔ 异地灾备中心:至少2Gbps
# 网络延迟要求
– 主中心 ↔ 同城灾备中心:延迟 < 5ms
- 主中心 ↔ 异地灾备中心:延迟 < 50ms
# 网络稳定性要求
- 主中心 ↔ 同城灾备中心:99.99%可用性
- 主中心 ↔ 异地灾备中心:99.9%可用性
# 网络安全要求
- 所有中心之间使用专用网络
- 配置防火墙规则,只允许必要的端口通信
- 采用加密传输,确保数据安全
2.3 YashanDB两地三中心存储要求
YashanDB两地三中心存储要求:
- 存储容量:所有中心存储容量至少为主中心数据量的1.5倍
- 存储性能:灾备中心存储性能不低于主中心的80%
- 存储类型:推荐使用SSD存储,提高IO性能
- 存储冗余:所有中心采用RAID 10或更高冗余级别
Part03-生产环境项目实施方案
3.1 YashanDB两地三中心部署步骤
3.1.1 准备工作
$ nproc
48
# 2. 检查系统架构
$ uname -m
x86_64
# 3. 检查操作系统版本
$ cat /etc/redhat-release
Oracle Linux Server release 9.3
# 4. 检查网络连通性
$ ping -c 3 site-b.fgedu.net.cn
PING site-b.fgedu.net.cn (192.168.2.10) 56(84) bytes of data.
64 bytes from site-b.fgedu.net.cn (192.168.2.10): icmp_seq=1 ttl=64 time=2.34 ms
64 bytes from site-b.fgedu.net.cn (192.168.2.10): icmp_seq=2 ttl=64 time=2.28 ms
64 bytes from site-b.fgedu.net.cn (192.168.2.10): icmp_seq=3 ttl=64 time=2.31 ms
$ ping -c 3 site-c.fgedu.net.cn
PING site-c.fgedu.net.cn (10.0.0.10) 56(84) bytes of data.
64 bytes from site-c.fgedu.net.cn (10.0.0.10): icmp_seq=1 ttl=64 time=35.4 ms
64 bytes from site-c.fgedu.net.cn (10.0.0.10): icmp_seq=2 ttl=64 time=35.6 ms
64 bytes from site-c.fgedu.net.cn (10.0.0.10): icmp_seq=3 ttl=64 time=35.3 ms
3.1.2 安装YashanDB
# 1. 解压安装包
$ tar -xvf yashandb-23.4.0.0-linux-x86_64.tar.gz
# 2. 运行安装向导
$ cd yashandb-23.4.0.0-linux-x86_64
$ ./install.sh
# 3. 按照图形化向导完成安装
# 安装路径:/yashandb/app
# 数据路径:/yashandb/fgdata
# 4. 验证安装
$ /yashandb/app/bin/yasboot status
YashanDB instance is stopped.
3.2 YashanDB两地三中心配置详解
3.2.1 配置主中心(Site A)
$ /yashandb/app/bin/yasboot create -d fgedudb -p /yashandb/fgdata
# 2. 启动主数据库
$ /yashandb/app/bin/yasboot start -d fgedudb
# 3. 配置主库参数
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
ALTER SYSTEM SET synchronous_standby_names = ‘site_b’;
ALTER SYSTEM SET wal_level = ‘logical’;
ALTER SYSTEM SET max_wal_senders = 10;
ALTER SYSTEM SET max_replication_slots = 10;
ALTER SYSTEM SET hot_standby = on;
ALTER SYSTEM SET max_connections = 1000;
ALTER SYSTEM SET shared_buffers = ’16GB’;
\q
3.2.2 配置同城灾备中心(Site B)
$ /yashandb/app/bin/yas_dump -d fgedudb -u sys -p password -F c -f /backup/fgedudb_backup.dmp
# 2. 复制备份到同城灾备中心
$ scp /backup/fgedudb_backup.dmp site-b:/backup/
# 3. 在同城灾备中心恢复数据库
$ /yashandb/app/bin/yasboot create -d fgedudb -p /yashandb/fgdata
$ /yashandb/app/bin/yas_restore -d fgedudb -f /backup/fgedudb_backup.dmp
# 4. 配置备库参数
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
ALTER SYSTEM SET standby_mode = on;
ALTER SYSTEM SET hot_standby = on;
ALTER SYSTEM SET primary_conninfo = ‘host=site-a port=5432 user=repl password=replpassword dbname=fgedudb’;
ALTER SYSTEM SET recovery_target_timeline = ‘latest’;
\q
# 5. 启动备库
$ /yashandb/app/bin/yasboot start -d fgedudb -c standby
3.2.3 配置异地灾备中心(Site C)
$ /yashandb/app/bin/yas_dump -d fgedudb -u sys -p password -F c -f /backup/fgedudb_backup.dmp
# 2. 复制备份到异地灾备中心
$ scp /backup/fgedudb_backup.dmp site-c:/backup/
# 3. 在异地灾备中心恢复数据库
$ /yashandb/app/bin/yasboot create -d fgedudb -p /yashandb/fgdata
$ /yashandb/app/bin/yas_restore -d fgedudb -f /backup/fgedudb_backup.dmp
# 4. 配置备库参数(异步复制)
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
ALTER SYSTEM SET standby_mode = on;
ALTER SYSTEM SET hot_standby = on;
ALTER SYSTEM SET primary_conninfo = ‘host=site-a port=5432 user=repl password=replpassword dbname=fgedudb application_name=site_c’;
ALTER SYSTEM SET recovery_target_timeline = ‘latest’;
ALTER SYSTEM SET synchronous_commit = ‘off’;
\q
# 5. 启动备库
$ /yashandb/app/bin/yasboot start -d fgedudb -c standby
3.3 YashanDB两地三中心切换测试
3.3.1 手动切换测试
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
SELECT pg_is_in_recovery();
pg_is_in_recovery
——————-
f
(1 row)
SELECT pg_switch_wal();
pg_switch_wal
—————-
0/1234567
(1 row)
SELECT pg_start_backup(‘switchover’);
pg_start_backup
—————-
0/1234568
(1 row)
\q
# 2. 在同城灾备库(Site B)执行切换
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
SELECT pg_is_in_recovery();
pg_is_in_recovery
——————-
t
(1 row)
SELECT pg_promote();
pg_promote
————
t
(1 row)
SELECT pg_is_in_recovery();
pg_is_in_recovery
——————-
f
(1 row)
\q
# 3. 验证新主库状态
$ /yashandb/app/bin/yasboot status -d fgedudb
YashanDB instance is running.
Part04-生产案例与实战讲解
4.1 YashanDB两地三中心故障切换案例
4.1.1 主中心故障场景
# 1. 检查主中心状态
$ ping -c 3 site-a.fgedu.net.cn
ping: site-a.fgedu.net.cn: Name or service not known
# 2. 检查同城灾备中心状态
$ /yashandb/app/bin/yasboot status -d fgedudb
YashanDB instance is running.
# 3. 检查同城灾备中心复制状态
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
SELECT slot_name, status, restart_lsn FROM pg_replication_slots;
slot_name | status | restart_lsn
———–+——–+————-
site_b | active | 0/1234567
(1 row)
# 4. 执行故障切换
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
SELECT pg_is_in_recovery();
pg_is_in_recovery
——————-
t
(1 row)
SELECT pg_promote();
pg_promote
————
t
(1 row)
# 5. 验证新主库状态
$ /yashandb/app/bin/yasboot status -d fgedudb
YashanDB instance is running.
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
SELECT pg_is_in_recovery();
pg_is_in_recovery
——————-
f
(1 row)
# 6. 更新应用连接配置,指向新主库
# 修改应用连接字符串为:jdbc:yashan://site-b.fgedu.net.cn:5432/fgedudb
4.2 YashanDB两地三中心灾备演练案例
4.2.1 全流程灾备演练
# 1. 模拟主中心和同城灾备中心故障
# 停止主中心和同城灾备中心的数据库服务
# 2. 检查异地灾备中心状态
$ /yashandb/app/bin/yasboot status -d fgedudb
YashanDB instance is running.
# 3. 检查异地灾备中心数据同步状态
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
SELECT slot_name, status, restart_lsn FROM pg_replication_slots;
slot_name | status | restart_lsn
———–+——–+————-
site_c | active | 0/1234567
(1 row)
# 4. 执行故障切换到异地灾备中心
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
SELECT pg_is_in_recovery();
pg_is_in_recovery
——————-
t
(1 row)
SELECT pg_promote();
pg_promote
————
t
(1 row)
# 5. 验证异地灾备中心成为新主库
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
SELECT pg_is_in_recovery();
pg_is_in_recovery
——————-
f
(1 row)
# 6. 验证业务数据完整性
$ /yashandb/app/bin/yassql -d fgedudb -u fgedu -p password
YashanDB SQL>
SELECT count(*) FROM fgedu_user;
count
——-
10000
(1 row)
SELECT count(*) FROM fgedu_order;
count
——-
50000
(1 row)
4.3 YashanDB两地三中心性能优化
YashanDB两地三中心性能优化措施:
– 使用高速网络设备
– 优化网络路由
– 配置QoS,确保复制流量优先
# 2. 存储优化
– 使用SSD存储
– 配置适当的RAID级别
– 优化存储缓存策略
# 3. 数据库参数优化
$ /yashandb/app/bin/yassql -d fgedudb -u sys -p password
YashanDB SQL>
— 优化复制参数
ALTER SYSTEM SET wal_sender_timeout = ’60s’;
ALTER SYSTEM SET wal_receiver_timeout = ’60s’;
ALTER SYSTEM SET max_wal_size = ‘1GB’;
ALTER SYSTEM SET min_wal_size = ’80MB’;
— 优化内存参数
ALTER SYSTEM SET shared_buffers = ’16GB’;
ALTER SYSTEM SET work_mem = ’64MB’;
ALTER SYSTEM SET maintenance_work_mem = ‘1GB’;
— 优化查询参数
ALTER SYSTEM SET random_page_cost = 1.1;
ALTER SYSTEM SET effective_cache_size = ’32GB’;
\q
# 4. 应用优化
– 合理设计应用架构
– 使用连接池
– 优化SQL语句
– 减少大事务
Part05-风哥经验总结与分享
5.1 YashanDB两地三中心最佳实践
YashanDB两地三中心最佳实践:
- 定期演练:每季度至少进行一次灾备演练,确保切换流程顺畅
- 监控体系:建立完善的监控体系,实时监控各中心状态
- 自动化:实现切换流程自动化,减少人为错误
- 文档完善:详细记录部署、配置、切换流程,确保可操作性
- 培训到位:对运维人员进行定期培训,熟悉架构和操作
5.2 YashanDB两地三中心常见问题
## 1. 复制延迟
– 原因:网络带宽不足、网络延迟高、主库负载高
– 解决方案:增加网络带宽、优化网络路由、调整复制参数、优化主库性能
## 2. 切换失败
– 原因:网络中断、权限不足、参数配置错误
– 解决方案:检查网络连接、确保权限正确、验证参数配置
## 3. 数据不一致
– 原因:复制中断、网络故障、硬件故障
– 解决方案:定期验证数据一致性、设置合适的复制模式、及时处理复制错误
## 4. 性能下降
– 原因:网络延迟、存储性能不足、参数配置不合理
– 解决方案:优化网络、升级存储、调整数据库参数
## 5. 监控盲区
– 原因:监控覆盖不全、告警设置不合理
– 解决方案:完善监控体系、设置合理的告警阈值、定期检查监控有效性
5.3 YashanDB两地三中心维护建议
## 每日维护
– 检查各中心数据库状态
– 检查复制延迟
– 检查存储空间
– 检查网络连通性
## 每周维护
– 备份所有中心的数据库
– 检查数据库日志
– 分析性能指标
– 验证数据一致性
## 每月维护
– 进行切换测试
– 检查系统补丁
– 优化数据库参数
– 清理过期日志
## 季度维护
– 进行全面灾备演练
– 评估系统性能
– 调整资源配置
– 更新维护文档
# 维护工具推荐
– YashanDB监控工具(YCM)
– 第三方监控工具(Zabbix、Prometheus)
– 自动化运维脚本
– 日志分析工具
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
