达梦读写分离集群配置应用服务名
1为什么要使用应用服务名
达梦的应用服务名类似oracle集群的vip,当在单个节点实例出现故障时,另外一个实例接管,不会对用户操作有什么影响,让前台用户感觉不到异常,可以想象一个场景,如果应用连接了一个固定的实例的IP,那么相应的应用服务会随着该数据库服务的故障而中断,这就是要使用服务名的原因。达梦通过应用服务名实现故障自动重连,读写分离和均衡负载。
2服务名配置文件(dm_svc.conf)
达梦数据库在不同的平台下安装,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.conf做了修改,需要重启客户端程序,修改的配置才能生效
dm_svc.conf配置示例(读写分离)
# 以#开头的行表示是注释
# 全局配置区
DMRW=(192.168.145.23:5236,192.168.145.25:5236)
TIME_ZONE=(+480) #表示+8:00 时区
LOGIN_ENCRYPT=(0)
DIRECT=(Y)
# 服务配置区
[DMRW]
LOGIN_MODE=(1)#只连主库
SWITCH_TIME=(3) #接口在服务器之间切换的次数
SWITCH_INTERVAL=(10) #服务器之间切换的时间间隔 ,单位为毫秒
RW_SEPARATE=(1) #是否启用读写分离
RW_PERCENT=(0) #读写分离分发比例
关于dm_svc.conf的详细设置,请参考《DM8系统管理员手册》dm_svc.conf章节。
3 配置应用连接串
连接服务名可以在 DM 提供的 JDBC、DPI 等接口中使用,应用连接数据库时指定连接服务名,接口会随机选择 一个 IP 进行连接,如果连接不成功或者服务器状态不正确,则顺序获取下一个 IP 进行连 接,直至连接成功或者遍历了所有 IP。
示例如下:
<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://DMRW </URL>
4读写分离实现原理
实现读写分离集群的基本思路是:利用备库提供只读服务、无法修改数据的特性,优先将所有操作发送到备库执行,一旦备库执行报错,则发送到主库重新执行。通过备库“试错”这么一个步骤,自然地将只读操作分流到备库执行。并且备库“试错”由接口层自动完成,对应用透明。
读写分离集群数据库连接创建流程:
1. 用户发起数据库连接请求。
2. 接口(JDBC、DPI 等)根据服务名配置(在 dm_svc.conf 中进行配置)登录主库。
3. 主库挑选一个有效即时备库的 IP/Port 返回给接口。
4. 接口根据返回的备库 IP 和 Port 信息,向备库发起一个连接请求。
5. 备库返回连接成功信息。
6. 接口响应用户数据库连接创建成功。
5 JDBC连接测试
5.1 测试环境准备
本次进行jdbc测试,其他请参考
https://eco.dameng.com/document/dm/zh-cn/app-dev/
应用开发常见问题请参考
https://eco.dameng.com/document/dm/zh-cn/faq/faq-java.html
两节点达梦数据库集群
数据库服务器A 192.168.145.23 实例名DM2
数据库服务器B 192.168.145.25 实例名DM3
登录主库创建test用户
create user TEST identified by dameng123;
grant DBA to TEST;
使用TEST用户创建测试表
5.2使用主库IP进行数据新增测试
5.3 连接备库ip进行数据新增测试
5.4 使用应用服务名进行数据查询测试
5.5使用应用服务名进行数据新增测试
5.6 主备库故障切换,使用应用名进行测试
登录监视器,将DM2实例切换成主库
可以看到DM2已经切换成主库
切换之后,使用应用服务名正常执行