Luo Hao

达梦——集群连接

rehoni / 2022-04-05


在之前的博客我们了解了DM 数据库连接的几种方式,如下:

DM7 达梦数据库 disql 工具连接 数据库的三种方式 https://www.cndba.cn/dave/article/3572

  在DMDSC 集群环境里和单实例连接没有区别。但在连接 DM 共享存储集群时,实际上是连接到集群中的一个实例,用户的所有增删改查操作都是由该实例完成的。   同Oracle RAC一样,DMDSC集群在单个节点实例出现故障时,对应的用户连接也会被转移到其他正常实例。而这种转移对用户是透明的,用户的增删改查继续返回正确结果,感觉不到异常。   实现故障自动重连的前提条件是在配置 DM 共享存储集群的时候,必须配置连接服务名。

1 配置服务名(dmsvc.conf)

  配置 DMDSC 集群,一般要求配置连接服务名,以实现故障自动重连。连接服务名可以在 DM 提供的JDBC、DPI 等接口中使用,连接数据库时指定连接服务名,接口会随机选择一个 IP 进行连接,如果连接不成功或者服务器状态不正确,则顺序获取下一个 IP 进行连接,直至连接成功或者遍历了所有 IP。

  连接服务名配置文件 dm_svc.conf在 DM安装时生成,Windows 平台下位于%SystemRoot%/system32 目录,Linux 平台下位于/etc 目录。

连接服务名格式:

SERVERNAME=(IP[:PORT],IP[:PORT],……)

dm_svc.conf 配置文件包含如下配置选项:

1.SERVERNAME:连接服务名,用户通过连接服务名访问数据库。
2.IP:数据库所在的 IP 地址,如果是 IPv6 地址,为了区分端口,需要用[]封闭 IP 地址。
3.PORT:数据库使用的 TCP 连接端口,可选配置,不配置则使用连接上指定的端口。
4.SWITCH_TIME:检测到数据库实例故障时,接口在服务器之间切换的次数;超过设置次数没有连接到有效数据库时,断开连接并报错。有效值范围 1~9223372036854775807,默认值为 3。  
5.SWITCH_INTERVAL:表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围1~9223372036854775807,默认值为 200。

2 测试

2.1 搭建DMDSC 环境

参考:

DM7 达梦 共享存储数据库集群 (6) — 搭建2节点的DMDSC 环境(DMASM) https://www.cndba.cn/dave/article/3700

2.2 配置dm_svc.conf文件

在dm_svc.conf 文件中添加如下内容,其中dmdsc_cndba 是我们的测试服务名:

[dmdba@dm1 etc]$ cat  /etc/dm_svc.conf 
dave=(192.168.20.191:5236)
dmdsc_cndba=(192.168.20.181:5236,192.168.20.182:5236)
SWITCH_TIME=(10000)
SWITCH_INTERVAL=(10)

TIME_ZONE=(480)
LANGUAGE=(en)
[dmdba@dm1 etc]$

2.3 测试故障自动重连

#连接到DSC:
[dmdba@dm1 ~]$ disql SYSDBA/SYSDBA@dmdsc_cndba

Server[192.168.20.182:5236]:mode is normal, state is open
login used time: 14.725(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95

#查看当前的连接节点:
SQL> select name from v$instance;

LINEID     NAME
---------- ----
1          RAC1


#直接kill RAC1实例:
[dave@www.cndba.cn2 ~]# ps -ef|grep ini
root         1     0  0 19:39 ?        00:00:00 /sbin/init
root      2320     1  0 19:41 ?        00:00:00 /usr/bin/perl /usr/libexec/webmin/miniserv.pl /etc/webmin/miniserv.conf
dmdba     2660     1  0 20:07 pts/0    00:00:00 /dm/dmdbms/bin/dmcss DCR_INI=/home/data/dmdcr.ini
dmdba     2720     1  0 20:08 pts/0    00:00:00 /dm/dmdbms/bin/svc_ctl_linux dmasmsvr /home/data/dmdcr.ini
dmdba     2983     1  0 20:14 pts/1    00:00:03 /dm/dmdbms/bin/dmserver /home/data/rac1_config/dm.ini DCR_INI=/home/data/dmdcr.ini -noconsole
root      3765  3742  0 20:21 pts/4    00:00:00 grep ini
[dave@www.cndba.cn2 ~]# kill -9 2983


#还在之前的会话中查询:
#注意这里等待的时间有点长,差不多30秒左右:
SQL> select name from v$instance;
[-70065]:Connection exception, switch the current connection sucessful.
[-70065]:Connection exception, switch the current connection sucessful.

Server[192.168.20.181:5236]:mode is normal, state is open
SQL> select name from v$instance;

LINEID     NAME
---------- ----
1          RAC0

used time: 45.346(ms). Execute id is 3.
SQL>

通过以上测试, 故障自动重连是可以切换的,只是中间的等待时间有点长,dm_svc.conf 参数中设置的SWITCH_INTERVAL=(10)并没有生效。