GaussDB-计划内应用无损透明

GaussDB-计划内应用无损透明

GNS(GaussDB Notification Service)组件介绍

为实现GaussDB计划内维护对应用程序的透明性,新增GNS服务。当应用程序调用JDBC接口首次向数据库实例中的任意节点建立连接时,JDBC驱动会与GNS服务建立数据库实例状态订阅链路。当GNS检测到数据库实例状态发生变化,通过订阅链路将状态变化事件发送给JDBC驱动,事件处理线程收到任务后,对受到影响的连接进行管理和迁移。

当数据库运维平台下发计划内维护操作(DN主备倒换、重启数据库实例、重启节点、重启DN)时,若开启计划内ALT选项,OM相关接口将调用gns_ctl命令完成该次操作(而不是cm_ctl);gns_server将通知JDBC客户端数据库实例即将进行变更,JDBC客户端将继续向服务端发送正在运行的事务、而暂存新事务,不再向数据库发送,待正在运行的事务完成后挂起和DN的连接。事务运行结束后,JDBC向GNS发送确认消息,并在维护完成后,JDBC开始恢复与DN的连接。

GNS组件仅用于计划内ALT特性,GNS组件的关键组成如下:
  1. gns_server进程:

    gns_server进程调用CM组件命令,实时获取DN状态变更,并通知所有的已连接JDBC客户端。gns_server资源由CM组件进行管理。cm_agent每间隔1s尝试启动一次gns_server,若五次启动失败后,需要手动启动资源,命令为:cm_ctl start 。间隔和启动次数可用cm_ctl res --edit命令修改,例如:

    cm_ctl res --edit --res_name=GNS --res_attr=check_interval=1,time_out=10,restart_delay=1,restart_period=1,restart_times=5
     

    详情请参见《工具参考》中“统一数据库管理工具 > cm_ctl工具介绍”章节。

  2. gns_ctl工具:

    供OM模块调用,实际执行ALT模式下的计划内维护(当前仅支持DN主备倒换、重启数据库实例、重启节点、重启DN)。

前置配置

GNS组件的配置文件信息如下:

表1 GNS配置文件

配置项

取值范围

描述

gns_listen_address

合法IPv4地址,默认值为127.0.0.1。

当前节点GNS进程的数据面IP地址。

gns_bind_addresses

合法IPv4地址列表,以分号分割,默认值为127.0.0.1。

gns侦听的ip,和DN配置文件中的listen_addresses一致。

gns_port

可用合法端口值,默认值为CMS的端口号+100,若超出65535,则默认为CMS的端口号-100。GNS的数据目录与CM的数据目录同级。

当前节点GNS进程的数据面端口。

g_log_min_level

DEBUG5,DEBUG1,WARNING,ERROR,LOG,FATAL,默认值为WARNING。

日志级别。

log_file_size

1MB~10MB,默认值为2MB。

单个日志文件大小,单位为MB。

all_gns_addresses

合法IPv4地址列表,以分号分割,默认值为127.0.0.1;127.0.0.1;127.0.0.1。

所有GNS进程的管理面IP地址,用于gns_ctl连接。

all_gns_ports

可用合法端口值列表,以分号分割,默认值为25100;25100;25100。

所有GNS进程的管理面端口,用于gns_ctl连接。

connection_timeout

0-5,默认值为5。

连接请求最长时间,单位为秒。

alt_max_time

1~10,默认值为10。

JDBC事务排干的最大时间,单位为秒。

jdbc_max_waiting_time

1~120,默认值为120。

计划内命令执行场景下,JDBC的最大等待时间,单位为秒。

max_io_threads

2或4,默认值为2。

消息收发线程数。

max_work_threads

2或4,默认值为2。

消息处理线程数。

dn_check_interval

100-3000,默认值为100。

查询DN状态时间间隔,单位ms。

ssl

on/off,默认值为on。

是否开启SSL。

ssl_ca_file

linux合法文件路径,默认值为cacert.pem。

CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。

请以实际的CA服务器根证书名称为准。

ssl_cert_file

linux合法文件路径,默认值为server.crt。

