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

kingbase教程FG164-金仓数据库MGR集群配置实战

内容简介:本文档详细介绍金仓数据库MGR(Managed Replication)集群的配置方法,包括集群架构、部署规划、配置步骤、故障处理等内容。风哥教程参考kingbase官方文档kingbase8高可用集群管理手册、kingbase8系统管理员手册等。

Part01-基础概念与理论知识

1.1 MGR集群概述

MGR(Managed Replication)是金仓数据库提供的一种高可用集群解决方案,它基于 PostgreSQL 的流复制技术,通过多节点间的实时数据同步,实现数据库的高可用和负载均衡。

1.2 MGR集群架构

MGR集群架构主要包括以下组件:

  • 主节点(Primary):负责处理所有写操作,并将更改同步到其他节点
  • 从节点(Standby):负责同步主节点的数据,可处理读操作
  • 仲裁节点(Arbiter):仅用于投票,不存储数据,提高集群的可用性

MGR集群采用多主架构,支持自动故障转移和读写分离,提高了系统的可用性和性能。

1.3 MGR集群的优势与应用场景

MGR集群的优势:

  • 高可用性:当主节点故障时,自动选举新的主节点
  • 负载均衡:支持读写分离,提高系统性能,学习交流加群风哥微信: itpux-com
  • 数据一致性:通过同步复制确保数据一致性
  • 易于管理:提供统一的集群管理接口

应用场景:

  • 核心业务系统:需要高可用性和数据一致性的场景
  • 读写分离场景:读操作远多于写操作的场景
  • 灾备场景:通过多节点部署实现异地灾备

Part02-生产环境规划与建议

2.1 集群部署规划

集群部署规划:

  • 节点数量:建议至少3个节点,其中2个数据节点和1个仲裁节点
  • 节点分布:建议将节点分布在不同的物理服务器上,提高可用性
  • 网络规划:确保节点间网络带宽充足,延迟低,学习交流加群风哥QQ113257174
  • 存储规划:每个节点需要足够的存储空间,建议使用SSD存储

2.2 硬件与网络规划

硬件与网络规划:

  • 服务器配置:建议使用至少8核CPU、16GB内存的服务器
  • 网络配置:建议使用千兆以上网络,节点间网络延迟不超过1ms
  • 防火墙配置:开放节点间通信所需的端口
  • 操作系统:推荐使用Oracle Linux 9.3 / RHEL 9.3 / 8.x / 7.x或国产麒麟操作系统 Kylin v10 SP3

2.3 存储规划

存储规划:

  • 数据存储:建议使用独立的存储设备,如SAN、NAS或本地SSD
  • 存储容量:根据数据量大小,建议预留至少50%的冗余空间,更多视频教程www.fgedu.net.cn
  • 存储性能:建议使用SSD存储,提高I/O性能
  • 备份存储:配置独立的备份存储,定期备份集群数据

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

3.1 环境准备

环境准备:

  • 安装金仓数据库软件:在所有节点上安装相同版本的金仓数据库
  • 配置主机名和IP地址:确保所有节点的主机名和IP地址正确配置
  • 配置免密登录:配置节点间的免密登录,便于集群管理
  • 关闭防火墙或开放所需端口:确保节点间通信正常

3.2 MGR集群配置步骤

MGR集群配置步骤:

  1. 初始化数据库实例:在所有节点上初始化数据库实例
  2. 配置主节点:在主节点上配置MGR参数,更多学习教程公众号风哥教程itpux_com
  3. 配置从节点:在从节点上配置MGR参数
  4. 启动集群:启动主节点和从节点,形成MGR集群
  5. 验证集群状态:检查集群是否正常运行

3.3 集群管理与监控

集群管理与监控:

  • 集群状态监控:定期检查集群状态,确保所有节点正常运行
  • 故障处理:当节点故障时,及时进行故障转移和恢复
  • 集群扩容与缩容:根据业务需求,动态调整集群规模
  • 备份与恢复:定期备份集群数据,确保数据安全

Part04-生产案例与实战讲解

4.1 三节点MGR集群部署实战

部署三节点MGR集群:


