GBase 8a集群862Build43 支持IPV6版本,本文介绍从IPV4更换到IPV6的方法。 与ipv4更换ipv4不同,更换到ipv6,不需要重新计算nodeid。
目录导航
环境
2节点的ipv4集群,版本是8.6.2.43R33, 目标是将ipv4替换成IPv6,地址规则是
10.0.2.106 -> 2001::106
10.0.2.107 -> 2001::107
[gbase@862b43 gcinstall]$ gcadmin
CLUSTER STATE:  ACTIVE
CLUSTER MODE:   NORMAL
=================================================================
|             GBASE COORDINATOR CLUSTER INFORMATION             |
=================================================================
|   NodeName   |     IpAddress     |gcware |gcluster |DataState |
-----------------------------------------------------------------
| coordinator1 |    10.0.2.106     | OPEN  |  OPEN   |    0     |
-----------------------------------------------------------------
| coordinator2 |    10.0.2.107     | OPEN  |  OPEN   |    0     |
-----------------------------------------------------------------
=============================================================
|              GBASE DATA CLUSTER INFORMATION               |
=============================================================
|NodeName |     IpAddress     |gnode |syncserver |DataState |
-------------------------------------------------------------
|  node1  |    10.0.2.106     | OPEN |   OPEN    |    0     |
-------------------------------------------------------------
|  node2  |    10.0.2.107     | OPEN |   OPEN    |    0     |
-------------------------------------------------------------
准备工作
先通过如下操作,将redolog刷新大小为334或者338字节,主要是避免REDOLOG里有ip地址,且该文件内有二进制数据,不方便修改。参考如下的文档。
另外,如果集群有event, 也建议先处理掉,避免FEVENT里有相关内容,同样内部有二进制数据,不方便修改。
同样的,如果有些节点故障不在线可用,先恢复。
先停止集群服务。
在每个节点操作系统用户root下,执行

更改网卡IP
建议先增加ipv6地址,等后面都正常了,再考虑【是否去掉】ipv4地址。
修改集群管理节点corosync服务配置
此处包含多个部分,下面对比IPV4的变动,分段描述。
配置文件 /etc/corosync/corosync.conf
提醒:为避免意外,建议先备份。
totem部分
这部分改动较多,且由于每个节点都不一样,请千万不要从其他节点完全复制了。
增加nodeid参数
如下红色的是新增部分,用于标识节点的ID号,注意每个管理节点的nodeid都是不同的。
[root@862b43 corosync]# cat /etc/corosync/corosync.conf
totem {
    version: 2
    secauth: off
    nodeid:1778515978
    interface {
        member {
此处的nodeid值,建议【保留】ipv4的nodeid样式,对应关系可以参考 /var/llb/gcware/DATASERVER
比如将10.0.2.106改成了2001::106,那么对应的nodeid可以继续使用1778515978。
[root@862b43 gcware_ipv4]# cat /var/lib/gcware_ipv4/DATASERVER
{
  "version":1,
  "epoch":1103,
  "list_entries":2,
  "nodes":[
    {
      "nodeid":1778515978,
      "nodename":"node1",
      "ipaddr":"::ffff:10.0.2.106"
    },
    {
      "nodeid":1795293194,
      "nodename":"node2",
      "ipaddr":"::ffff:10.0.2.107"
    }
  ]
}
参考图

interface部分
除了加粗的IP地址从ipv4改成了ipv6,如下红色部分是对比ipv4增加的,其中的参数值,建议保留ipv4自动计算的nodeid值。 多个节点一定要各自正确对应上。
[root@862b43 corosync]# cat /etc/corosync/corosync.conf
totem {
    version: 2
    secauth: off
    nodeid:1778515978
    interface {
        member {
            nodeid:1778515978
            memberaddr: 2001::106
        }
        member {
            nodeid:1795293194
            memberaddr: 2001::107
        }
        ringnumber: 0
        bindnetaddr: 2001::106
gcware部分
同样在member里,参考前面的,增加nodeid和更换ip地址
gcware {
    persistent_interval: 5
    check_interval: 30
    whole_check_interval_num: 20
    cfg_connect_timeout: 5000
    gcluster_port: 5258
    gnode_port: 5050
    syncserver_port: 5288
    node_ssh_port: 22
    singlecastport: 5678
    check_coordinator_thread_num: 1
    check_dataserver_thread_num: 10
    check_tcp_only: 1
    coordinator {
        member {
            nodeid:1778515978
            memberaddr: 2001::106
        }
        member {
            nodeid:1795293194
            memberaddr: 2001::107
        }
    }
}
完整的结果截图
节点1

节点2

更改数据节点IP
在每个【数据】节点(包括管理和数据混用的数据节点),用操作系统root用户,切换到/var/lib/gcware目录,修改DATASERVER和DATASERVER.BAK(如果有的话)。将其中的所有老IP更改成新IP。
提醒:为避免意外,建议先备份。
如下只给出DATASERVER的修改例子
[root@862b43 gcware]# cat DATASERVER
{
  "version":1,
  "epoch":1103,
  "list_entries":2,
  "nodes":[
    {
      "nodeid":1778515978,
      "nodename":"node1",
      "ipaddr":"2001::106"
    },
    {
      "nodeid":1795293194,
      "nodename":"node2",
      "ipaddr":"2001::107"
    }
  ]
}
启动集群
[root@862b43 gcware_ipv4]#service gcware start
Starting GCWARE (gcwexec):                                 [  OK  ]
Starting GBASED    :                                       [  OK  ]
Starting GCSYNC :                                          [  OK  ]
Starting GCLUSTERD :                                       [  OK  ]
Starting GCRECOVER :                                       [  OK  ]
Starting GCMonit success!
[root@862b43 gcware_ipv4]# gcadmin
CLUSTER STATE:  ACTIVE
CLUSTER MODE:   NORMAL
=========================================================
|         GBASE COORDINATOR CLUSTER INFORMATION         |
=========================================================
|   NodeName   | IpAddress |gcware |gcluster |DataState |
---------------------------------------------------------
| coordinator1 | 2001::106 | OPEN  |  OPEN   |    0     |
---------------------------------------------------------
| coordinator2 | 2001::107 | OPEN  |  OPEN   |    0     |
---------------------------------------------------------
=====================================================
|          GBASE DATA CLUSTER INFORMATION           |
=====================================================
|NodeName | IpAddress |gnode |syncserver |DataState |
-----------------------------------------------------
|  node1  | 2001::106 | OPEN |   OPEN    |    0     |
-----------------------------------------------------
|  node2  | 2001::107 | OPEN |   OPEN    |    0     |
-----------------------------------------------------
[root@862b43 gcware_ipv4]# 
提醒
对于所有配置文件里的nodeid, 如果已经是ipv6的IP,包括V86或者V95,则更换为IPV6 IP时,nodeid不需要更新。 如果更换目标时IPV4,则需要根据新的IPV4地址计算nodeid, 然后修改所有配置文件里和nodeid有关部分。注意,不限于本文涉及到的几个配置文件。