指定服务器证书文件(采用国密认证则为签名证书),包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。

请以实际的证书名为准,其相对路径是相对于数据目录的。

ssl_key_file

linux合法文件路径默认值为server.key。

指定服务器私钥文件(采用国密认证则为签名证书私钥),用以对公钥加密的数据进行解密。

请以实际的服务器私钥名称为准,其相对路径是相对于数据目录的。

ssl_crl_file

linux合法文件路径,默认值为空,表示没有吊销列表。

证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。

请以实际的证书吊销列表名称为准。

ssl_ciphers

默认值:ALL,表示允许对端使用产品支持的所有加密算法,但不包含ADH、LOW、EXP、MD5算法。

SSL通讯使用的加密算法。

ssl_cert_notify_time

SSL服务器证书到期前提醒的天数。

请按照需求配置证书过期前提醒天数。

默认值:90

gns_data_path

linux合法文件路径,默认值为CmDataDir/../gns_server。

GNS的数据路径,为CM数据路径同级。

gns_hba_path

linux合法文件路径,默认值为gns_data_path。

GNS的白名单文件路径。

log_dir

linux合法文件路径,默认值为$GAUSSLOG/gns。

GNS的日志文件路径。

  • 可通过gs_guc命令修改上述参数的值,其中gns_listen_address、gns_bind_addresses、gns_port、all_gns_adresses、all_gns_ports、gns_data_path、gns_hba_path、log_dir参数值修改需要重启gns_server后才能生效。详见《工具参考》中“服务端工具 > gs_guc”章节中参数-Z。
  • 由于gns_server为轻量级进程、与客户端交互消息量不大,在连接1024个客户端情况下,1s内处理消息数量在1w以内、为毫秒级处理,故无需配置过多I/O和worker线程。因此为尽量降低影响,CPU核数不大于8时,max_io_threads和max_work_threads的值建议设置为2;若CPU核数大于8时,max_io_threads和max_work_threads的值建议设置为4。但在建连阶段,由于需要到DN鉴权,最多支持100个客户端同时向同一个gns_server发起连接请求,否则可能出现连接超时现象,需要重新尝试连接。

基本使用

使用前请确认数据库实例为可用状态。

本文档使用Benchmark工具模拟业务场景,也可以通过Java程序客户端连接数据库,具体配置方法参见《开发者指南》中“应用程序开发教程 > 基于JDBC开发 > 示例:不同场景下连接数据库配置”章节中“应用无损透明场景”。

  • 前置条件

    数据库实例正常运行、前置安装无问题,benchmark工具或Java进程连接url配置正确。

cm_ctl query -Cv显示GNS状态为Online

[omm@ac001 dn_01_master]$ cm_ctl query -Cv
[  CMServer State   ]

node     instance state
-------------------------
1  ac001 1        Standby
2  ac002 2        Primary
3  ac003 3        Standby

[    ETCD State     ]

node     instance state
-------------------------------
1  ac001 7001     StateFollower
2  ac002 7002     StateLeader
3  ac003 7003     StateFollower


[ Defined Resource State ]

node     res_name instance  state
-----------------------------------
1  ac001 GNS      20001     OnLine
2  ac002 GNS      20002     OnLine
3  ac003 GNS      20003     OnLine

...
 
  1. 使用benchmark工具运行TPCC,连接数据库。
  2. 使用gns_ctl命令进行主备切换,TPCC停止运行,但无报错(gns_ctl工具使用参考《工具参考》中“系统内部调用的工具 > gns_ctl”章节)。

     

    主备切换后TPCC正常恢复运行。

     

  3. 使用gns_ctl命令进行数据库实例重启,TPCC停止运行,但无报错。

     

    数据库实例重启后TPCC正常恢复运行。

     

  4. 使用gns_ctl命令进行重启DN,TPCC停止运行,但无报错。

     

    重启DN后TPCC正常恢复运行。

     

  5. 使用gns_ctl命令进行重启节点,TPCC停止运行,但无报错。

     

    重启节点后TPCC正常恢复运行。

     

 
posted @ 2024-11-18 14:44  jerrywang1983  阅读(17)  评论(0)    收藏  举报