南大通用GBase 8a 9.5.3多实例版本的服务状态注册和检测机制

GBase 8a在V8 和 V952版本里,采用连接服务端口的方案检测服务节点是否在线,通过连接IP:服务端口,检测服务是否在线。在V953开始,开始使用服务注册机制。

默认该功能没有开启,依然采用老版本的ssh检测方案,详情请看参考资料。

参考

GBase 8a服务状态主动检测机制介绍

GBase 8a多实例版本9.5.3变动介绍

GBase 8a 多实例cluster_common.cnf配置文件介绍

注意

服务侦听,只能判断服务是否在线,不能判断服务器是否可用。当前版本还是依赖ssh判断服务器是否可用。

服务注册机制

随着集群规模的不断扩大,用于集群管理的成本会越来越高。GBase 8a MPP Cluster 支持 data 计算节点服务状态注册机制,data 计算节点定期主动向 gcware 管理集群中注册本地服务状态。该机制可提高 data 计算节点状态监测 的准确性和时效性,降低少量计算节点异常对集群带来的影响。

Data 节点向 gcware 注册的信息用途包括:

  • Data 节点所属的 vc;
  • 用于 data 节点状态监测的长连接 sessionid 和节点 nodeid;
  • 通过注 册的 sessionid 跟踪 data 节点心跳,心跳中断后 gcware 管理集群设 置该 data 节点状态为异常;
  • 注册全局一致的重点参数取值,如 gbase_compression_str_method、gbase_compression_num_method 和 gbase_segment_size,同一个 VC 内的重点参数不一致时无法启动 data 计算节点的服务。

参数

gnode 配置文件 gbase_8a_gbase.cnf

enable_node_regist

功能

控制是否启用注册机制。

参数取值含义说明

默认为 0 表示不启用; 值为 1 表示启用。

gbase_check_param_str

功能 设置参数一致性检测需要检测的参数。

默认值为空,等同于检测
gbase_segment_size
gbse_compression_str_method
gbase_compression_num_method
三个参数,如需要自定义设置,可以修改

#gbase_check_param_str=
等同于如下的三个参数,建议不写,使用默认值即可
gbase_check_param_str=gbase_segment_size%gbse_compression_str_method%gbase_compression_num_method

gcware 配置文件 gcware.conf

enable_node_regist

功能

控制是否启用注册机制。启用后 gnode 需要向 gcware 注册,gcware 才认为 gnode 上线,反之 gcware 认为 gnode 离线。当 gcware 开启该参数后,所有 vc 下的 gnode 都需要向 gcware 注册。

参数取值含义说明

默认值为 0 不启用; 设置为 1 时启用。

enable_check_param

功能

控制是否启用参数一致性检测机制

参数取值含义说明

默认值为 0 不启用; 设置为 1 时表示启用。

gcluster 配置文件 gbase_8a_gcluster.cnf

enable_node_regist

功能

控制 gcluster 执行 sql 失败返回 lost connection 时,gcluster 是否设置 gnode 节点服务状态为离线。

参数取值含义说明

默认值为 0,会设置 gnode 节点服务状态为离线; 当设置为 1 时,不会设置 gnode 节点服务状态为离线。

注意

默认 gcware 通过注册机制监控 gnode 状态未开启,gnode 状态检测仍 然使用原来的机制: 通过定时检测、执行 gcadmin 和执行 sql 是否成功来检测 gnode 状态

如果需要开启 gnode 注册机制,参数设定上需要注意:gnode、gcware 和 gcluster 都有开启注册机制参数,gnode 注册机制参数打开后才会有 注册信息存在,gcware 的注册机制参数开启和一致性检查才有意义, 如果 gnode 注册机制关闭,gcware 注册机制和一致性检查打开无意义。

gnode 如果开启了一致性检测机制后修改全局一致性参数,需要 vc 内 所有 gnode 停止进程修改。 gcadmin createvc 和 gcadmin distribution 命令也会对 vc 内所有 gnode 进行全局一致性参数检测

gcware 对 gnode 的 session 心跳检测超时时间默认是 election_timeout*20,单位为豪秒(默认2000毫秒*20=40秒),election_timeout 在 gcware.conf 中配置。 心跳超时时间也可以在 gnode 配置文件 cluster_common.conf 的 datanode 模块下 sessiontimeout 设置。这里单位是秒,不能小于 6s。

[root@gbase_rh7_003 config]# cat /opt/gbase/10.0.2.103/gcware/config/gcware.conf
totem {
    version: 2
    secauth: off
    interface {
        member {
            memberaddr: 10.0.2.103
        }
        ringnumber: 0
        bindnetaddr: 10.0.2.103
        ttl: 1
    }
    transport: udpu
    leader_heartbeat:200
    election_timeout:2000
    server_port:6918
    client_port:6919
    max_message_size:1048576
    max_redolog_size:512
    data_dir:/opt/gbase/10.0.2.103/gcware/data/gcware
    log_dir:/opt/gbase/10.0.2.103/gcware/data/gcware
}
logging {
    fileline: off
    to_stderr: no
    to_file: yes
    to_syslog: no
    logfile: /opt/gbase/10.0.2.103/gcware/log/gcware.log
    gcware_system_log: /opt/gbase/10.0.2.103/gcware/log/gcware_system.log
    debug: off
    timestamp: on
    logger {
        ident: AMF
        debug: off
        tags: enter|leave|trace1|trace2|trace3|trace4|trace6
    }
}

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
    check_coordinator_thread_num: 1
    check_dataserver_thread_num: 10
    enable_node_regist: 0
    enable_check_param: 0
    coordinator {
        member {
            memberaddr: 10.0.2.103
        }
    }
}

gnode

