暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

【金仓数据库征文】_金仓 KES V9 集群 IP 调整实战指南

原创 jiayou 2025-06-23
408

金仓 KES V9 集群 IP 调整实战指南

一、 概要

在金仓 KingbaseES (KES) V9 高可用集群环境中,节点物理 IP 和服务虚拟 IP (VIP) 是核心配置。当业务需求变更(如网络规划调整、服务器迁移)需要修改这些 IP 地址时,需谨慎操作以确保集群持续可用。本文基于测试环境,详细演示 KES V9 集群 IP 地址调整的全流程步骤,为实际运维提供参考。

二、 调整说明

IP 调整涉及两个层面:

  1. 主机层面:

    • 修改操作系统的永久物理 IP 地址配置。
    • 更新 /etc/hosts 文件中的主机名与 IP 映射关系。
    • 重启网络服务使新配置生效。
    • 注意: 若使用网卡绑定 (bond),需同步调整 bond 相关配置。
  2. 集群层面:

    • 修改所有节点上的 repmgr.conf 配置文件,更新其中的:
      • 物理 IP (conninfo, net_device_ip)
      • 虚拟 VIP (virtual_ip)
      • 网络设备名 (net_device)
      • 信任网关 (trusted_servers)
    • 重启数据库并重新将节点注册到集群。

三、 实践方案

1. 变更规划

项目 变更前 变更后
主节点IP 192.168.126.15/24 192.168.80.15/24
从节点IP 192.168.126.16/24 192.168.80.16/24
虚拟VIP 192.168.126.18/24 192.168.80.18/24
信任网关 192.168.126.1 192.168.80.1
网卡名称 ens33 ens34

重要提示: 如果服务器配置了网卡绑定 (bond),请务必在主机层面相应调整 bond 的配置。

2. 当前集群环境信息收集 (变更前)

  • 主机映射 (/etc/hosts):
    192.168.126.15 node01 192.168.126.16 node02 192.168.126.18 kes_vip
  • 主节点 IP (ip add):
    inet 192.168.126.15/24 brd 192.168.126.255 scope global noprefixroute ens33
    
  • 从节点 IP (ip add):
    inet 192.168.126.16/24 brd 192.168.126.255 scope global noprefixroute ens33
    
  • 集群状态 (repmgr cluster show):
    ID | Name  | Role    | Status  | Upstream | Location | Priority | Timeline | Connection string
    ---+-------+---------+---------+----------+----------+----------+----------+-------------------
    1  | node1 | primary | running |          | default  | 100      | 1        | host=192.168.126.15 user=esrep ...
    2  | node2 | standby | running | node1    | default  | 100      | 1        | host=192.168.126.16 user=esrep ...
    
  • 主节点 repmgr.conf 关键参数 (repmgr config showall / grep):
    node_id=1
    node_name='node1'
    conninfo='host=192.168.126.15 user=esrep ...' # 主库连接串
    virtual_ip='192.168.126.18/24'                # 虚拟VIP
    net_device='ens33'                            # 网卡名
    net_device_ip='192.168.126.15'                # 本机物理IP
    trusted_servers='192.168.126.1'               # 信任网关
    ... (其他配置如 promote_command, vip_*_cmd, arping_cmd 等保持不变)
    
  • 从节点 repmgr.conf 关键参数 (repmgr config showall / grep):
    node_id=2
    node_name='node2'
    conninfo='host=192.168.126.16 user=esrep ...' # 备库连接串
    virtual_ip='192.168.126.18/24'                # 虚拟VIP (同主库)
    net_device='ens33'                            # 网卡名
    net_device_ip='192.168.126.16'                # 本机物理IP
    trusted_servers='192.168.126.1'               # 信任网关 (同主库)
    ... (其他配置如 promote_command, vip_*_cmd, arping_cmd 等保持不变)
    
  • 主节点 kingbase.auto.conf (cat data/kingbase.auto.conf):
    synchronous_standby_names = 'ANY 1(node2)' # 指定备库node2为同步备
    
  • 从节点 kingbase.auto.conf (cat data/kingbase.auto.conf):
    primary_conninfo = 'host=192.168.126.15 user=esrep ...' # 指向旧主库IP
    primary_slot_name = 'repmgr_slot_2'                      # 复制槽
    