# 环境信息
# 节点1(主节点):192.168.1.101 fgedu1.fgedu.net.cn
# 节点2(从节点):192.168.1.102 fgedu2.fgedu.net.cn
# 节点3(仲裁节点):192.168.1.103 fgedu3.fgedu.net.cn
# 在所有节点上安装金仓数据库
$ ./KingbaseES_V8R6_Installer_Linux_x86_64.bin
# 在所有节点上初始化数据库实例
$ initdb -D /kingbase/fgdata
# 配置主节点(节点1)
$ vi /kingbase/fgdata/kingbase.conf
# 添加以下配置
shared_preload_libraries = ‘repmgr’
cluster_name = ‘fgedu_mgr_cluster’
listen_addresses = ‘*’
port = 54321
max_connections = 1000
shared_buffers = 4GB
wal_level = logical
max_wal_senders = 10
max_replication_slots = 10
hot_standby = on
# 配置pg_hba.conf
$ vi /kingbase/fgdata/pg_hba.conf
# 添加以下配置
host replication repmgr 192.168.1.0/24 trust
host all all 192.168.1.0/24 md5
# 启动主节点
$ kstart -D /kingbase/fgdata
# 创建repmgr用户
$ ksql -U system -d template1 -c “CREATE ROLE repmgr WITH SUPERUSER LOGIN PASSWORD ‘repmgr’;”
# 初始化repmgr
$ repmgr primary register –host=192.168.1.101 –port=54321 –user=repmgr –dbname=repmgr –cluster-name=fgedu_mgr_cluster
# 配置从节点(节点2)
$ vi /kingbase/fgdata/kingbase.conf
# 添加以下配置(与主节点相同)
shared_preload_libraries = ‘repmgr’
cluster_name = ‘fgedu_mgr_cluster’
listen_addresses = ‘*’
port = 54321
max_connections = 1000
shared_buffers = 4GB
wal_level = logical
max_wal_senders = 10
max_replication_slots = 10
hot_standby = on
# 配置pg_hba.conf(与主节点相同)
$ vi /kingbase/fgdata/pg_hba.conf
# 从主节点克隆数据
$ repmgr standby clone –host=192.168.1.101 –port=54321 –user=repmgr –dbname=repmgr
# 启动从节点
$ kstart -D /kingbase/fgdata
# 注册从节点
$ repmgr standby register –host=192.168.1.102 –port=54321 –user=repmgr –dbname=repmgr
# 配置仲裁节点(节点3)
$ vi /kingbase/fgdata/kingbase.conf
# 添加以下配置
shared_preload_libraries = ‘repmgr’
cluster_name = ‘fgedu_mgr_cluster’
listen_addresses = ‘*’
port = 54321
max_connections = 1000
# 配置pg_hba.conf(与主节点相同)
$ vi /kingbase/fgdata/pg_hba.conf
# 启动仲裁节点
$ kstart -D /kingbase/fgdata
# 注册仲裁节点
$ repmgr standby register –host=192.168.1.103 –port=54321 –user=repmgr –dbname=repmgr –standby-type=arbiter
# 检查集群状态
$ repmgr cluster show
# 输出日志
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | Connection string
—-+———–+———+———–+———-+———-+———-+———-+————————————————————-
1 | fgedu1 | primary | * running | | default | 100 | 1 | host=192.168.1.101 port=54321 user=repmgr dbname=repmgr
2 | fgedu2 | standby | running | fgedu1 | default | 100 | 1 | host=192.168.1.102 port=54321 user=repmgr dbname=repmgr
3 | fgedu3 | standby | running | fgedu1 | default | 0 | 1 | host=192.168.1.103 port=54321 user=repmgr dbname=repmgr

4.2 集群状态监控实战

监控MGR集群状态:,from DB视频:www.itpux.com


