南大通用GBase 8a集群862Build43从IPV4更换到 IPV6的方法

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地址,且该文件内有二进制数据,不方便修改。参考如下的文档。

GBase 8a从V8升级到V9的REDOLOG刷新处理

另外,如果集群有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有关部分。注意,不限于本文涉及到的几个配置文件。

GBase 8a集群根据IP(ipv4)计算nodeid方法