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

kingbase教程FG083-金仓数据库集群主从

本文档风哥主要介绍金仓数据库集群主从的概念、配置和管理方法,帮助数据库管理员了解集群主从的工作原理,以及如何搭建和维护高可用的数据库集群。风哥教程参考kingbase官方文档集群主从指南。

数据库集群主从是一种高可用架构,通过将数据从主节点复制到从节点,实现数据冗余和故障转移,提高系统的可用性和可靠性。

通过本文档的学习,读者将掌握金仓数据库集群主从的搭建、配置和管理方法,为构建高可用的数据库系统提供支持。

目录大纲

Part01-基础概念与理论知识

1.1 集群主从的概念

集群主从是一种数据库高可用架构,由一个主节点和多个从节点组成。主要特点包括:

  • 主节点:负责处理所有写操作,并将数据复制到从节点
  • 从节点:接收主节点复制的数据,提供读操作服务
  • 数据复制:主节点将事务日志发送到从节点,从节点应用这些日志
  • 故障转移:当主节点故障时,从节点可以提升为新的主节点

1.2 集群主从的类型

集群主从的主要类型包括:

  • 异步复制:主节点在提交事务后,异步将日志发送到从节点,性能较高但可能存在数据延迟
  • 同步复制:主节点在提交事务前,等待从节点确认收到日志,数据一致性高但性能较低
  • 半同步复制:主节点在提交事务前,等待至少一个从节点确认收到日志,平衡了性能和一致性,风哥提示:

1.3 集群主从的重要性

集群主从的重要性主要体现在以下几个方面:

  • 高可用性:当主节点故障时,从节点可以快速接管,减少系统 downtime
  • 负载均衡:将读操作分散到从节点,提高系统的整体性能
  • 数据冗余:数据在多个节点上有备份,提高数据安全性
  • 灾备能力:可以在不同地理位置部署从节点,提高灾备能力
  • 维护便利:可以在从节点上进行备份和维护操作,不影响主节点的运行

Part02-生产环境规划与建议

2.1 集群架构规划

集群架构规划建议:

  • 节点数量
    • 最小配置:1主1从
    • 推荐配置:1主2从
    • 大型系统:1主多从(3-5个从节点)
  • 节点部署
    • 同机房部署:网络延迟低,适合同步复制
    • 跨机房部署:提高灾备能力,适合异步复制
    • 云环境部署:利用云服务的弹性和可靠性
  • 复制方式
    • 异步复制:适合对数据一致性要求不高的场景
    • 同步复制:适合对数据一致性要求高的场景
    • 半同步复制:适合大多数生产环境,学习交流加群风哥微信: itpux-com

2.2 硬件配置建议

硬件配置建议:

  • CPU
    • 主节点:8核以上
    • 从节点:8核以上
  • 内存
    • 主节点:32GB以上
    • 从节点:32GB以上
  • 存储
    • 主节点:SSD,500GB以上
    • 从节点:SSD,500GB以上
  • 网络
    • 主从节点之间:万兆网络
    • 客户端连接:千兆网络

2.3 网络配置建议

网络配置建议:

  • 网络拓扑
    • 主从节点在同一网络段
    • 使用专用网络进行数据复制
    • 配置网络冗余
  • 网络参数
    • 调整TCP参数,提高网络性能
    • 启用网络流量控制
    • 配置防火墙规则,允许主从节点之间的通信,学习交流加群风哥QQ113257174
  • 网络监控
    • 监控网络带宽使用情况
    • 监控网络延迟
    • 监控网络丢包率

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

3.1 集群搭建步骤

集群搭建步骤:

  1. 准备环境
    • 安装Kingbase数据库
    • 配置主机名和IP地址
    • 配置网络连接
  2. 配置主节点
    • 修改kingbase.conf文件
    • 修改pg_hba.conf文件
    • 重启主节点
  3. 配置从节点
    • 备份主节点数据
    • 恢复数据到从节点
    • 修改kingbase.conf文件
    • 创建recovery.conf文件
    • 重启从节点,更多视频教程www.fgedu.net.cn
  4. 验证集群状态
    • 检查主节点状态
    • 检查从节点状态
    • 测试数据复制

3.2 集群配置管理

集群配置管理:

  1. 主节点配置
    • wal_level:设置为logical或replica
    • max_wal_senders:设置为从节点数量+1
    • max_replication_slots:设置为从节点数量
    • synchronous_commit:设置为on(同步复制)或local(异步复制)
  2. 从节点配置
    • hot_standby:设置为on
    • max_standby_archive_delay:设置为合适的值
    • max_standby_streaming_delay:设置为合适的值
  3. 网络配置
    • 在pg_hba.conf中添加从节点的连接权限
    • 配置防火墙规则,允许主从节点之间的通信

3.3 集群监控维护

