达梦服务配置文件dm_svc.conf使用

时间:2022-08-10
本文章向大家介绍达梦服务配置文件dm_svc.conf使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.   配置文件说明

dm_svc.conf是客户端连接的服务配置文件,在客户端(jdbc、dpi等)使用服务名进行数据库连接的情况下,需要对dm_svc.conf进行配置,如果已经安装了达梦数据库软件,会默认在安装的服务器目录上生成此配置文件,文件的位置分别位于

在windows平台:

32位的DM安装在Win32操作平台下,此文件位于%SystemRoot%\system32目录;

64位的DM安装在Win64操作平台下,此文件位于%SystemRoot%\system32目录;

32位的DM安装在Win64操作平台下,此文件位于%SystemRoot%\SysWOW64目录;

在Linux平台下,此文件位于/etc目录。

对于未安装dm数据库的情况下,可以手工生成dm_svc.conf文件,此文件可以放在默认的文件路径:

windows:%SystemRoot%\system32(SysWOW64)\dm_svc.conf

linux:/etc/dm_svc.conf

也可以根据不同的场景放置于非默认目录,但是此时的jdbc连接串中需要配置参数dmsvcconf,指定此参数的具体路径。

当然,在配置文件中的参数也可以直接写入在jdbc等的连接字符串中,针对以上三种情况下的jdbc连接串示例如下:

1.     dm_svc.conf位于默认位置:jdbc:dm://dm_rww  --这里的dm_rww是文件中配置的服务名称。

2.     dm_svc.conf位于自定义位置:jdbc:dm://?dmsvcconf=/opt/dm_svc.conf

3.     无dm_svc.conf文件:jdbc:dm://dmconn?dmconn=(192.168.56.13:32141,192.168.56.14:32142,192.168.56.15:32143)&rw_Separate=(1)&rw_Percent(0)&login_mode=(1)  --其他参数可继续添加

此文件中各参数的配置格式:

参数名=(参数值)

此文件的常用参数(摘自达梦系统管理员手册,更多参数意义参考管理员手册):

配置项

缺省值

简述

服务名

连接服务名,参数值格式为ip[:port],ip[:port],......

TIME_ZONE

操作系统当前时区

指明客户端的默认时区,设置范围为:-779~840m,如60对应+1:00时区

LANGUAGE

操作系统语言

当前数据库服务器使用的语言,会影响帮助信息错误和提示信息。支持的选项为:CN(表示中文)和EN(表示英文)。可以不指定,若不指定,系统会读取操作系统信息获得语言信息,建议有需要才指定。

LOGIN_ENCRYPT

1

是否进行通信加密。0:不加密;1:加密

DIRECT

Y

是否使用快速装载。y:使用;n:不使用

LOGIN_MODE

4

指定优先登录的服务器模式。0:优先连接Primary模式的库,Normal模式次之,最后选择Stantby模式;1:只连接主库;2:只连接备库;3:优先连接Standby模式的库,Primary模式次之,最后选择Normal模式;4:优先连接Normal模式的库,Primary模式次之,最后选择Standby模式

SWITCH_TIMES

1

以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围1~9223372036854775807

SWITCH_INTERVAL

200

在服务器之间切换的时间间隔,单位为毫秒,有效值范围1~9223372036854775807

RW_SEPARATE

0

是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点

RW_PERCENT

25

读写分离分发比例,有效值范围0~100

dm_svc.conf文件的配置可以分为两个区域,全局配置区和服务配置区两大部分,全局配置区可以配置所有的配置选项,服务配置区可以配置除服务名外的所有选项,并且服务配置区的优先级高于全局配置区,即如果两个区域都配置了相同的参数,则以服务配置区的参数为准。

全局配置区可以配置多个服务名和IP/PORT对应关系,同时可以配置通用性的参数,如传输加密参数:LOGIN_ENCRYPT=(0),对于个性的参数,如LOGIN_MODE=(1),则配置在服务配置区中(此配置参数在有单实例的服务名下,连接时会出现"没有匹配的可登陆服务器"错误,当然,根据优先级的原则,可以将此配置参数在单实例服务配置区配置为LOGIN_MODE=(3/4),也可以解决连接问题)。

全局配置区有多个服务名且服务需要个性化参数的话,则在服务配置区中,需要配置多个[服务名]开头的服务配置区,如果无个性化参数,则不需要进行服务配置区的配置。

2.   配置文件示例

正确的服务名配置方式示例:

此处只以读写分离和单实例两种数据库架构的情况下进行验证,其他如datawatch或者dsc集群,可以按照DM手册中的配置进行相应的参数填写即可

# 以#开头的行表示是注释

# 全局配置区

IMESDB=(192.168.56.13:32141,192.168.56.14:32142,192.168.56.15:32143)

IMESDB_SIG=(192.168.56.16:5236)

LOGIN_ENCRYPT=(0)

DIRECT=(Y)

TIME_ZONE=(480) #表示+8:00 时区

#其他通用性参数

# 服务配置区

[IMESDB] #读写分离服务配置