3. 修改配置文件

在进行以下操作前,请务必关闭整个 KES 数据库集群 (sys_monitor.sh stop 或在各节点 sys_ctl stop -D $KINGBASE_DATA)。

  1. 主机名 IP 映射配置 (/etc/hosts):

    # 在所有节点上执行,覆盖旧的映射或追加新的映射 cat <<EOF >> /etc/hosts 192.168.80.15 node01 192.168.80.16 node02 192.168.80.18 kes_vip EOF # 建议:也可直接编辑 /etc/hosts 文件,将旧IP行注释或删除,添加新行。
  2. 集群 repmgr.conf 配置修改:

    • 备份配置文件 (所有节点):
      cp $KINGBASE_HOME/etc/repmgr.conf ~/repmgr.conf.bak.$(date +%Y%m%d) # 强烈建议备份!
    • 修改主节点 (node01, 192.168.80.15) repmgr.conf:
      # 1. 修改 conninfo 中的 host IP (指向本机新IP) sed -i "s/\(conninfo='host=\)192\.168\.126\.15/\1192.168.80.15/" $KINGBASE_HOME/etc/repmgr.conf # 2. 修改 net_device 值 (新网卡名) sed -i "s/\(net_device=\)'ens33'/\1'ens34'/" $KINGBASE_HOME/etc/repmgr.conf # 3. 修改 net_device_ip 值 (本机新物理IP) sed -i "s/\(net_device_ip=\)'192\.168\.126\.15'/\1'192.168.80.15'/" $KINGBASE_HOME/etc/repmgr.conf # 4. 修改 virtual_ip 值 (新VIP) sed -i "s/\(virtual_ip=\)'192\.168\.126\.18\/24'/\1'192.168.80.18\/24'/" $KINGBASE_HOME/etc/repmgr.conf # 5. 修改 trusted_servers 值 (新信任网关) sed -i "s/\(trusted_servers=\)'192\.168\.126\.1'/\1'192.168.80.1'/" $KINGBASE_HOME/etc/repmgr.conf
      • 验证主节点修改 (grep):
        conninfo='host=192.168.80.15 user=esrep ...'
        virtual_ip='192.168.80.18/24'
        net_device='ens34'
        net_device_ip='192.168.80.15'
        trusted_servers='192.168.80.1'
        
    • 修改从节点 (node02, 192.168.80.16) repmgr.conf:
      # 1. 修改 conninfo 中的 host IP (指向本机新IP) sed -i "s/\(conninfo='host=\)192\.168\.126\.16/\1192.168.80.16/" $KINGBASE_HOME/etc/repmgr.conf # 2. 修改 net_device 值 (新网卡名) sed -i "s/\(net_device=\)'ens33'/\1'ens34'/" $KINGBASE_HOME/etc/repmgr.conf # 3. 修改 net_device_ip 值 (本机新物理IP) sed -i "s/\(net_device_ip=\)'192\.168\.126\.16'/\1'192.168.80.16'/" $KINGBASE_HOME/etc/repmgr.conf # 4. 修改 virtual_ip 值 (新VIP,通常与主库相同) sed -i "s/\(virtual_ip=\)'192\.168\.126\.18\/24'/\1'192.168.80.18\/24'/" $KINGBASE_HOME/etc/repmgr.conf # 5. 修改 trusted_servers 值 (新信任网关,通常与主库相同) sed -i "s/\(trusted_servers=\)'192\.168\.126\.1'/\1'192.168.80.1'/" $KINGBASE_HOME/etc/repmgr.conf
      • 验证从节点修改 (grep):
        conninfo='host=192.168.80.16 user=esrep ...'
        virtual_ip='192.168.80.18/24'
        net_device='ens34'
        net_device_ip='192.168.80.16'
        trusted_servers='192.168.80.1'
        
  3. 数据库 kingbase.auto.conf 配置 (备库):

    • 从节点 (node02): 主要修改 primary_conninfo 指向新的主库物理 IPsynchronous_standby_names 在主库的配置会在重新注册后自动更新,无需手动修改。

    注意: repmgr node rejoin 命令在后续步骤中会处理备库的重新连接,修改此处 primary_conninfo 是冗余的,因为 rejoin 过程会重建复制连接。但为了确保在 rejoin 之前 如果手动启动备库也能正确连接主库,进行此修改是推荐的最佳实践。如果不修改,在 rejoin 成功前手动启动备库可能会失败。

