1 搭建前准备
1.数据库安装路径:/home/dmdba/dmdbms
数据库实例安装路径:/home/dmdba/dmdbms/data/DW_A(DW_B)
2.如果现安数据库,需要根据需求创建和初始化实例,并且启停一次实例。
3.端口规划
Ip | 端口 | 实例名 | |
主机 | 172.16.20.97 | 5236 | DW_A |
备机 | 172.16.20.193 | 5236 | DW_B |
监视器 | 172.16.20.193 |
2 读写分离搭建
2.1 在主库备份到备库还原
在脱机状态 使用dmrman备份主库:
./dmrman ctlstmt="backup database '/home/dmdba/dmdbms/data/DW_A/dm.ini' full to backup_dw_a backupset '/home/dmdba/dmdbms/data/DW_A/backup_dw_a'"
将备份发送到备库
scp -r /home/dmdba/dmdbms/data/DW_A/backup_dw_a/ dmdba@192.168.139.101:/home/dmdba/dmdbms/data/DW_B
脱机状态下在备库上使用dmramn还原、恢复与更新(使用dmdba用户)
还原:./dmrman ctlstmt="restore database '/home/dmdba/dmdbms/data/DW_B/dm.ini' from backupset '/home/dmdba/dmdbms/data/DW_B/backup_dw_a'"
恢复:./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DW_B/dm.ini' from backupset '/home/dmdba/dmdbms/data/DW_B/backup_dw_a'"
更新:./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DW_B/dm.ini' update db_magic"
2.2 配置主库DW_A
2.2.1 dm.ini配置
在 DW_A 机器上配置主库的实例名为 DW_A,dm.ini 参数修改如下:
INSTANCE_NAME=DW_A
ARCH_INI=1 #开启归档
MAL_INI=1 #开启mal通信
ALTER_MODE_STATUS= 0
ENABLE_OFFLINE_TS = 2 #不允许备库离线表空间
2.2.2 dmmal.ini
配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,MAL_HOST 使用内部网络 IP,MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DW_A #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_INST_HOST = 172.16.20.97 #实例的对外服务 IP 地址
MAL_HOST = 172.16.20.97 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口(两台机可以一样)
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 连接的端口(可以一样)
MAL_INST_DW_PORT = 33141 #守护环境下,监听守护进程连接端口(实例和守护进程相同)(两台机可以一样)
[MAL_INST2]
MAL_INST_NAME = DW_B
MAL_HOST = 172.16.20.193
MAL_PORT = 61142
MAL_INST_HOST = 172.16.20.193
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
2.2.3 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/DW_A/dm.ini #配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD =/home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
2.2.4 dmarch.ini:
修改 dmarch.ini,配置本地归档和即时归档。 除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。 当前实例 DW_A 是主库,需要向 DW_B(实时备库)同步数据,因此实时归档的 ARCH_DEST 配置为 DW_A。
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #即时归档类型
ARCH_DEST = DW_B #即时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmdbms/data/DW_A/bak #本地归档文件存放路径
ARCH_FILE_SIZE = 512 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 #单位 Mb,0 表示无限制,范围 1024~4294967294M
2.2.5 以mount启动主库
进入安装得bin目录,输入:
./dmserver /home/dmdba/dmdbms/data/DW_A/dm.ini mount
2.2.6 设置OGUID
新打开一个终端,登录disql,修改OGUID
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
2.2.7 修改数据库模式
启动命令行工具 disql,登录主库修改数据库为 Primary 模式
SQL>alter database primary;
2.3 配置备库DW_B
2.3.1 dm.ini配置
在 DW_B机器上配置主库的实例名为 DW_B,dm.ini 参数修改如下:
INSTANCE_NAME=DW_B
ARCH_INI=1 #开启归档
MAL_INI=1 #开启mal通信
ALTER_MODE_STATUS= 0
ENABLE_OFFLINE_TS = 2 #不允许备库离线表空间
2.3.2 dmmal.ini
配置 MAL 系统,各主备库的 dmmal.ini 配置必须完全一致,MAL_HOST 使用内部网络 IP,MAL_PORT 与 dm.ini 中 PORT_NUM 使用不同的端口值,MAL_DW_PORT 是各实例对应的守护进程之间,以及守护进程和监视器之间的通信端口,配置如下:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DW_A #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_INST_HOST = 172.16.20.97 #实例的对外服务 IP 地址
MAL_HOST = 172.16.20.97 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口(两台机可以一样)
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 连接的端口(可以一样)
MAL_INST_DW_PORT = 33141 #守护环境下,监听守护进程连接端口(实例和守护进程相同)(两台机可以一样)
[MAL_INST2]
MAL_INST_NAME = DW_B
MAL_HOST = 172.16.20.193
MAL_PORT = 61142
MAL_INST_HOST = 172.16.20.193
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
2.3.3 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/DW_B/dm.ini #配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD =/home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
2.3.4 dmarch.ini:
修改 dmarch.ini,配置本地归档和即时归档。 除了本地归档外,其他归档配置项中的 ARCH_DEST 表示实例是 Primary 模式时,需要同步归档数据的目标实例名。 当前实例 DW_A 是主库,需要向 DW_B(实时备库)同步数据,因此实时归档的 ARCH_DEST 配置为 DW_B。
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #即时归档类型
ARCH_DEST = DW_A #即时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmdbms/data/DW_B/bak #本地归档文件存放路径
ARCH_FILE_SIZE = 512 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 #单位 Mb,0 表示无限制,范围 1024~4294967294M
2.3.5 以mount启动主库
进入安装得bin目录,输入:
./dmserver /home/dmdba/dmdbms/data/DW_B/dm.ini mount
2.3.6 设置OGUID
新打开一个终端,登录disql,修改OGUID
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(453331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
2.3.7 修改数据库模式
启动命令行工具 disql,登录主库修改数据库为 Primary 模式
SQL>alter database standby;
2.4 配置监听器
修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和
dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。
MON_DW_Confirm = 1 #确认监视器模式
MON_LOG_PATH = /home/dmdba/dmdbms/data/dw_monitor_log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 172.16.20.97:52141
MON_DW_IP = 172.16.20.193:52142
2.5 注册监视器服务
使用root用户,在安装目录下的/script/root路径下
./dm_service_installer.sh -t dmmonitor -monitor_ini /dmdata/data/dmmonitor/dmmonitor.ini -p DM
3 启动守护进程
启动各个主备库上的守护进程:
./dmwatcher /home/dmdba/dmdbms/data/DW_A(DW_B)/dmwatcher.ini
守护进程启动后,进入 Startup 状态,此时实例都处于 Mount 状态。守护进程开始
广播自身和其监控实例的状态信息,结合自身信息和远程守护进程的广播信息,守护进程将
本地实例 Open,并切换为 Open 状态。
4 启动监视器
启动监视器:
./dmmonitor /dmdata/data/dmmonitor/dmmonitor.ini
5 查看日志
通过查看日志,判断读写分离集群是否搭建成功。
至此,DM8读写分离集群的搭建完成。
推荐使用达梦的云适配中心网站了解更多使用内容:https://eco.dameng.com,或者到云适配中心的社区去提问哦!