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_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工具介绍”章节。
- gns_ctl工具:
前置配置
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开发 > 示例:不同场景下连接数据库配置”章节中“应用无损透明场景”。
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 ...
- 使用benchmark工具运行TPCC,连接数据库。
- 使用gns_ctl命令进行主备切换,TPCC停止运行,但无报错(gns_ctl工具使用参考《工具参考》中“系统内部调用的工具 > gns_ctl”章节)。
![]()
主备切换后TPCC正常恢复运行。
![]()
- 使用gns_ctl命令进行数据库实例重启,TPCC停止运行,但无报错。
![]()
数据库实例重启后TPCC正常恢复运行。
![]()
- 使用gns_ctl命令进行重启DN,TPCC停止运行,但无报错。
![]()
重启DN后TPCC正常恢复运行。
![]()
- 使用gns_ctl命令进行重启节点,TPCC停止运行,但无报错。
![]()
重启节点后TPCC正常恢复运行。
![]()









浙公网安备 33010602011771号