4. 启动数据库并重新注册集群

  1. 启动主库 (node01):

    sys_ctl start -D $KINGBASE_DATA
    • 检查主库状态 (repmgr cluster show):
      ID | Name  | Role    | Status  | Upstream | ... | Connection string
      ---+-------+---------+---------+----------+-----+-------------------
      1  | node1 | primary | running |          | ... | host=192.168.80.15 ... # 注意IP已更新
      
      此时应只看到主库 node1 在运行,状态为 primary,连接字符串中的 IP 已是新 IP。备库 node2 尚未注册。
  2. 在主库注册主节点 (node01):

    repmgr primary register -F

    预期输出示例:

    INFO: connecting to primary database...
    INFO: primary registration complete
    NOTICE: primary node (ID: 1) successfully registered
    
  3. 在备库重新加入节点 (node02):

    1. 启动备库 (可选但推荐): 如果之前没有启动,先启动备库。如果第 3.3 步修改了 primary_conninfo,此时备库应能连接到新 IP 的主库开始追赶日志。如果没修改,启动可能会失败或等待连接。

      sys_ctl start -D $KINGBASE_DATA
    2. 执行 repmgr node rejoin: 此命令告知 repmgr 该节点(node02)希望以备用节点身份重新加入集群。它会连接到当前主库 (-h 指定新主库IP) 获取信息并配置自身。

      repmgr node rejoin -h 192.168.80.15 -U esrep -d esrep

      预期输出示例:

      INFO: connecting to rejoin target node
      INFO: retrieving configuration from rejoin target node
      INFO: rejoin target node is primary (ID: 1)
      INFO: local node is standby (ID: 2)
      INFO: updating node 2 configuration
      INFO: updating node 2 in repmgr primary
      INFO: reloading configuration on rejoin target node
      INFO: starting standby using existing data directory
      INFO: setting node 2's upstream to node 1
      INFO: local node 2 rejoined the cluster
      INFO: STANDBY REJOIN successful
      NOTICE: node 2 rejoined the cluster as standby
      

      此命令成功后,备库 node02 已重新加入集群,其 repmgr.conf 中关于主库的信息(如上游节点)会被更新。

    3. 注册备库 (repmgr standby register): 此步骤将当前运行的备库实例正式注册到 repmgr 的元数据中。

      repmgr standby register -h 192.168.80.15 -U esrep -d esrep -F

      预期输出示例:

      INFO: connecting to primary database...
      INFO: standby registration complete
      NOTICE: standby node "node2" (ID: 2) successfully registered
      
  4. 检查集群状态 (repmgr cluster show):
    在主库或任一节点执行:

    ID | Name  | Role    | Status  | Upstream | Location | Priority | Timeline | LSN_Lag | Connection string
    ---+-------+---------+---------+----------+----------+----------+----------+---------+-------------------
    1  | node1 | primary | running |          | default  | 100      | 1        |         | host=192.168.80.15 ...
    2  | node2 | standby | running | node1    | default  | 100      | 1        | 0 bytes | host=192.168.80.16 ...
    

    关键确认点:

    • 两个节点 Status 均为 running
    • 角色 (Role) 正确:primarystandby
    • 备库的 Upstream 指向主库 (node1)。
    • LSN_Lag 显示为 0 bytes 或很小的值,表示复制正常无延迟。
    • Connection string 中的 IP 地址均已更新为新 IP。
  5. 重启 KES 集群服务并测试切换:

    • 重启集群 (可选,验证服务脚本):
      sys_monitor.sh restart # 使用集群管理脚本重启
      预期输出: 显示主备节点依次正常停止和启动。
    • 测试主备切换 (repmgr standby switchover):
      # 在**当前主库 (node01)** 执行切换命令 repmgr standby switchover
      预期输出示例 (摘要):
      INFO: connecting to local node "node1" (ID: 1)
      INFO: connecting to candidate standby node "node2" (ID: 2)
      INFO: candidate standby node "node2" (ID: 2) is up to date
      INFO: replication lag on candidate standby: 0 seconds
      INFO: checking cluster configuration
      INFO: checking switchover on node "node1" (ID: 1) in progress
      INFO: performing switchover
      INFO: switching current node "node1" to standby
      INFO: promoting candidate standby node "node2" to primary
      INFO: waiting for promotion to complete
      INFO: node "node2" (ID: 2) promoted to primary
      INFO: switching current node "node1" to standby
      INFO: STANDBY SWITCHOVER successful
      NOTICE: node 2 is now primary
      
    • 再次检查集群状态 (repmgr cluster show):
      ID | Name  | Role    | Status  | Upstream | Location | Priority | Timeline | LSN_Lag | Connection string
      ---+-------+---------+---------+----------+----------+----------+----------+---------+-------------------
      2  | node2 | primary | running |          | default  | 100      | 2        |         | host=192.168.80.16 ...
      1  | node1 | standby | running | node2    | default  | 100      | 2        | 0 bytes | host=192.168.80.15 ...
      
      确认点: 角色成功互换 (node2primary, node1standby),状态正常,复制无延迟,IP 正确。Timeline 通常会增加。

