巧用服务名

客户端要连接到数据库,除了使用某一个具体的“服务器 IP 地址和端口号”,也可以使用数据库服务名。服务名是一个数据库系统中所有对外服务的实例的“IP 地址和端口号”的集合的名称。

连接 DMDSC 集群,建议客户端使用数据库服务名,以实现故障自动切换、只连集群的主控节点或者只连集群的第一个节点等功能。

13.1 配置服务名

连接服务名可以在 DM 提供的 JDBC、DPI 接口中使用。可以通过编辑 dm_svc.conf 文件配置连接服务名。

dm_svc.conf 是一个客户端配置文件,它包含了 DM 各接口和客户端工具所需要配置的一些参数。它必须和接口/客户端工具位于同一台机器上才能生效。

初始 dm_svc.conf 文件在 DM 安装时自动生成。不同平台的生成目录有所不同。

  1. 32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
  2. 64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
  3. 32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
  4. 在 Linux 平台下,此文件位于/etc 目录。

可以通过设置操作系统环境变量 DM_SVC_PATH 来修改 dm_svc.conf 文件路径。

dm_svc.conf 文件包含很多参数,详细请参考《DM8 系统管理员手册》。本节只介绍 DMDSC 相关的常用配置项:

● 服务名

用于连接的服务名,用户通过连接服务名访问数据库。

服务名格式:

服务名=(IP[:PORT],IP[:PORT],......)

IP 为数据库所在的 IP 地址,如果是 IPv6 地址,为了方便区分端口,需要用[]封闭 IP 地址。PORT 为数据库使用的 TCP 连接端口,可选配置,不配置则使用默认的端口。

● SWITCH_TIMES

检测到数据库实例故障时,接口在服务器之间切换的次数;超过设置次数没有连接到有效数据库时,断开连接并报错。有效值范围 1~9223372036854775807,缺省值为 1。

● SWITCH_INTERVAL

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

● LOGIN_DSC_CTRL

服务名连接数据库时是否只选择 DMDSC 控制节点的库。0:否;1:是。缺省值为 0。

● EP_SELECTOR

连接数据库时采用何种模型建立连接。不同的接口取值不同。

在 JDBC 和 DPI 中,该配置项的取值为大于或等于 0 的整数。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;其余大于 0 的整数表示选择列表中第几个节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接,若配置的值超过服务名列表的节点数,则连接第 N 个节点。其中,N=EP_SELECTOR % 服务名列表节点数。

在.NET PROVIDER、NODE.JS、GO 中,该配置项的取值为 0 或 1。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接。

缺省值为 0。

● AUTO_RECONNECT

连接发生异常或一些特殊场景下连接处理策略。0:关闭连接;1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLException,用于通知上层应用进行事务执行失败时的相关处理;2:配合 EP_SELECTOR>=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上;4:保持各节点会话动态均衡,通过后台线程检测节点及会话数变化,并切换连接使之保持均衡。

也可以将 AUTO_RECONNECT 置为上述几个值的组合值,表示同时进行多项配置,如置为 3 表示同时配置 1 和 2。缺省值为 0。

● CHECK_FREQ

JDBC 专用。服务名连接数据库时,循环检测连接是否需要重置的时间间隔。即每间隔设定时间检测连接对象是否发生改变,若连接对象发生改变,JDBC 连接会自动重置到新对象。单位 MS,取值范围 0~2147483647。缺省值为 300000。

13.2 集群的 dm_svc.conf 模板

在集群场景中,一个完整的 dm_svc.conf 包含两大模块:全局配置区和服务配置区。全局配置区在前,可配置 dm_svc.conf 中所有的配置项;服务配置区在后,以“[服务名]”开头,可配置 dm_svc.conf 中除了服务名和 WALLET_LOCATION 外的所有配置项。服务配置区中的配置优先级高于全局配置区。未设置的参数一律使用默认值。

例如:

#  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时区

#DMDSC1 服务配置区
#以下配置是每次定向连接 DMDSC1 服务名的第一个服务(192.168.1.1:5236),当服务器故障后,以间隔1000毫秒的节奏尝试连接第一个服务60次,若连接成功则进行使用,若连接失败则连接下一个服务(192.168.1.3:5236)。假设2号服务先连接成功,由于AUTO_RECONNECT=(1),因此当1号服务可以正常连接后当前连接也不会切换到1号服务。
[DMDSC1]
SWITCH_TIMES=(60)
SWITCH_INTERVAL=(1000)
EP_SELECTOR=(1)
AUTO_RECONNECT=(1)
 
#DMDSC2 服务配置区
#以下配置是每次定向连接 DMDSC2 服务名的第一个服务(192.168.1.5:5236),当服务器故障后,以间隔1000毫秒的节奏尝试连接第一个服务60次,若连接成功则进行使用,若连接失败则连接下一个服务(192.168.1.7:5236)。假设2号服务先连接成功,由于AUTO_RECONNECT=(2),因此当1号服务可以正常连接后当前连接会切换到1号服务。
[DMDSC2]
CLUSTER=(DSC)
SWITCH_TIMES=(60)
SWITCH_INTERVAL=(1000)
EP_SELECTOR=(1)
AUTO_RECONNECT=(2) 

需要说明的是,如果对 dm_svc.conf 的配置项进行了修改,需要重启客户端工具,修改的配置才能生效。另外,如果 dm_svc.conf 配置文件中包含中文,则必须保证该配置文件的编码与客户端编码一致。

13.3 故障自动切换