LOGIN_MODE=(1) #读写分离集群必须配置为1,否则连接到standby状态的数据库时,会因为standby库为只读模式从而导致出现insert/delete/update操作错误

TIME_ZONE=(480) #表示+8:00 时区

SWITCH_TIME=(3) #在服务器之间切换的次数

SWITCH_INTERVAL=(10) #在服务器之间切换的时间间隔,单位为毫秒

RW_SEPARATE=(1) #启用读写分离,必须配置此参数为1或2,否则所有的insert/delete/update/select操作都在primary上进行,不能启用读写分离机制

RW_PERCENT=(25) #读事务分发到主库的比例

#其他个性化参数

[IMESDB_SIG]

LOGIN_MODE=(3)

#其他个性化参数

3.   配置参数验证

以一个正常状态的单实例和读写分离集群来进行验证,该集群的当前状态为:

从图片可以看出,主节点是192.168.56.14,两个从节点分别是192.168.56.13和192.168.56.15

3.1.  连接串中指定读写分离参数验证

使用jmeter创建并发200个连接,并将读写分离相关参数写到jdbc的连接串中:

或者是:

200并发连接中,所有的insert操作都在主节点上执行,执行select语句时,大部分在standby库,少部分在primary库,后一种配置因为未配置standby节点的IP及端口,在出现primary节点故障的情况下,将会出现连接不到数据库的故障。

配置的连接串主机中,不包含primary节点的话,将会提示故障:

经过以上测试,可以得出结论:

1.        在读写分离的配置下,所有的数据库连接都将连接到primary节点上,再根据语句是增删改还是查询语句,来分配连接到哪些实例。

2.        在读写分离的模式下,连接串的主机列表中,必须有primary节点的数据库,否则将出现数据库服务模式无效的故障。

3.1.  配置文件中读写分离参数验证

3.1.1.   读写分离服务名正确配置验证

此时以读写分离的服务名连接数据库实例,因为login_mode配置为1,所有连接均是primary库,但是在执行不同类型的SQL语句时,执行的实例又不相同,执行insert/update/delete语句时,执行操作的实例为primary库,而执行查询操作时,执行操作的实例为standby库

使用jmeter创建并发200个连接,此时所有的insert语句都是在primary库上执行,执行select语句时,大部分实例为standby库,少部分的primary库,数据执行的结果与预期效果一致。

3.1.2.   读写分离服务名错误配置验证

将服务配置区的LOGIN_MODE修改为模式3,即优先选择standby模式的数据库连接

[IMESDB]

LOGIN_MODE=(3)

验证结果如下

此时因为连接的实例为standby模式,所以执行insert/delete/update操作会因为是只读模式而失败。

将服务配置区的RW_SEPARATE参数注释掉,此时使用服务名进行连接时,会默认启用此参数为0的配置,使用jemter进行连接

经过观察,所以的连接返回都是节点1,不再向节点2进行连接,即读操作也全部在primary角色的实例上进行SQL操作。

3.1.3.   单实例服务名配置正确验证

按照上例"正确的服务名配置方式示例"中的正确连接方式,无论通过服务名,或者是直接ip:port方式连接数据库实例都正常

3.1.4.   单实例服务名配置错误验证

按照以下错误的配置方法,将个性化参数LOGIN_MODE提前

服务连接正常,但是通过具体IP:PORT方式连接时,出现连接异常,如下所示:

此时将全局配置区文件的LOGIN_MODE修改为1,则使用IP:PORT方式或者服务名方式都可以正常连接,这里说明,全局配置区里配置的参数在使用disql连接时生效了。

3.1.5.   分区配置的优先级验证

单实例情况下使用TIME_ZONE参数进行验证,即在全局配置区中配置TIME_ZONE,也在相应的服务配置区中配置此参数,进行时间返回的验证。

此时,虽然全局配置区中的配置为中国所在的东8区,但是服务配置区却配置成西8区,通过dm_svc.conf文件所在的客户端连接到服务端后的查询:

在服务器上使用disql查询,正常的查询结果为:

此配置文件中,虽然在全局配置区中配置了正确的时区参数,但是在服务配置区中也配置了此参数,但是配置成了-480,根据服务配置区优先级高于全局配置区的说法,客户端在进行连接时,读取了配置文件的服务配置区的时区,所以才导致最终查询的结果与实际的时间相关16小时。

4.   总结说明

dm_svc.conf关系到多种客户端连接数据库服务,后续的数据库根据架构不同,需要的配置选项都要随之变化,甚至在不使用服务名进行连接时,全局区的参数也会生效,所以必须对此文件的作用有足够的了解,才能更好的解决数据库服务连接的情况,此文件内容正确的配置方法:

#全局配置区

服务名=(ip:port,ip:port,....)

#其他通用参数,达梦未对参数进行通用和个性化的划分,但是根据常用的参数使用来看,还是有差别的,比如和读写分离开关参数RW_SEPARATE,只在读写分离集群中才需要配置。

#服务配置区

[服务名]

#个性化参数

达梦社区:https://eco.dameng.com

原文地址:https://www.cnblogs.com/ly-nye/p/16573648.html