四、 总结

  • 操作核心: KES V9 集群 IP 调整需同步修改操作系统网络配置 (/etc/sysconfig/network-scripts, /etc/hosts) 和集群关键配置文件 (repmgr.conf, 备库的 kingbase.auto.conf),并在修改后重启网络服务、数据库,并重新注册集群节点。
  • 关键步骤:
    1. 详细规划新旧 IP、VIP、网关、网卡映射。
    2. 操作前务必停止整个集群。
    3. 备份所有关键配置文件 (repmgr.conf, kingbase.auto.conf, /etc/hosts, 网络配置文件)。
    4. 修改 /etc/hosts 和操作系统网络配置 (IP, 网关等),重启网络。
    5. 修改所有节点的 repmgr.conf (更新 conninfo, net_device, net_device_ip, virtual_ip, trusted_servers)。
    6. 修改备库kingbase.auto.conf (更新 primary_conninfo 指向新主库 IP - 最佳实践)。
    7. 启动主库,在主库执行 repmgr primary register -F
    8. 在备库执行 repmgr node rejoin -h <新主库IP> ... 重新加入集群。
    9. 在备库执行 repmgr standby register -h <新主库IP> ... -F 注册备节点。
    10. 使用 repmgr cluster show 仔细验证集群状态和 IP 信息。
    11. 执行集群重启和主备切换测试,验证高可用功能正常。
  • 风险提示:
    • 操作涉及数据库停机和网络变更,务必在业务低峰期进行,并通知相关方。
    • 修改配置文件时务必仔细核对参数名和 IP 地址,避免拼写错误。利用 sed 命令需注意转义。
    • 强烈建议在测试环境充分验证操作流程后再在生产环境执行。
    • 如果配置了网卡绑定 (bond),主机层面的网络配置变更需要额外小心处理 bond 相关设置。
  • 遗漏: 本文档步骤基于一主一从 KES V9 集群编写,时间仓促更多节点集群场景待以后弥补。
最后修改时间:2025-06-24 10:41:06
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论