DM主备集群以及读写分离集群搭建

目录

环境信息

[一 主库配置](#一 主库配置)

1.1安装数据库及初始化实例

1.2备份数据库

1.3配置dmarch.ini文件

1.4配置dm.ini

1.5配置dmmal.ini

1.6配置dmwatcher.ini

1.7调整数据库模式

1.8制作启动脚本

[二 备库配置](#二 备库配置)

[2.1 安装数据库及初始化实例](#2.1 安装数据库及初始化实例)

[2.2 还原主库数据](#2.2 还原主库数据)

[2.3 配置dmarch.ini](#2.3 配置dmarch.ini)

[2.4 配置dm.ini](#2.4 配置dm.ini)

[2.5 配置dmmal.ini](#2.5 配置dmmal.ini)

[2.6 配置dmwatcher.ini](#2.6 配置dmwatcher.ini)

[2.7 调整数据库模式](#2.7 调整数据库模式)

[2.8 制作启动脚本](#2.8 制作启动脚本)

[三 安装仲裁机](#三 安装仲裁机)

[3.1 安装数据库软件](#3.1 安装数据库软件)

[3.2 配置dmmonitor.ini](#3.2 配置dmmonitor.ini)

[3.3 创建监视器联机日志](#3.3 创建监视器联机日志)

[3.4 添加日常监控](#3.4 添加日常监控)

[3.5 制作启动脚本](#3.5 制作启动脚本)

[四 启动主备集群](#四 启动主备集群)

[4.1 启动data watch](#4.1 启动data watch)

[4.2 启动监视器](#4.2 启动监视器)

[4.3 同步数据验证](#4.3 同步数据验证)

[五 读写分离](#五 读写分离)

[5.1 配置修改](#5.1 配置修改)

[5.2 客户端配置](#5.2 客户端配置)

[5.2.1 单机配置](#5.2.1 单机配置)

[5.2.2 集群配置](#5.2.2 集群配置)

环境信息

以下为实验所创建的环境信息

|-------|--------|-----------------|----------|-------------|
| 服务器 | 监视器实例名 | IP地址 | MON_PORT | MON_INST_ID |
| 主机服务器 | MON1 | 192.168.159.128 | 8339 | 1 |
| 备机服务器 | MON2 | 192.168.159.132 | 8340 | 2 |
| 仲裁服务器 | MON3 | 192.168.159.131 | 8341 | 3 |

一 主库配置

1.1 安装数据库及初始化实例

安装及初始化实例省略。

1.2 备份数据库

将主库全量备份到本地。

|-----------------------------------------|
| backup database backupset '/bak/dmbak'; |

将备份的文件传到备库机器上

|--------------------------------------------------|
| scp -rp dmbak/ root@192.168.159.132:/dbbak/dmbak |

1.3 配置dmarch.ini文件

添加以下内容

|-----------------------------------------------------------------------------------------------------|
| ARCH_WAIT_APPLY = 0 ARCHIVE_REALTIME1 ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = DMSTD #实时归档目标实例名 |

1.4 配置dm.ini

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Vi dm.ini #将如下参数加入文件结尾处新增或者找到对应参数修改对应的数值 INSTANCE_NAME = ZHFT DW_INACTIVE_INTERVAL=60 ALTER_MODE_STATUS=0 ENABLE_OFFLINE_TS=2 MAL_INI=1 RLOG_SEND_APPLY_MON=64 DW_ARCH_SPACE_CHECK=1 DW_ARCH_HANG_CHECK=1 |

1.5 配置 dmmal .ini

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| vi /dm8/data/zhft/dmmal.ini #添加以下内容,修改对应的instance_name,对应的IP以及端口号。 MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 MAL_INST1 MAL_INST_NAME = ZHFT #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.159.128 #根据实际IP 地址配置 MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.159.128 #根据实际IP 地址配置 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口 MAL_INST2 MAL_INST_NAME = DMSTD MAL_HOST = 192.168.159.132 #根据实际IP 地址配置 MAL_PORT = 61142 MAL_INST_HOST =192.168.159.132 #根据实际IP 地址配置 MAL_INST_PORT = 5236 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142 |

1.6 配置 dmwatcher .ini

注意修改配置文件中的信息为正确的信息。

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| dmdba@zhft zhft$ more dmwatcher.ini GRP1 DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_OGUID = 453331 #守护系统唯一 OGUID 值 INST_INI = /dm8/data/zhft/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD =/etc/rc.d/init.d/DmServiceZHFT start #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭 DW_RECONNECT = 2 DW_FAILOVER_FORCE = 1 INST_SERVICE_IP_CHECK = 1 |

1.7 调整数据库模式

|----------------------------------------------------------------------------------------|
| 关闭数据库 ./dmserverd stop ./dmserver dm.ini mount 等看到SYSTEM IS READY,重新打开一个会话窗口,这个不要关闭!!! |

在新开的窗口上做以下操作

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL> sp_set_oguid(453331); SQL> alter database primary; SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); SQL>exit |

回到窗口1,CTRL+C或者exit退出窗口。

1.8 制作启动脚本

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| dmdba@zhft bin$cd /home/dmdba/dm/dmdbms/bin cp ./service_template/DmWatcherService ./dmwatcherd vi dmwatcherd 修改INI_PATH=%INI_PATH%为当前的路径 chmod +x dmwatcherd |

二 备库配置

2.1 安装数据库及初始化实例

安装及初始化过程省略

2.2 还原主库数据

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| dmrman restore database '/home/dmdba/dm/dmdbms/bin/dm.ini' from backupset '/dbbak/dmbak/'; recover database '/home/dmdba/dm/dmdbms/bin/dm.ini' from backupset '/dbbak/dmbak/'; recover database '/home/dmdba/dm/dmdbms/bin/dm.ini' update db_magic; |

2.3 配置 dmarch.ini

|----------------------------------------------------------------------------------------------------------------------------------------------|
| vi /dbdata/dmdata/DMSTD/dmarch.ini 添加以下内容 ARCH_WAIT_APPLY = 0 ARCHIVE_REALTIME1 ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = ZHFT #实时归档目标实例名 |

2.4 配置 dm.ini

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| vi dm.ini #将如下参数加入文件结尾处新增或者找到对应参数修改对应的数值 INSTANCE_NAME = DMSTD DW_INACTIVE_INTERVAL=60 ALTER_MODE_STATUS=0 ENABLE_OFFLINE_TS=2 MAL_INI=1 RLOG_SEND_APPLY_MON=64 DW_ARCH_SPACE_CHECK=1 DW_ARCH_HANG_CHECK=1 |

2.5 配置 dmmal.ini

添加以下信息,按照真实的信息修改。

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| dmdba@zhftstandby DMSTD$ more dmmal.ini MAL_CHECK_INTERVAL = 5 #MAL链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 MAL_INST1 MAL_INST_NAME = ZHFT #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.159.128 #根据实际IP 地址配置 MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.159.128 #根据实际IP 地址配置 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例本地的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口 MAL_INST2 MAL_INST_NAME = DMSTD MAL_HOST = 192.168.159.132 #根据实际IP 地址配置 MAL_PORT = 61142 MAL_INST_HOST = 192.168.159.132 #根据实际IP 地址配置 MAL_INST_PORT = 5236 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142 |

2.6 配置 dmwatcher.ini

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| dmdba@zhftstandby DMSTD$ more dmwatcher.ini GRP1 DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_OGUID = 453331 #守护系统唯一 OGUID 值 INST_INI = /home/dmdba/dm/dmdbms/bin/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD =/etc/rc.d/init.d/dmserverd start #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭 DW_RECONNECT = 2 DW_FAILOVER_FORCE = 1 INST_SERVICE_IP_CHECK = 1 |

2.7 调整数据库模式

|----------------------------------------------------------------------------------------|
| 关闭数据库 ./dmserverd stop ./dmserver dm.ini mount 等看到SYSTEM IS READY,重新打开一个会话窗口,这个不要关闭!!! |

在新开的窗口上做以下操作

|------------------------------------------------------------------------------------------------------------------------------------------------|
| SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); sp_set_oguid(453331); alter database standby; SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); exit |

回到窗口1,CTRL+C或者exit退出窗口。

2.8 制作启动脚本

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| cd /home/dmdba/dm/dmdbms/bin cp ./service_template/DmWatcherService ./dmwatcherd vi dmwatcherd 修改INI_PATH=%INI_PATH%为当前的路径 chmod +x dmwatcherd |

三 安装仲裁机

3.1 安装 数据库软件

可以选择重新安装,也可以将已有的dmdbms目录拷贝过来,此处省略。

3.2 配置 dmmonitor.ini

在bin目录下添加以下内容,每个节点都需要添加,并且需要调整对应的IP以及MON_ID 、MON_INST_ID、MON_NAME为各个节点对应的。

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| dmdba@localhost bin$ more dmmonitor.ini MON_DW_CONFIRM = 1 #确认监视器模式 MON_LOG_PATH = /home/dmdba/dm/dmdbms/log #监视器日志文件存放路径 MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间 MON_INST_NUM = 3 #实例总个数 MON_HB_INTERVAL = 60 #通信心跳校验间隔 MON_BRO_INTERVAL = 100 #raft 协议中实例通信心跳间隔 MON_VOTE_INTERVAL = 100 #raft 协议中基础投票间隔 MON_ID = 3 #当前监视器在监视器系统中的 ID MON_MID = 45614 #当前监视器系统的唯一标识 MON_NAME = MON3 #监视器名 GRP1 MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值 #以下配置为监视器到组 GRP1 的守护进程的连接信息,以"IP:PORT"的形式配置 #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 192.168.159.128:52141 MON_DW_IP = 192.168.159.132:52142 MON1 #监视器实例信息 MON_HOST = 192.168.159.128 #MON1 监视器所在 IP MON_PORT = 8339 #MON1 监视器监听端口 MON_INST_ID = 1 #监视器实例在监视器系统中的 ID MON2 MON_HOST = 192.168.159.132 #MON2 监视器所在 IP MON_PORT = 8340 #MON2 监视器监听端口 MON_INST_ID = 2 #监视器实例在监视器系统中的 ID MON3 MON_HOST = 192.168.159.131 #MON3 监视器所在 IP MON_PORT = 8341 #MON3 监视器监听端口 MON_INST_ID = 3 #监视器实例在监视器系统中的 ID |

3.3 创建 监视器联机日志

每个节点都需要执行。目录需要调整为对应的目录。

|------------------------------------------------------------------------------------------------------|
| ./dmmonitor raft_file_path=/home/dmdba/dm/dmdbms/log raft_file_size=1024 mon_magic=100 mon_name=MON1 |

3.4 添加 日常监控

在仲裁服务器上添加一个普通监视器用作日常监控运维

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| dmdba@localhost bin$ more dmmonitor_0.ini MON_DW_CONFIRM = 0 #非确认监视器模式 MON_LOG_PATH = /home/dmdba/dm/dmdbms/log #监视器日志文件存放路径 MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间 GRP1 MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值 #以下配置为监视器到组 GRP1 的守护进程的连接信息,以"IP:PORT"的形式配置 #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 192.168.159.128:52141 MON_DW_IP = 192.168.159.132:52142 |

3.5 制作 启动脚本

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| cd /home/dmdba/dm/dmdbms/bin cp ./service_template/DmMonitorService ./dmmonitord vi dmmonitord 修改INI_PATH=/home/dmdba/dm/dmdbms/bin/dmmonitor.in chmod +x dmonitord |

四 启动主备集群

4.1 启动 data watch

在主备上都上开启服务

|--------------------|
| ./dmwatcherd start |

4.2 启动监视器

监视服务器上启动

|-----------------------------------|
| dmdba@ bin$./dmmonitord start |

监视器查看集群状态

|-----------------------------|
| ./dmmonitor dmmonitor_0.ini |

show 查看集群的实例状态

4.3 同步 数据验证

主库插入数据

登录备库查看是否同步过来

查看延迟情况

五 读写分离

5.1 配置修改

1、dmarch.ini

与实时同步的区别在于dmarch.ini配置文件中ARCH_TYPE参数可以配置REALTIME(实时归档类型)也可以配置为Timely(及时归档类型)。

2、dm_svc.conf

|------------------------------------------------------------------------|
| 开启读写分离 RW_SEPARATE = 1 可选:主库承担的读请求比例(0-100),其余读请求分发至备库 RW_PERCENT = 30 |

3、ARCH_WAIT_APPLY

• 实时主备架构:所有读写请求均发往主库,业务无需关心主备间的数据同步状态,主库自身的事务特性天然保障了数据一致性,因此基本不需要考虑主备事务一致性问题。

• 读写分离集群:读请求被驱动层自动分发到备库,而备库通过重演Redo日志与主库保持同步可能存在延迟,这就带来了"写后读"不一致的风险------用户刚提交的数据可能因备库尚未同步而查询不到。

因此,业务方必须根据自身场景调整ARCH_WAIT_APPLY参数:

|-----|-------------------|-----------------------------|--------------------|
| 参数值 | 适用场景 | 行为说明 | 代价 |
| 1 | 需要查询备机最新数据的强一致性业务 | 主库等待备库重演完成后再响应提交,彻底消除写后读不一致 | 性能衰减 |
| 0 | 可容忍备库短暂延迟的业务 | 主库不等待备库重演即响应提交 | 备库读可能读到旧数据,换取更高吞吐量 |

5.2 客户端配置

5.2.1 单机配置

配置示例

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| TIME_ZONE=(480) LANGUAGE=(CN) HSDM8=(192.168.159.128:5236) HSDM8 LOGIN_MODE=(1) RW_SEPARATE=(1) RW_PERCENT=(30) SWITCH_TIMES=(60) SWITCH_INTERVAL=(1000) #LOGIN_MODE 指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。 #RW_SEPARATE 表示是否启用读写分离。0:不启用;1:启用;2:启用,备库由客户端进行选择,且只会选择服务名中配置的节点。 #RW_PERCENT 表示读写分离分发比例,有效值范围 0~100,主库占所有事物数的比例。可以根据主备库的实际压力来设定。 |

5.2.2 集群配置

配置示例

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| TIME_ZONE=(480) LANGUAGE=(CN) HSDM8=(192.168.159.128:5236,192.168.159.131:5236) HSDM8 LOGIN_MODE=(1) RW_SEPARATE=(1) RW_PERCENT=(30) SWITCH_TIMES=(60) SWITCH_INTERVAL=(1000) |

jdbc 连接串

|-----------------|
| jdbc:dm://HSDM8 |

更多

达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

相关推荐
倔强的石头1061 小时前
【Linux指南】动静态库系列(九):动态库如何进入进程地址空间:从磁盘 .so 到共享内存映射
java·linux·服务器
吴声子夜歌1 小时前
HTML——结构化微数据语言简介
前端·数据库·html
脚踏实地,坚持不懈!1 小时前
Linux 内核源码解析:从 secondary_startup_64 到 pick_eevdf 的完整调用栈分析
android·linux·arm开发
xbzb1 小时前
Linux iSCSI 存储部署与 CHAP 认证完全指南
linux·服务器·iscsi·chap·共享硬盘
\光辉岁月/1 小时前
7.mybatisplus学习-条件构造器、插件、通用枚举、多数据源环境、MybatisX
数据库·oracle
承渊政道2 小时前
云电脑连接异地MySQL:星空组网配置、端口验证与登录排障
数据库·mysql·电脑·星空组网
IT大白鼠2 小时前
彭大帅的AI运维助手——自然语言管理 Linux 集群与网络设备——第 5 篇 · 多模态与虚拟化AI 能「看」图:多模态与虚拟化管理
linux·运维·人工智能
yexianglunbai2 小时前
Redis 缓存详解:从原理到实战
数据库·redis·缓存
微信开发api2 小时前
基于WTAPI构建社群运营平台:自动拉群与会话承接链路设计
java·大数据·网络·数据库·微信·自动化