# 检查集群状态
$ repmgr cluster show
# 输出日志
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | Connection string
—-+———–+———+———–+———-+———-+———-+———-+————————————————————-
1 | fgedu1 | primary | * running | | default | 100 | 1 | host=192.168.1.101 port=54321 user=repmgr dbname=repmgr
2 | fgedu2 | standby | running | fgedu1 | default | 100 | 1 | host=192.168.1.102 port=54321 user=repmgr dbname=repmgr
3 | fgedu3 | standby | running | fgedu1 | default | 0 | 1 | host=192.168.1.103 port=54321 user=repmgr dbname=repmgr
# 检查节点状态
$ repmgr node status
# 输出日志
Node 1 (fgedu1): status=running, role=primary, upstream node=-1
# 检查复制状态
$ ksql -U repmgr -d repmgr -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 | 16384 | repmgr | repmgr | 192.168.1.102 | fgedu2 | 54321 | 2026-04-09 10:00:00.123456+08 | | streaming | 0/1234567 | 0/1234567 | 0/1234567 | 0/1234567 | | | | 1 | sync
12346 | 16384 | repmgr | repmgr | 192.168.1.103 | fgedu3 | 54321 | 2026-04-09 10:00:00.234567+08 | | streaming | 0/1234567 | 0/1234567 | 0/1234567 | 0/1234567 | | | | 0 | async

4.3 集群故障处理实战

处理MGR集群故障:


# 模拟主节点故障
$ kstop -D /kingbase/fgdata # 在主节点执行
# 检查集群状态
$ repmgr cluster show # 在从节点执行
# 输出日志
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | Connection string
—-+———–+———+———–+———-+———-+———-+———-+————————————————————-
1 | fgedu1 | primary | ! failed | | default | 100 | 1 | host=192.168.1.101 port=54321 user=repmgr dbname=repmgr
2 | fgedu2 | standby | running | fgedu1 | default | 100 | 1 | host=192.168.1.102 port=54321 user=repmgr dbname=repmgr
3 | fgedu3 | standby | running | fgedu1 | default | 0 | 1 | host=192.168.1.103 port=54321 user=repmgr dbname=repmgr
# 执行故障转移
$ repmgr standby promote –verbose
# 输出日志
NOTICE: promoting standby to primary
NOTICE: promoting server “fgedu2” (ID: 2)
NOTICE: waiting up to 60 seconds for server “fgedu2” to promote
NOTICE: server “fgedu2” (ID: 2) was successfully promoted to primary
NOTICE: STANDBY PROMOTE successful
# 检查集群状态
$ repmgr cluster show
# 输出日志
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | Connection string
—-+———–+———+———–+———-+———-+———-+———-+————————————————————-
1 | fgedu1 | primary | ! failed | | default | 100 | 1 | host=192.168.1.101 port=54321 user=repmgr dbname=repmgr
2 | fgedu2 | primary | * running | | default | 100 | 2 | host=192.168.1.102 port=54321 user=repmgr dbname=repmgr
3 | fgedu3 | standby | running | fgedu2 | default | 0 | 1 | host=192.168.1.103 port=54321 user=repmgr dbname=repmgr
# 恢复故障节点
$ kstart -D /kingbase/fgdata # 在故障节点执行
# 重新加入集群
$ repmgr standby follow –upstream-node=2
# 检查集群状态
$ repmgr cluster show
# 输出日志
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | Connection string
—-+———–+———+———–+———-+———-+———-+———-+————————————————————-
1 | fgedu1 | standby | running | fgedu2 | default | 100 | 2 | host=192.168.1.101 port=54321 user=repmgr dbname=repmgr
2 | fgedu2 | primary | * running | | default | 100 | 2 | host=192.168.1.102 port=54321 user=repmgr dbname=repmgr
3 | fgedu3 | standby | running | fgedu2 | default | 0 | 2 | host=192.168.1.103 port=54321 user=repmgr dbname=repmgr

4.4 集群扩容与缩容实战

集群扩容与缩容:


