本篇文章介绍用虚拟机搭建达梦读写分离集群(一个主库和两个即时备库)
1,操作环境
虚拟机软件:VMware Workstation Pro
操作系统:centos7
数据库版本:DM8
2,安装前规划
IP规划:
主机名 | 服务ip | 心跳ip | 数据库名 | 实例名 | 备注 |
dm01 | 192.168.230.51 | 192.168.230.51 | dmdb | RW1 | 主库 |
dm02 | 192.168.230.52 | 192.168.230.52 | dmdb | RW2 | 备库 |
dm03 | 192.168.230.53 | 192.168.230.53 | dmdb | RW3 | 备库 |
dm04 | 192.168.230.54 | 监视器 |
端口规划:
实例名 | 实例端口 | MAL 系统监听 TCP 连接的端口 | 实例本地的守护进程监听 TCP 连接的端口 | 实例监听守护进程 TCP 连接的端口 |
RW1 | 5236 | 7336 | 7436 | 7536 |
RW2 | 5236 | 7336 | 7436 | 7536 |
RW3 | 5236 | 7336 | 7436 | 7536 |
目录规划:
数据库软件安装目录 | /home/dmdba/dmdbms |
实例安装目录 | /dmdata/ |
归档日志存放目录 | /dmdata/dmarch/ |
备份文件存放目录 | /dmdata/dmbak/ |
3,安装数据库软件
在4台虚拟机上安装好达梦数据库软件(具体可参考前面的单机部署安装),此步骤可暂不初始化实例。
4,读写分离集群搭建
(1)在主库跟备库上初始化实例
使用dmdba用户,进入/home/dmdba/dmdbms/bin目录下执行如下命令,完成实例的初始化
./dminit path=/dmdata db_name=dmdb
(2)准备备库数据
为了保证主库与备库的数据完全一致,搭建时,将主库进行全库备份,然后将主库的全库备份还原到备库。备份前需开启归档,操作如下:
1)配置 dm.ini,打开 ARCH_INI 参数
使用dmdba用户,执行如下命令:
vim /dmdata/dmdb/dm.ini
修改如下内容:
ARCH_INI = 1 #打开归档配置
2)配置 dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 20480 #单位 Mb,0 表示无限制,范围 1024~2147483647M
开启归档后,使用dmrman工具进行备份和还原操作。
1)在主库进行全库备份
使用dmdba用户,进入/home/dmdba/dmdbms/bin目录下,执行如下命令:
./dmrman
备份全库:
backup database '/dmdata/dmdb/dm.ini' backupset '/home/dmdba/bakfull';
2)还原备库
将备份的文件/home/dmdba/bakfull拷贝到两台备库服务器上。
使用dmdba用户,进入/home/dmdba/dmdbms/bin目录下,执行如下命令:
./dmrman
还原数据库:
restore database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';
恢复数据库:
recover database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';
recover database '/dmdata/dmdb/dm.ini' update db_magic;
(3)配置dm.ini
使用dmdba用户,进入/dmdata/dmdb/目录下,修改dm.ini配置文件
vim /dmdata/dmdb/dm.ini
dm01主库修改如下内容:
INSTANCE_NAME =RW1
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
dm02备库修改如下内容:
INSTANCE_NAME =RW2
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
dm03备库修改如下内容:
INSTANCE_NAME =RW3
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
(4)配置dmmal.ini
使用dmdba用户,进入/dmdata/dmdb/目录下,执行如下命令:
vim /dmdata/dmdb/dmmal.ini
主库跟两个备库均需添加如下内容:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME =RW1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.230.51 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 7336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.230.51 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 7436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 7536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME =RW2
MAL_HOST = 192.168.230.52
MAL_PORT = 7336
MAL_INST_HOST = 192.168.230.52
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST3]
MAL_INST_NAME =RW3
MAL_HOST = 192.168.230.53
MAL_PORT = 7336
MAL_INST_HOST = 192.168.230.53
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
(5)配置dmarch.ini
使用dmdba用户,进入/dmdata/dmdb/目录下,执行如下命令:
vim /dmdata/dmdb/dmarch.ini
dm01主库需添加的内容:
[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = RW2 #即时归档目标实例名
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = RW3 #即时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 20480 #单位 Mb,0 表示无限制,范围 1024~2147483647M
dm02备库需添加的内容:
[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = RW1 #即时归档目标实例名
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = RW3 #即时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST =/dmdata/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 20480 #单位 Mb,0 表示无限制,范围 1024~2147483647M
dm03备库需添加的内容:
[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = RW1 #即时归档目标实例名
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = RW2 #即时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 20480 #单位 Mb,0 表示无限制,范围 1024~2147483647M
(6)配置dmwatcher.ini
使用dmdba用户,进入/dmdata/dmdb/目录下,执行如下命令:
vim /dmdata/dmdb/dmwatcher.ini
主库与备库均需添加如下内容:
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453332#守护系统唯一 OGUID 值
INST_INI = /dmdata/dmdb/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
(7)启动主库,设置 OGUID,修改数据库模式
以 Mount 方式启动主库
使用dmdba用户,进入/home/dmdba/dmdbms/bin目录下,执行如下命令:
./dmserver /dmdata/dmdb/dm.ini mount
重新打开一个命令窗口,使用dmdba用户,进入/home/dmdba/dmdbms/bin目录下,执行如下命令:
./disql SYSDBA/SYSDBA
使用disql工具,设置主库OGUID 值
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453332);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
设置数据库为 Primary 模式
SQL>alter database primary;
(8)启动备库,设置 OGUID,修改数据库模式
以 Mount 方式启动备库
使用dmdba用户,进入/home/dmdba/dmdbms/bin目录下,执行如下命令:
./dmserver /dmdata/dmdb/dm.ini mount
重新打开一个命令窗口,使用dmdba用户,进入/home/dmdba/dmdbms/bin目录下,执行如下命令:
./disql SYSDBA/SYSDBA
使用disql工具,设置备库OGUID 值
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453332);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
设置数据库为Standby模式
SQL>alter database standby;
(9)配置确认监视器
在监视器服务器上配置确认监视器,使用dmdba用户,进入/home/dmdba/dmdbms/目录下,执行如下命令:
vim /home/dmdba/dmdbms/dmmonitor.ini
添加如下内容:
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32#每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 1024 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453332 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.230.51:7436
MON_DW_IP = 192.168.230.52:7436
MON_DW_IP = 192.168.230.53:7436
(10)启动读写分离集群
1)启动守护进程(先启动主库,再启动备库)
使用dmdba用户,进入/home/dmdba/dmdbms/bin目录下,执行如下命令:
./dmwatcher /dmdata/dmdb/dmwatcher.ini
2)启动确认监视器(在监视器服务器上启动)
使用dmdba用户,进入/home/dmdba/dmdbms/bin目录下,执行如下命令:
./dmmonitor /home/dmdba/dmdbms/dmmonitor.ini
(11)JDBC 接口连接说明
JDBC 连接串中可设置以下连接属性:
rwSeparate 是否使用读写分离系统,缺省为 0;取值(0 不使用,1 使用)。
rwPercent 分发到主库的事务占主备库总事务的百分比,有效值 0~100,缺省值25。
<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://192.168.0.206:5236?rwSeparate=1&rwPercent=10</URL>
达梦社区:https://eco.dameng.com