集群监控维护:

  1. 监控内容
    • 主节点状态:监控主节点的运行状态
    • 从节点状态:监控从节点的运行状态,更多学习教程公众号风哥教程itpux_com
    • 复制状态:监控主从复制的延迟和状态
    • 资源使用率:监控CPU、内存、磁盘和网络的使用情况
  2. 监控工具
    • Zabbix:全面的监控解决方案
    • Prometheus:云原生监控系统
    • Grafana:数据可视化工具
    • Kingbase自带监控:如ksql命令
  3. 维护措施
    • 定期备份:定期备份主节点和从节点的数据
    • 定期检查:定期检查集群状态和复制状态
    • 定期更新:定期更新数据库版本和补丁
    • 故障演练:定期进行故障转移演练

Part04-生产案例与实战讲解

4.1 主从复制实战

主从复制实战:

# 1. 配置主节点
# 编辑kingbase.conf
vi /kingbase/fgdata/kingbase.conf

# 添加以下配置
wal_level = replica
max_wal_senders = 10
max_replication_slots = 10
synchronous_commit = on

# 编辑pg_hba.conf
vi /kingbase/fgdata/pg_hba.conf

# 添加以下配置
host replication fgedu 192.168.1.2/32 md5

# 重启主节点
systemctl restart kingbase

