GBase 8a在V8 和 V952版本里,采用连接服务端口的方案检测服务节点是否在线,通过连接IP:服务端口,检测服务是否在线。在V953开始,开始使用服务注册机制。
默认该功能没有开启,依然采用老版本的ssh检测方案,详情请看参考资料。
目录导航
参考
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!