# 扩容集群(添加新节点)
# 新节点:192.168.1.104 fgedu4.fgedu.net.cn
# 在新节点上安装金仓数据库
$ ./KingbaseES_V8R6_Installer_Linux_x86_64.bin
# 初始化数据库实例
$ initdb -D /kingbase/fgdata
# 配置kingbase.conf(与其他节点相同)
$ vi /kingbase/fgdata/kingbase.conf
# 配置pg_hba.conf(与其他节点相同)
$ vi /kingbase/fgdata/pg_hba.conf
# 从主节点克隆数据
$ repmgr standby clone –host=192.168.1.102 –port=54321 –user=repmgr –dbname=repmgr
# 启动新节点
$ kstart -D /kingbase/fgdata
# 注册新节点
$ repmgr standby register –host=192.168.1.104 –port=54321 –user=repmgr –dbname=repmgr
# 检查集群状态
$ repmgr cluster show
# 输出日志
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | Connection string
—-+———–+———+———–+———-+———-+———-+———-+————————————————————-
1 | fgedu1 | standby | running | fgedu2 | default | 100 | 2 | host=192.168.1.101 port=54321 user=repmgr dbname=repmgr
2 | fgedu2 | primary | * running | | default | 100 | 2 | host=192.168.1.102 port=54321 user=repmgr dbname=repmgr
3 | fgedu3 | standby | running | fgedu2 | default | 0 | 2 | host=192.168.1.103 port=54321 user=repmgr dbname=repmgr
4 | fgedu4 | standby | running | fgedu2 | default | 100 | 2 | host=192.168.1.104 port=54321 user=repmgr dbname=repmgr
# 缩容集群(移除节点)
# 移除节点4
# 停止节点4
$ kstop -D /kingbase/fgdata # 在节点4执行
# 从集群中移除节点4
$ repmgr node unregister –node-id=4
# 检查集群状态
$ repmgr cluster show
# 输出日志
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | Connection string
—-+———–+———+———–+———-+———-+———-+———-+————————————————————-
1 | fgedu1 | standby | running | fgedu2 | default | 100 | 2 | host=192.168.1.101 port=54321 user=repmgr dbname=repmgr
2 | fgedu2 | primary | * running | | default | 100 | 2 | host=192.168.1.102 port=54321 user=repmgr dbname=repmgr
3 | fgedu3 | standby | running | fgedu2 | default | 0 | 2 | host=192.168.1.103 port=54321 user=repmgr dbname=repmgr

Part05-风哥经验总结与分享

5.1 MGR集群常见问题与解决方案

MGR集群常见问题与解决方案:

  • 节点间网络通信失败:检查网络连接、防火墙配置
  • 集群脑裂:确保网络稳定,配置合适的仲裁节点
  • 复制延迟:检查网络带宽、磁盘I/O性能
  • 故障转移失败:检查节点状态、权限配置

5.2 MGR集群最佳实践建议

MGR集群最佳实践建议:

  • 使用奇数个节点,至少3个节点,确保集群的高可用性
  • 配置合适的仲裁节点,提高集群的可靠性
  • 定期监控集群状态,及时发现和解决问题
  • 实施定期备份策略,确保数据安全
  • 进行故障演练,提高应对故障的能力

5.3 MGR集群自动化管理脚本分享

以下是一个MGR集群自动化管理脚本示例:


#!/bin/bash
# mgr_cluster_manage.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 集群状态检查
check_cluster_status() {
echo “检查集群状态…”
repmgr cluster show
}
# 节点状态检查
check_node_status() {
echo “检查节点状态…”
repmgr node status
}
# 复制状态检查
check_replication_status() {
echo “检查复制状态…”
ksql -U repmgr -d repmgr -c “SELECT * FROM pg_stat_replication;”
}
# 故障转移
failover() {
echo “执行故障转移…”
repmgr standby promote –verbose
}
# 节点重新加入集群
rejoin_node() {
local node_id=$1
echo “节点 $node_id 重新加入集群…”
repmgr standby follow –upstream-node=$node_id
}
# 主函数
main() {
case $1 in
status)
check_cluster_status
;;
node-status)
check_node_status
;;
replication)
check_replication_status
;;
failover)
failover
;;
rejoin)
rejoin_node $2
;;
*)
echo “用法: $0 {status|node-status|replication|failover|rejoin }”
;;
esac
}
# 执行主函数
main $@

风哥提示:MGR集群是金仓数据库高可用的重要解决方案,配置和管理好集群可以大大提高系统的可用性。

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

联系我们

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

微信号:itpux-com

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