1. 前言
DM数据守护读写分离集群其实是主备集群的升级版本,在双机热备的基础上把用户写和读的会话事务分别放在主库和备库上执行。写事务会被分发到主库上执行,读事 务则分发到备库上执行。由接口负责读写事务的分发。读写分离集群是基于即时 归档实现的高性能数据库集群,不但提供数据保护、容灾等数据守护基本功能, 还具有读写操作自动分离、负载均衡等特性。
2. 主机实例规划
主机 | IP地址 | 部署服务 |
---|---|---|
DM_RW_SPET_ 01 | 1192.168.150.134(外网) 192.168.10.40(内网) | 主库实例 GRP1_RW_SP_01 |
DM_RW_SPET_ 02 | 192.168.150.135(外网) 192.168.10.50 (内网) | 备库实例 GRP1_RW_SP_02 |
DM_MONNITOR | 192.168.10.30) | 监视器 |
实例 | MAL_PORT | MAL_INSTANCE_PORT | MAL_DW_PORT | MAL_INST_DW_PORT |
---|---|---|---|---|
GRP1_RW_SP_01 | 61141 | 5236 | 52141 | 33141 |
GRP1_RW_SP_02 | 61142 | 5236 | 52142 | 33142 |
3. 初始化实例
3.1 创建数据库实例对象
三台主机上的 DM 数据库安装目录均为/home/dmdba/dmdbms
, 安装 用户为 dmdba,安装用户组为 dinstall 分别在三台主机上初始化三个实例:GRP1_RW_SP_01
、 GRP1_RW_SP_02
、DMDW
,具体步骤如下:
/dminit path=/home/dmdba/dmdbms/data instance_name=GRP1_RW_SP_01 db_name=DMRW port_num=5234 #初始化主库实例
./dminit path=/home/dmdba/dmdbms/data instance_name=GRP1_RW_SP_02 db_name=DMRW port_num=5234 #初始化备库实例
./dminit path=/home/dmdba/dmdbms/data instance_name=DMDW db_name=DMDW port_num=5236 #初始化监视器实例
3.2 注册后台服务
进入DM安装目录的/tool/script/
目录下,使用dm_service_installer.sh
为新初始化的数据库实例注册服务,执行以下指令:
- 注册主库实例GPR1_RWW_01
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/ data/DMRW/dm.ini -p GRP1_RWW_01
- 注册备库库实例GPR1_RWW_01
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/ data/DMRW/dm.ini -p GRP1_RWW_02
在创建服务完成后,可以使用 “systemctl status DmService[服务名]”指令来查 看实例的运行状态,使用“systemctl start/stop DmService[服务名]”指令来启停 实例服务
4.同步数据
执行主库脱机备份,在主库主机中,进入其DM数据库实例安装目录下的 bin 文件夹下,打开 DMRMAN 工具,执行以下指令:
BACKUP DATABASE '/home/dmdba/dmdbms/data/DMRW/dm.ini' FULL BACKUPSET '/home/dmdba/dmdbms/data/BACKUP_FILE_20220820'
将备份集拷贝到备库主机的对应目录下
scp -r /home/dmdba/dmdbms/data/BACKUP_FILE_20220820 dmdba: disntall@192.168.152.135:/home/dmdba/dmdbms/data
备库主机GRP1_RW_SP_02
中的DM 安装目录bin 文件目录
下打开DMRMAN 工 具,执行备份集还原操作前也是需要打开 DmAPService 服务和关闭当前数据库 实例服务。在 DMRMAN 工具中执行如下指令:
restore database `/home/dmdba/dmdbms/data/DMRW/dm.ini` from backupset `/home/dmdba/dmdbms/data/BACKUP_FILE_20220820`
#执行还原操作
recover database `/home/dmdba/dmdbms/data/DMRW/dm.ini` from backupset `/home/dmdba/dmdbms/data/BACKUP_FILE_20220820`
#更新数据库魔数
recover database `/home/dmdba/dmdbms/data/DMRW/dm.ini` update db_magic
5.配置集群
5.1 配置主库dm.ini
进入主库的实例目录/home/dmdba/dmdbms/data/DMRW
中,打开 dm.ini
文件 进行如下配置:
INSTANCE_NAME = GRP1_RW_SP_01
PORT_NUM = 5234 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开MAL系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
5.2 配置 dmarch.ini
在主库GRP1_RWW_01
实例目录/home/dmdba/dmdbms/data/DMRW
下,新建 dmarch.ini
完成归 档配置,配置参数如下:
[ARCHIVE_REALTIME]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = GRP1_RW_SP_02 #备库实例名称
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmdbms/arch #本地归档存放路径
ARCH_FILE_SIZE = 2048 #本地归档单个文件的最大值
ARCH_SPACE_LIMIT = 102400
5.3 配置dmmal.ini
在主库GRP1_RWW_01
实例目录/home/dmdba/dmdbms/data/DMRW
下新建dmmal.ini文件,配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,MAL_HOST 使 用内部网络 IP,MAL_INST_PORT 和dm.ini 中 PORT_NUM 使用相同的端口值,MAL_DW_PORT` 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = GRP1_RW_SP_01 #实例名
MAL_HOST = 192.168.10.40 #MAL 系统内网通信 ip
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口号
MAL_INST_HOST = 192.168.150.134 #实例对外的服务 ip
MAL_INST_PORT =5234 #实例对外的服务端口号
MAL_DW_PORT = 52141 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 tcp 端口
[MAL_INST2]
MAL_INST_NAME =GRP1_RW_SP_02
MAL_HOST = 192.168.10.50
MAL_PORT = 61142
MAL_INST_HOST = 192.168.150.135
MAL_INST_PORT = 5234
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
5.4 配置dmwatcher.ini
主库GPR1_RWW_01
中新建dmwatcher.ini文件并修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,使用自动切换 模式,配置如下:
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/dmdbms/data/DMRW/dm.ini
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
5.5 远程拷贝及修改
在主库实例GRP1_RWW_01
中将以上配置的dmmal.ini 、dmarch.ini 、dmwatcher.ini配置文件远程拷贝到主机DM_RW_SPET_ 02的对应目录下:
scp-r ./dmarch ./dmmal ./dmwatcher ./dm.ini dmdba:disntall@192.168.152.135:/home/d mdba/dmdbms/data
- 修改备库实例文件中dm.ini
INSTANCE_NAME
的参数值为:GRP1_RWW_02 - 修改备库实例中的dmarch.ini
将备库的归档目标配置ARCH_DEST
更改为主库实例 GRP1_RW_SP_01,其余配置 参数同主库一致
5.6 配置监视器
在主机 DM_MONNITOR 中的 DM 数据库实例文件夹/home/dmdba/dmdbms/ data/DMRW
下新建一个 dmmonitor_rww.ini
文件,文件参数配置如下:
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/data/log/rwwlog #日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
MAL_DW_PORT
MON_DW_IP = 192.168.10.40:52141
MON_DW_IP = 192.168.10.50:52142
由于主库和实时备库的守护进程配置为自动切换模式,因此这里选择配置确认监 视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障 时,能够自动通知实时备库接管为新的主库,具有自动故障处理的功能
5.7 修改OGUID
分别在在主备库上以 mount 的方式将数据库实例启动,启动前检查当前数据 库实例是否活动,进入 DM 安装目录的 bin 文件目录中执行如下指令进行前台启动
./dmserver /home/dmdba/dmdbms/data/DMRW/dm.ini mount
启动实例后进入主库的 disql 工具,将主库的 OGUID 跟改为 dmwatcher.ini 文件 中指定的值,并将数据库模式更改 Primary 模式,
- 主库实例GRP1_RWW_01 执行:
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453621);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
alter database primary;
- 备库实例GRP1_RWW_02 执行:
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453621);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
alter database standby
4. 配置对外服务
达梦安装时会生成一个配置文件 dm_svc.conf,Linux 服务器上该文件存在 目录/etc 下面;该文件中包含 DM 各接口及客户端需要配置的一些参数因此在 应用服务器上修改 dm_svc.conf 文件。如果/etc 下没有 dm_svc.conf 就手动创 建一个。 在window 环境下进行 JDBC 连接操作,更改 Windows 操作系统C:\Windows\System32
目录下的 dm_svc.conf 文件如图 4.1 所示,以 管理员身份打开,配置如下:
- LOGIN_MODE 指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模 式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连 接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连 接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式
- RW_SEPARATE 指定是否启用读写分离。0 表示不启用读写分离;1 表示启用读写分离,默 认值为 0。
- RW_PERCENT 启用读写分离时,读写分离的分发比例,有效值范围 0~100,默认值为 25。
此时,应用可以通过
url="jdbc:dm//DM?user=[USERNAME]&password=[PASSWORD];"
的方式连接到书库集群,如下图所示为JDBC连接DM读写分离集群操作方法:
5. 启动集群
在DM安装目录的bin文件目录下执行:
- 启动主库实例守护进程
./dmwatcher /home/dmdba/dmdbms/data/DMDW/dmwatcher.ini
- 启动备库实例守护进程
./dmwatcher /home/dmdba/dmdbms/data/DMRW/dmwatcher.ini
- 在主机DM_MONITORS上启动监视器
./dmmonitor /home/dmdba/dmdbms/data/DMRW/dmmonitor.ini
执行结果:
6. 小结
如上述过程所示,本次成功完成两节点读写分离集群的搭建操作,各数据库 实例、实例守护进程,监视器运行正常,更多技术支持与交流请访问达梦在线服务平台 :[https://eco.dameng.com/]