1配置
DM 安装时生成一个配置文件 dm_svc.conf,不同的平台所在目录有所不同。
| 1 | 32 位的 DM 安装在 Win32 操作平台下,此文件位于%SystemRoot%/system32目录; |
| 2 | 64 位的 DM 安装在 Win64 操作平台下,此文件位于%SystemRoot%/system32目录; |
| 3 | 32 位的 DM 安装在 Win64 操作平台下,此文件位于%SystemRoot%/SysWOW64目录; |
| 4 | 在 Linux 平台下,此文件位于/etc 目录。 |
dm_svc.conf 文件中常用配置项目说明:
| 参数 | 简述 |
| SERVERNAME | 连接服务名,参数值格式为 IP[:PORT],IP[:PORT],...... |
| TIME_ZONE | 指明客户端的默认时区,设置范围为:-779~840M,如 60 对 应+1:00 时区 |
| LANGUAGE | 当前数据库服务器使用的语言,会影响帮助信息错误和提示信息。支持的选项为:CN(表示中文)和 EN(表示英文)。可以不指定,若不指定,系统会读取操作系统信息获得语言信息,建议有需要才指定。 |
| LOGIN_MODE | 指定优先登录的服务器模式。0:优先连接 Primary 模式的库,Normal 模式次之,最后选择 Stantby 模式;1:只连接主库;2:只连接备库;3:优先连接 Standby 模式 的库,Primary 模式次之,最后选择Normal模式;4:优先连接Normal模式的库,Primary 模式次之,最后选择 Standby 模式。默认值为 0 |
| SWITCH_TIME | 检测到数据库实例故障时,接口在服务器之间切换的次数;超过设置次数没有连接到有效数据库时,断开连接并报错。有效值范围 1~9223372036854775807,默认值为 3。 |
| SWITCH_INTERVAL | 表示在服务器之间切换的时间间隔 ,单位为毫秒,有效值范围 1~9223372036854775807,默认值为 200。 |
| RW_SEPARATE | 指定是否启用读写分离。0 表示不启用读写分离;1 表示启用读写分离,默认值为 0。 |
| RW_PERCENT | 启用读写分离时,读写分离的分发比例,有效值范围 0~100,默认值为 25。 例如,配置一个名为 dw_svc 的连接服务名,使用 dw_svc 连接数据守护中的数据库,即可实现故障自动重连。 |
| EP_SELECTOR | 连接数据库时采用何种模型建立连接。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接 。 |
| AUTO_RECONNECT | 连接发生异常或一些特殊场景下连接处理策略。0:关闭连接;1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2:配合 EP_SELECTOR=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上。 |
| 关于 dm_svc.conf 的详细设置,请参考《 DM8 系统管理员手册》2.1.1.4 dm_svc.conf 章节。 | |
dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。全局配置区在前,服务配置区在后,以“[服务名]”开头,可配置除了服务名外的所有配置项。服务配置区中的配置优先级高于全局配置区。
(1)下面以一个普通环境中 dm_svc.conf 为例:
| # 以#开头的行表示是注释 # 全局配置区 NORMAL=(192.168.0.1:5000,192.168.0.2:5236) Data_Watch=(192.168.0.3:5236,192.168.0.4:4350) TIME_ZONE=(+480) #表示+8:00 时区 LANGUAGE=(cn) #中文 # 服务配置区 # 常规环境,两个没有关系的 IP [NORMAL] LOGIN_MODE=(4) SWITCH_TIMES=(3) SWITCH_INTERVAL=(100) # 服务配置区 # 数据守护环境,一主一备 [Data_Watch] LOGIN_MODE=(2) SWITCH_TIMES=(3) SWITCH_INTERVAL=(100) |
(2)下面以 DSC 场景中 dm_svc.conf 为例
| # 以#开头的行表示是注释 # 全局配置区 DMDSC1=(192.168.1.1:5236,192.168.1.3:5236) DMDSC2=(192.168.1.5:5236,192.168.1.7:5236) TIME_ZONE=(+480) #表示+8:00 时区 LANGUAGE=(cn) #中文 #DMDSC1 服务配置区 #以下配置是每次定向连接 DMDSC1 服务器名的的第一个服务,当服务器故障后,尝试 60 次,间隔 1s 的节奏一直连接第一个服务,若连接不上,在循环下一个服务,连接上之后进行使用。假设 2 号服务 (192.168.1.3)先起来,1 号服务(192.168.1.1)后起来。因为 AUTO_RECONNECT=(1),所以客户端连接在 2 号的当前连接不会切回 1 号服务。 [DMDSC1] SWITCH_TIMES=(60) SWITCH_INTERVAL=(1000) EP_SELECTOR=(1) AUTO_RECONNECT=(1) #DMDSC2 服务配置区 #以下配置是每次定向连接 DMDSC2 服务器名的的第一个服务,当服务器故障后,尝试 60 次,间隔1s 的节奏一直连接第一个服务,若连接不上,在循环下一个服务,连接上之后进行使用。假设 2 号服务(192.168.1.7)先起来,1 号服务(192.168.1.5)后起来。因为 AUTO_RECONNECT=(2),所以客户端连接在 2 号的当前连接会再切回 1 号服务。 [DMDSC2] CLUSTER=(DSC) SWITCH_TIMES=(60) SWITCH_INTERVAL=(1000) EP_SELECTOR=(1) AUTO_RECONNECT=(2) |
2使用
以下在Windows系统上使用java语言测试连接集群服务名
2.1 dm_svc.conf 配置文件
Windows 平台 dm_svc.conf 文件位 %SystemRoot%system32 目录下:
打开文件编辑以下内容:
| TIME_ZONE=(480) LANGUAGE=(cn) #192.168.117.128为主库,192.168.117.129为备库 dw_svc=(192.168.117.128:5233,192.168.117.129:5233) LOGIN_MODE=(0) #0:优先连接 Primary 模式的库,最后选择 Stantby 模式; SWITCH_TIMES=(3) SWITCH_INTERVAL=(100) |
2.2 java测试连接
Java代码:
(1)当dm_svc.conf文件中,LOGIN_MODE=(0)时(优先连接主库,最后选择备库)
Java执行查询tab1表,结果:
(2)当dm_svc.conf文件中的LOGIN_MODE=(1)时(只连接主库)
修改java代码,向tab1表插入一条数据:
成功插入一条数据,返回查询结果:
(3)当dm_svc.conf文件中的LOGIN_MODE=(2)时(只连接备库)
修改java代码,向tab1表插入一条数据:
执行报错:
原因:备库模式下不支持对非临时表或含有lob类型列的表进行增删改操作
2.3 故障切换
测试主备节点故障后,服务配置是否能自动切换数据库,并提供正常服务。
kill掉主库实例进程
查看监视器,备库已切换为主库
将dm_svc.conf文件中的LOGIN_MODE设为(0)
Java 测试数据的添加和查询
成功插入一条数据,返回查询结果:
结论:当发生节点故障时,会自动切换数据库,继续提供正常服务。
达梦学习社区地址:https://eco.dameng.com



