背景
最近巡检一台DM8主备集群,登录备库的时候提示DM [-70019]:没有匹配的可登录服务器。
分析原因
由于在主机上启动了客户端应用连接的参数文件,而且配置文件错误,导致一直登录异常。dm_svc.conf 是使用达梦数据库时非常重要的配置文件,它包含了达梦各接口和客户端工具所需要配置的一些参数。通过它可以实现达梦各种集群的读写分离和均衡负载,且必须和接口/客户端工具位于同一台机器上才能生效。。dm_svc.conf 的工作目录是固定的,不能改变。用户如果需要将其修改并拷贝到其他客户端机器上,也必须位于相同的目录中。 dm_svc.conf 的工作目录就是初始 dm_svc.conf 文件的生成目录。
通过查看日志,发现备库上配置了/etc/dm svc.conf参数。
常用配置项介绍
服务名
用于连接数据库的服务名,参数值格式为:
服务名=(IP[:PORT],IP[:PORT],…)。
TIME_ZONE
指明客户端的默认时区设置范围为:-779~840M,如 60 对应 +1:00 时区,+480 对于东八区,如果不做配置默认是操作系统的时区。
KEYWORDS
该参数可以用于屏蔽数据库关键字,如果数据库关键字在 SQL 语句中以单词的形式存在,无法识别需要加上双引号或者可以通过该参数来屏蔽关键字,建议大小写都写入参数中。
例如:KEYWORDS=(versions,VERSIONS,type,TYPE)。
LOGIN_MODE
指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。
SWITCH_TIMES
表示以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围 1~9223372036854775807,默认值为 1,可以设置至少 3 次用来避免由于网卡的波动,造成数据库连接测频繁切换。
SWITCH_INTERVAL
表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807。与参数 SWITCH_TIMES、EP_SELECTOR 配合使用,EP_SELECTOR 设置为 0,等待 SWITCH_INTERVAL 后会切换尝试连接下一个服务器,EP_SELECTOR 设置为 1,等待 SWITCH_INTERVAL 后会继续尝试连接该服务器,直到 SWITCH_TIMES 次再切换下一个服务器。
EP_SELECTOR
表示连接数据库时采用何种模型建立连接。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接。
AUTO_RECONNECT
表示连接发生异常或一些特殊场景下连接处理策略。0:关闭连接,1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2 配合 EP_SELECTOR=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上,可以根据应用的实际要求设定。
主备集群配置
配置示例:
##以#开头的行表示是注释#
##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
DMHA=(172.16.1.1:5236,172.16.1.2:5236)
##服务配置
[DMHA]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1)
jdbc 连接串:
jdbc:dm://DMHA
解决方案
注释掉LOGIN MODE参数,重新登录即可解决。