当用户连接到 DM 数据共享集群连接到集群中的一个实例,用户的所有增删改查操作都是由该实例完成的。但是如果该实例出现故障,那么用户连接会被切换到其他正常实例。而这种切换对用户是透明的,用户的增删改查继续返回正确结果,感觉不到异常。这种功能就是故障自动切换。

实现故障自动切换的前提条件是在使用 DM 数据共享集群的时候,必须配置连接服务名。

本节以 12.1 基于 DMASM 的 DMDSC 成功搭建的数据共享集群体验一下故障自动切换功能。故障自动切换的步骤:

  1. 配置一个名为 dmdsc_svc 的连接服务名,使用 dmdsc_svc 连接 DMDSC 集群中的数据库,接口会随机选择一个 IP 进行连接,如果连接不成功或者服务器状态不正确,则顺序获取下一个 IP 进行连接,直至连接成功或者遍历了所有 IP。

本例子使用 DIsql 作为客户端,因此 dm_svc.conf 位于 DIsql 所在的机器。

dm_svc.conf 配置如下:

#以下配置是每次定向连接 dmdsc_svc服务名的第一个服务器,当服务器故障后,尝试99次,间隔1000毫秒的节奏一直连接第一个服务器;若连接不上,再循环下一个服务器,连接上之后进行使用。
dmdsc_svc=(10.0.2.101:5236,10.0.2.102:5237)
SWITCH_TIMES=(99)
SWITCH_INTERVAL=(1000)
  1. 以 SYSDBA 身份连接到 DMDSC。假设 SYSDBA 密码为 DMdba_123,连接语句如下:
DIsql SYSDBA/DMdba_123@dmdsc_svc

3.确认当前用户已经连接到的节点实例。

SQL> select name from v$instance;
行号    NAME
---------- ------- -------
1     DSC0

用户当前连接到节点 0 上 DSC0 实例。不要退出这个会话(假定为会话 1),第 4 步还是在这个会话中执行。

4.关闭 DSC0 实例,或者将节点 0 所在的这台主机关机。

5.在会话 1 中再次执行这条语句,服务器会返回提示正在切换当前连接。

SQL> select name from v$instance;
[-70065]:连接异常,切换当前连接成功.

6.等待几秒后,切换成功。此时,在会话 1 中再次执行这条语句,可执行成功。可见,会话也已切换到 DSC1 实例,实现了故障自动切换。

SQL> select name from v$instance;
行号    NAME
---------- ------ --------
1     DSC1

13.4 只连集群的主控节点

本节以 12.1 基于 DMASM 的 DMDSC 成功搭建的数据共享集群介绍。

LOGIN_DSC_CTRL=1 表示使用服务名连接数据库时只选择 DMDSC 主控节点(CONTROL NODE)的库。dm_svc.conf 配置如下:

dmdsc_svc=(10.0.2.101:5236,10.0.2.102:5237)
[dmdsc_svc]
LOGIN_DSC_CTRL=(1)

此时退出 DSC1,系统中只剩 DSC2。DSC2 为主控节点。查询如下:

SQL> select EP_NAME,EP_SEQNO,EP_MODE,EP_STATUS from V$DSC_EP_INFO;
行号       EP_NAME EP_SEQNO    EP_MODE      EP_STATUS
---------- ------- ----------- ------------ ---------
1          DSC1   0           Normal Node  ERROR 
2          DSC2   1           Control Node OK

以 SYSDBA 身份连接到 DMDSC。假设 SYSDBA 密码为 DMdba_123,连接语句如下:

DIsql SYSDBA/DMdba_123@dmdsc_svc

发现当前用户已经连接到的控制节点实例。

SQL> select name from v$instance;
行号    NAME
---------- ------- -------
1     DSC2

再次启动 DSC1 之后,DSC1 变成控制节点。发现 DIsql 又自动连接上了 DSC1。DIsql 始终只连接主控节点。

SQL> select name from v$instance;
行号    NAME
---------- ------- -------
1     DSC1

13.5 只连集群的第 N 个节点

此功能 DIsql 工具暂不支持。

本节以 12.1 基于 DMASM 的 DMDSC 成功搭建的数据共享集群介绍。

EP_SELECTOR=N(N>=1)和 AUTO_RECONNECT=2 表示使用服务名连接数据库时会选择“IP 地址和端口号”集合列表中第 N 个节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接,如果第 N 个节点恢复了,当前连接将自动切换到第 N 个节点上。

例 以 EP_SELECTOR=1 为例,dm_svc.conf 配置如下:

dmdsc_svc=(10.0.2.102:5237,10.0.2.101:5236)
[dmdsc_svc]
EP_SELECTOR=(1)
AUTO_RECONNECT=(2)
CHECK_FREQ=(60000)  

使用 MANAGER 通过服务名连接到 DMDSC。10.0.2.102:5237 为 DSC1,10.0.2.102:5236 为 DSC0。

图 13.1 登录界面.png

图13.1 登录界面

使用此功能,MANAGER 工具需配置自动提交功能。窗口-选项-查询分析器:勾选自动提交。

在 MANAGER 界面中执行如下语句,会发现当前用户连接的是第一个节点。

select name from v$instance;
查询结果为: DSC1

当关闭 DSC1 之后,MANAGER 会自动连接到 DSC0。

select name from v$instance;
查询结果为: DSC0

再次启动 DSC1 之后,MANAGER 又自动连回 DSC1。

select name from v$instance;
查询结果为: DSC1

因为数据库故障切换过程和 MANAGER 工具自动重置连接(CHECK_FREQ)均需要一定的时间,因此,只有等待两者都顺利完成,才能看到正确的结果。

微信扫码
分享文档
扫一扫
联系客服