● kingbase.service – KingbaseES Database Server
Loaded: loaded (/etc/systemd/system/kingbase.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2024-01-01 00:00:00 CST; 10s ago
Process: 12345 ExecStart=/kingbase/app/bin/kbstart -D /kingbase/fgdata (code=exited, status=0/SUCCESS)
Main PID: 12346 (postgres)

# 2. 配置从节点
# 备份主节点数据
pg_basebackup -h 192.168.1.1 -p 54321 -U fgedu -D /kingbase/fgdata -F p -X stream -P

pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/1234567
pg_basebackup: starting background WAL receiver
30330/30330 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/1234567
pg_basebackup: base backup completed

# 创建recovery.conf
vi /kingbase/fgdata/recovery.conf

# 添加以下配置
standby_mode = ‘on’
primary_conninfo = ‘host=192.168.1.1 port=54321 user=fgedu password=fgedu123’
trigger_file = ‘/kingbase/fgdata/failover.trigger’

# 重启从节点
systemctl restart kingbase

● kingbase.service – KingbaseES Database Server
Loaded: loaded (/etc/systemd/system/kingbase.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2024-01-01 00:01:00 CST; 10s ago
Process: 12345 ExecStart=/kingbase/app/bin/kbstart -D /kingbase/fgdata (code=exited, status=0/SUCCESS)
Main PID: 12346 (postgres)

# 3. 验证复制状态
# 在主节点上执行
ksql -U fgedu -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
—–+———-+———+——————+————-+—————–+————-+—————+————–+——-+———-+———–+———–+————+———–+———–+————+—————+————
1234 | 16384 | fgedu | walreceiver | 192.168.1.2 | | 54321 | 2024-01-01 00:01:00+08 | | streaming | 0/1234567 | 0/1234567 | 0/1234567 | 0/1234567 | | | | 1 | sync
(1 row)

# 在从节点上执行
ksql -U fgedu -d fgedudb -c “SELECT pg_is_in_recovery();”

pg_is_in_recovery
——————-
t
(1 row)

4.2 故障转移实战

故障转移实战:

# 1. 模拟主节点故障
# 在主节点上执行
systemctl stop kingbase

● kingbase.service – KingbaseES Database Server
Loaded: loaded (/etc/systemd/system/kingbase.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Mon 2024-01-01 00:02:00 CST; 10s ago
Process: 12345 ExecStart=/kingbase/app/bin/kbstart -D /kingbase/fgdata (code=exited, status=0/SUCCESS)
Main PID: 12346 (code=exited, status=0/SUCCESS)

# 2. 执行故障转移
# 在从节点上执行
touch /kingbase/fgdata/failover.trigger

# 3. 验证从节点提升为主节点
ksql -U fgedu -d fgedudb -c “SELECT pg_is_in_recovery();”

pg_is_in_recovery
——————-
f
(1 row)

# 4. 重新配置原主节点为从节点
# 启动原主节点
systemctl start kingbase

# 备份新主节点数据
pg_basebackup -h 192.168.1.2 -p 54321 -U fgedu -D /kingbase/fgdata -F p -X stream -P

# 创建recovery.conf
vi /kingbase/fgdata/recovery.conf

# 添加以下配置
standby_mode = ‘on’
primary_conninfo = ‘host=192.168.1.2 port=54321 user=fgedu password=fgedu123’
trigger_file = ‘/kingbase/fgdata/failover.trigger’

# 重启原主节点
systemctl restart kingbase

● kingbase.service – KingbaseES Database Server
Loaded: loaded (/etc/systemd/system/kingbase.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2024-01-01 00:03:00 CST; 10s ago
Process: 12345 ExecStart=/kingbase/app/bin/kbstart -D /kingbase/fgdata (code=exited, status=0/SUCCESS)
Main PID: 12346 (postgres)

4.3 集群性能测试

集群性能测试:

# 1. 安装压测工具
yum install -y sysbench

# 2. 准备测试数据
sysbench –db-driver=pgsql –pgsql-host=192.168.1.1 –pgsql-port=54321 –pgsql-user=fgedu –pgsql-password=fgedu123 –pgsql-db=fgedudb –table-size=1000000 –tables=10 prepare

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Creating table ‘sbtest1’…
Inserting 1000000 records into ‘sbtest1’
Creating secondary indexes on ‘sbtest1’…
Creating table ‘sbtest2’…
Inserting 1000000 records into ‘sbtest2’
Creating secondary indexes on ‘sbtest2’


# 3. 测试主节点写性能
sysbench –db-driver=pgsql –pgsql-host=192.168.1.1 –pgsql-port=54321 –pgsql-user=fgedu –pgsql-password=fgedu123 –pgsql-db=fgedudb –table-size=1000000 –tables=10 –threads=16 –time=60 –report-interval=10 –fgedudb=oltp_write_only run

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the fgedudb with following options:
Number of threads: 16
Report intermediate results every 10 second(s)
Initializing random number generator from current time

Initializing worker threads…

Threads started!

[ 10s ] thds: 16 tps: 800.50 qps: 8005.00 (r/w/o: 0.00/8005.00/0.00) lat (ms,95%): 25.23 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 16 tps: 810.30 qps: 8103.00 (r/w/o: 0.00/8103.00/0.00) lat (ms,95%): 24.98 err/s: 0.00 reconn/s: 0.00


# 4. 测试从节点读性能
sysbench –db-driver=pgsql –pgsql-host=192.168.1.2 –pgsql-port=54321 –pgsql-user=fgedu –pgsql-password=fgedu123 –pgsql-db=fgedudb –table-size=1000000 –tables=10 –threads=16 –time=60 –report-interval=10 –fgedudb=oltp_read_only run

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the fgedudb with following options:
Number of threads: 16
Report intermediate results every 10 second(s)
Initializing random number generator from current time

Initializing worker threads…

Threads started!

[ 10s ] thds: 16 tps: 1500.20 qps: 30004.00 (r/w/o: 30004.00/0.00/0.00) lat (ms,95%): 12.05 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 16 tps: 1510.50 qps: 30210.00 (r/w/o: 30210.00/0.00/0.00) lat (ms,95%): 11.80 err/s: 0.00 reconn/s: 0.00

Part05-风哥经验总结与分享

5.1 集群主从最佳实践

  • 合理规划集群架构:根据业务需求和系统规模,选择合适的集群架构
  • 使用半同步复制:平衡性能和数据一致性,适合大多数生产环境
  • 配置监控系统:实时监控集群状态和复制状态,及时发现问题,from DB视频:www.itpux.com
  • 定期进行故障演练:定期进行故障转移演练,提高故障处理能力
  • 合理配置网络:使用高速网络,减少网络延迟,提高复制性能
  • 定期备份数据:定期备份主节点和从节点的数据,确保数据安全

5.2 常见问题与解决方案

  • 复制延迟问题
    • 问题:主从复制延迟较大
    • 解决方案:检查网络延迟,优化主节点性能,调整复制参数
  • 复制中断问题
    • 问题:主从复制中断
    • 解决方案:检查网络连接,检查主节点状态,重新配置复制
  • 故障转移失败问题
    • 问题:故障转移失败
    • 解决方案:检查从节点状态,检查trigger_file配置,手动执行故障转移
  • 性能下降问题
    • 问题:集群性能下降
    • 解决方案:优化数据库参数,优化SQL语句,增加硬件资源

5.3 集群主从监控与调优

  • 监控指标
    • 复制延迟:监控主从复制的延迟时间
    • 复制状态:监控主从复制的状态
    • 资源使用率:监控CPU、内存、磁盘和网络的使用情况
    • 错误率:监控集群的错误率
  • 调优参数
    • 主节点参数:
      • wal_buffers:设置为16MB-64MB
      • max_wal_senders:设置为从节点数量+1
      • synchronous_commit:根据业务需求设置
    • 从节点参数:
      • hot_standby:设置为on
      • max_standby_archive_delay:设置为30s
      • max_standby_streaming_delay:设置为30s
  • 优化策略
    • 使用SSD存储,提高IO性能
    • 使用高速网络,减少网络延迟
    • 合理分配资源,避免资源竞争
    • 定期清理日志,保持系统整洁

风哥提示:数据库集群主从是构建高可用数据库系统的重要技术,通过合理的规划和配置,可以提高系统的可用性和可靠性,确保业务的持续运行。

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

联系我们

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

微信号:itpux-com

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