[gbase@gbase_rh7_003 gbase]$ cat 10.0.2.104/gnode/config/cluster_common.cnf
{
        "cluster": {
                "uuid":"ee7c302e-9ebe-11eb-a48f-0800278ed928",
                "nodeIPtype":"0",
                "nodes": [
                {
                        "memberaddr":"10.0.2.103"
                }
                ]
        },

        "datanode": {
                "localdatanode":"10.0.2.104",
                "sessiontimeout":20,
                "nodes": [
                {
                        "memberaddr":"10.0.2.104"
                },
                {
                        "memberaddr":"10.0.2.105"
                },
                {
                        "memberaddr":"10.0.2.106"
                }
                ]
        },

        "gcware": {
                "nodes": [
                {
                        "memberaddr":"10.0.2.103"
                }
                ],
                "client_port":"5919"
        }
}

验证

注册机制验证

在没有开启前,gbased服务是不会连接gcware服务的。而开启后,会出现如下的连接。目前看每个实例有2个连接。

[gbase@gbase_rh7_003 gbase]$ lsof -i:5919|grep gbased
gbased     4741 gbase    9u  IPv4 251668      0t0  TCP gbase_rh7_003:42732->gbase_rh7_003:5919 (ESTABLISHED)
gbased     4741 gbase   12u  IPv4 252267      0t0  TCP gbase_rh7_003:42734->gbase_rh7_003:5919 (ESTABLISHED)
gbased     5282 gbase    9u  IPv4 252269      0t0  TCP gbase_rh7_003:42736->gbase_rh7_003:5919 (ESTABLISHED)
gbased     5282 gbase   12u  IPv4 249844      0t0  TCP gbase_rh7_003:42738->gbase_rh7_003:5919 (ESTABLISHED)
gbased     5846 gbase    9u  IPv4 251704      0t0  TCP gbase_rh7_003:42740->gbase_rh7_003:5919 (ESTABLISHED)
gbased     5846 gbase   12u  IPv4 252324      0t0  TCP gbase_rh7_003:42742->gbase_rh7_003:5919 (ESTABLISHED)
[gbase@gbase_rh7_003 gbase]$

参数一致性验证

我们故意将10.0.2.106的参数做修改。如下:

gbase_compression_str_method=5
gbase_compression_num_method=5
===》改成
gbase_compression_str_method=1
gbase_compression_num_method=3

重启服务,复现106节点服务无法正常启动

[gbase@gbase_rh7_003 gbase]$ gcadmin
CLUSTER STATE:         ACTIVE
VIRTUAL CLUSTER MODE:  NORMAL

====================================
| GBASE GCWARE CLUSTER INFORMATION |
====================================
| NodeName |  IpAddress   | gcware |
------------------------------------
| gcware1  |  10.0.2.103  |  OPEN  |
------------------------------------
====================================================
|      GBASE COORDINATOR CLUSTER INFORMATION       |
====================================================
|   NodeName   | IpAddress  | gcluster | DataState |
----------------------------------------------------
| coordinator1 | 10.0.2.103 |   OPEN   |     0     |
----------------------------------------------------
=========================================================================================================
|                                    GBASE DATA CLUSTER INFORMATION                                     |
=========================================================================================================
| NodeName |                IpAddress                 | DistributionId | gnode | syncserver | DataState |
---------------------------------------------------------------------------------------------------------
|  node1   |                10.0.2.104                |       1        | OPEN  |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------
|  node2   |                10.0.2.105                |       1        | OPEN  |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------
|  node3   |                10.0.2.106                |       1        | CLOSE |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------

查看system启动日志,发现了参数检查结果不一致的报错(没有提供已经注册的参数是啥,可以从后面介绍的gcware.log里看到)。服务自动停止。

由于服务会被自动拉起,后续该报错会持续一段时间(默认拉起10次)

210416 23:32:57 [Note] ==================================
210416 23:32:58 [ERROR] gcware check param error, param is [segment_size=2147483648?compression_str_method=5?compression_num_method=5]
210416 23:32:58 [Note] tcmalloc enabled
210416 23:32:58 [Note] aggressive_decommit enabled
210416 23:32:58 [Note] total_thread_cache use default value
210416 23:32:58 [Note]   - '10.0.2.106' resolves to '10.0.2.106';
210416 23:32:58 [Note] Event Scheduler: Loaded 0 events
210416 23:32:58 [Note] Express is ready for connections.
socket: '/opt/gbase/10.0.2.106/gbase_8a_5050.sock' port: 5050 126635
210416 23:32:58 [Note] /opt/gbase/10.0.2.106/gnode/server/bin/gbased: Normal shutdown

查看gcware.log,同样发现了检测参数不同的报错。其中包含了节点的参数以及第一个注册节点的参数。

Apr 16 23:30:58.318046 INFO  [GCWARE] CCS create session 2,67,1,796,21
Apr 16 23:30:58.318085 INFO  [GCWARE] register session with sessionid 796
Apr 16 23:30:58.324970 INFO  [GCWARE] session 796 set session timeout to 230
Apr 16 23:30:58.325318 ERROR [CRM   ] nodeid 1778515978 regist param:segment_size=2147483648?compression_str_method=3?compression_num_method=1 is not consistent with gcware saved param:segment_size=2147483648?compression_str_method=5?compression_num_method=5
Apr 16 23:30:58.325363 INFO  [CRM   ] set module state vcid:1, module type:2, module state:2, num:1, nodeid:1778515978
Apr 16 23:30:59.275333 ERROR [GCWARE] server force to close session with session ID:749
Apr 16 23:30:59.275364 INFO  [GCWARE] CCS destroy session 749
Apr 16 23:30:59.275372 INFO  [LCK   ] lck destroy session:749
Apr 16 23:30:59.275379 INFO  [CRM   ] CrmDestroySession,SessionID is:749!