DM8读写分离集群搭建超详细

前期规划

环境说明

IP规划

主机ip
DM-Z192.168.230.110,10.10.10.20
DM-B192.168.230.111,10.10.10.21
DM-B1192.168.230.112,10.10.10.22
DM-J10.10.10.23

端口规划

在这里插入图片描述

安装规划

在这里插入图片描述

实现原理

实现读写分离集群的基本思路是:利用备库提供只读服务、无法修改数据的特性,优先
将所有操作发送到备库执行,一旦备库执行报错,则发送到主库重新执行。通过备库“试错”
这么一个步骤,自然地将只读操作分流到备库执行。并且,备库“试错”由接口层自动完成,
对应用透明

读写分离集群数据库连接创建流程

  1. 用户发起数据库连接请求。
  2. 接口(JDBC、DPI 等)根据服务名配置(在 dm_svc.conf 中进行配置)登录主库。
  3. 主库挑选一个有效即时备库的 IP/Port 返回给接口。
  4. 接口根据返回的备库 IP 和 Port 信息,向备库发起一个连接请求。
  5. 备库返回连接成功信息。
  6. 接口响应用户数据库连接创建成功。
    接口在备库上创建的连接是读写分离集群自动创建的;对用户而言,就是在主库上创建
    了一个数据库连接。下图以配置了两个备库的读写集群为例,说明了读写分离集群的连接创
    建流程

读写分离集群语句分发流程

  1. 接口收到用户的请求。
  2. 接口优先将 SQL 发送到备库执行。
  3. 备库执行并返回执行结果。如果接口收到的是备库执行成功消息,则转到第 6 步,
    如果接口收到的是备库执行失败消息,则转到第 4 步。
  4. 重新将执行失败的 SQL 发送到主库执行。只要第 3 步中的 SQL 在备库执行失败,
    则同一个事务后续的所有操作(包括只读操作)都会直接发送到主库执行。
  5. 主库执行并返回执行结果给接口。一旦主库上执行的写事务提交,则下次继续从第
    1 步开始执行。
  6. 接口响应用户并将执行结果返回给用户。

配置文件说明

dm.ini文件

参数名备注
INSTANCE_NAME数据库实例名(长度不超过 16 个字符),与 dmmal.ini 中的 MAL_INST_NAME 对 应。配置数据守护系统时,应该保持INSTANCE_NAME 是全局唯一的。
PORT_NUM服务器监听通讯端口号,此参数配置应与dmmal.ini中的MAL_INST_PORT对应
MAL_INIMAL 系统配置开关,0 表示不启用 MAL 系统,1 表示启用 MAL系统。
DW_INACTIVE_INTERVAL服务器认定守护进程未启动的时间,有效值范围(0~1800)位为 秒,默认 60秒。
ALTER_MODE_STATUS是否允许手工修改数据库的模式和状态以及OGUID,1表示允许,0 表示不允许
ARCH_INIRedo 日志归档配置开关,0 表示不启动 Redo 日志归档,1 表示启用 Redo 日志归档
ENABLE_OFFLINE_TS是否允许 offline 表空间,1 表示允许,0 表示不允许,2 表示禁止备库,其他放开。
RLOG_SEND_APPLY_MON统计最近 64 次的日志发送信息

dmmal.ini文件

参数名备注
MAL_CHECK_INTERVALMAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL判定 MAL 链路断开的时间
MAL_INST_NAME实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOSTMAL 系统监听 TCP 连接的 IP 地址
MAL_PORTMAL 系统监听 TCP 连接的端口
MAL_INST_HOST实例的对外服务 IP 地址
MAL_INST_PORT实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT实例监听守护进程 TCP 连接的端口

dmarch.ini文件

参数名备注
ARCH_TYPE即时归档类型
ARCH_DEST归档目标,本地归档为归档文件存放路径,其他归档方式设置为目标数据库实例名
ARCH_FILE_SIZE单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT单位 Mb,0 表示无限制,范围 1024~4294967294M

dmwatcher.ini文件

参数名备注
DW_TYPE全局守护类型
DW_MODE自动切换模式远程守护进程故障认定时间
INST_RECOVER_TIME主库守护进程启动恢复的间隔时间
INST_ERROR_TIME本地实例故障认定时间
INST_OGUID守护系统唯一 OGUID 值
INST_INIdm.ini 配置文件路径
INST_AUTO_RESTART打开实例的自动启动功能
INST_STARTUP_CMD命令行方式启动
RLOG_SEND_THRESHOLD指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD指定备库重演日志的时间阀值,默认关闭

dmmonitor.ini文件

参数名备注
MON_DW_Confirm确认监视器模式
MON_LOG_PATH监视器日志文件存放路径
MON_LOG_INTERVAL每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE每个日志文件最大 32M
MON_LOG_SPACE_LIMIT不限定日志文件总占用空间

数据库安装

数据库安装可参考文章: 数据库安装.

数据准备

备份主库

使用dmrman对主库进行一次全量备份。备份集生成在/dm8/backup目录下备份集名称为‘DB_BAK_01’。
在这里插入图片描述
进入备份集生成目录中,将生成备份集拷贝到两个备库中
使用scp命令来进行远程拷贝

拷贝到备库1在这里插入图片描述
拷贝到备库2
在这里插入图片描述
进入备库1中,对备份集进行恢复操作,执行恢复三部曲。
在这里插入图片描述
在这里插入图片描述
进入备库2中进行备份集恢复,操作步骤与备库1相同。

配置主库与备库

配置主库

配置主库dm.ini文件,修改内容如下。

INSTANCE_NAME = GRP1_RWW_01 
PORT_NUM = 32141
DW_INACTIVE_INTERVAL = 60 
ALTER_MODE_STATUS = 0 
ENABLE_OFFLINE_TS = 2  
MAL_INI = 1
ARCH_INI = 1 
RLOG_SEND_APPLY_MON = 64 

配置主库dmmal.ini文件,此文件需要新建。

MAL_CHECK_INTERVAL = 5 
MAL_CONN_FAIL_INTERVAL = 5 
[MAL_INST1]
MAL_INST_NAME = GRP1_RWW_01
MAL_HOST = 10.10.10.20 
MAL_PORT = 61141
MAL_INST_HOST = 192.168.230.110 
MAL_INST_PORT = 32141
MAL_DW_PORT = 52141 
MAL_INST_DW_PORT = 33141 
[MAL_INST2]
MAL_INST_NAME = GRP1_RWW_02
MAL_HOST = 10.10.10.21
MAL_PORT = 61142
MAL_INST_HOST = 192.168.230.111
MAL_INST_PORT = 32142
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = GRP1_RWW_03
MAL_HOST = 10.10.10.22
MAL_PORT = 61143
MAL_INST_HOST = 192.168.230.112
MAL_INST_PORT = 32143
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143

配置主库dmarch.ini文件

[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY
ARCH_DEST = GRP1_RWW_02 
[ARCHIVE_TIMELY2] 
ARCH_TYPE = TIMELY 
ARCH_DEST = GRP1_RWW_03 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/data/DAMENG/arch 
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0 

配置主库dmwatcher.ini

[GRP1] 
DW_TYPE = GLOBAL
DW_MODE = AUTO 
DW_ERROR_TIME = 10 
INST_RECOVER_TIME = 60 
INST_ERROR_TIME = 10
INST_OGUID = 453332 
INST_INI = /dm8/data/DAMENG/dm.ini 
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver 
RLOG_SEND_THRESHOLD = 0 
RLOG_APPLY_THRESHOLD = 0 

以Mount方式来启动主库
在这里插入图片描述
设置主库OGUID

登录disql
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);

设置主库模式
SQL>alter database primary;
这时使用disql登录数据库会发现数据库模式已经改为主库配置模式
在这里插入图片描述

配置备库

配置备库1

配置dm.ini文件,修改内容如下

INSTANCE_NAME = GRP1_RWW_02 
PORT_NUM = 32142  
DW_INACTIVE_INTERVAL = 60 
ALTER_MODE_STATUS = 0  
ENABLE_OFFLINE_TS = 2  
MAL_INI = 1
ARCH_INI = 1 
RLOG_SEND_APPLY_MON = 64 

配置dmmal.ini文件

MAL_CHECK_INTERVAL = 5 
MAL_CONN_FAIL_INTERVAL = 5 
[MAL_INST1]
MAL_INST_NAME = GRP1_RWW_01 
MAL_HOST = 10.10.10.20 
MAL_PORT = 61141 
MAL_INST_HOST = 192.168.230.110 
MAL_INST_PORT = 32141 
MAL_DW_PORT = 52141 
MAL_INST_DW_PORT = 33141 
[MAL_INST2]
MAL_INST_NAME = GRP1_RWW_02
MAL_HOST = 10.10.10.21
MAL_PORT = 61142
MAL_INST_HOST = 192.168.230.111
MAL_INST_PORT = 32142
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = GRP1_RWW_03
MAL_HOST = 10.10.10.22
MAL_PORT = 61143
MAL_INST_HOST = 192.168.230.112
MAL_INST_PORT = 32143
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143

配置dmarch.ini文件

[ARCHIVE_TIMELY1] 
ARCH_TYPE = TIMELY 
ARCH_DEST = GRP1_RWW_01 
[ARCHIVE_TIMELY2] 
ARCH_TYPE = TIMELY
ARCH_DEST = GRP1_RWW_03 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL 
ARCH_DEST = /dm8/data/DAMENG/arch 
ARCH_FILE_SIZE = 128 
ARCH_SPACE_LIMIT = 0 

配置dmwatcher.ini文件

[GRP1]
DW_TYPE =GLOBAL 
DW_MODE = AUTO
DW_ERROR_TIME = 10 
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453332 
INST_INI = /dm8/data/DAMENG/dm.ini 
INST_AUTO_RESTART = 1 
INST_STARTUP_CMD = /dm8/bin/dmserver 
RLOG_SEND_THRESHOLD = 0 
RLOG_APPLY_THRESHOLD = 0 

以Mount方式启动备库
在这里插入图片描述
修改备库1的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); 

修改备库1模式

SQL>alter database standby; 

修改完成后可看到现在备库为备库配置模式
在这里插入图片描述

配置备库2

修改dm.ini文件

INSTANCE_NAME = GRP1_RWW_03 
PORT_NUM = 32143 
DW_INACTIVE_INTERVAL = 60 
ALTER_MODE_STATUS = 0 
ENABLE_OFFLINE_TS = 2 
MAL_INI = 1 
ARCH_INI = 1 
RLOG_SEND_APPLY_MON = 64 

配置dmmal.ini文件

MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5 
[MAL_INST1]
MAL_INST_NAME = GRP1_RWW_01
MAL_HOST = 10.10.10.20 
MAL_PORT = 61141 
MAL_INST_HOST = 192.168.230.110 
MAL_INST_PORT = 32141 
MAL_DW_PORT = 52141 
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = GRP1_RWW_02
MAL_HOST = 10.10.10.21
MAL_PORT = 61142
MAL_INST_HOST = 192.168.230.111
MAL_INST_PORT = 32142
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = GRP1_RWW_03
MAL_HOST = 10.10.10.22
MAL_PORT = 61143
MAL_INST_HOST = 192.168.230.112
MAL_INST_PORT = 32143
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143

配置dmarch.ini文件

[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY 
ARCH_DEST = GRP1_RWW_01 
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY 
ARCH_DEST = GRP1_RWW_02
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/data/DAMENG/arch 
ARCH_FILE_SIZE = 128 
ARCH_SPACE_LIMIT = 0 

配置dmwatcher.ini文件

[GRP1]
DW_TYPE = GLOBAL 
DW_MODE = AUTO 
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10 
INST_OGUID = 453332 
INST_INI = /dm8/data/DAMENG/dm.ini 
INST_AUTO_RESTART = 1 
INST_STARTUP_CMD = /dm8/bin/dmserver
RLOG_SEND_THRESHOLD = 0 
RLOG_APPLY_THRESHOLD = 0

以Mount方式启动备库

在这里插入图片描述
设置备库2得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);

修改备库2模式

alter database standby; 

执行完成后再次登录可看到备库2状态改为备库配置模式

配置监视器

配置dmmonitor.ini文件

MON_DW_Confirm = 1
MON_LOG_PATH = /dm8/data/log 
MON_LOG_INTERVAL = 60 
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0 
[GRP1]
MON_INST_OGUID = 453332 
MON_DW_IP = 10.10.10.20:52141
MON_DW_IP = 10.10.10.21:52142
MON_DW_IP = 10.10.10.22:52143

在各个主备库上启动守护进程

./dmwatcher /dm8/data/DAMENG/dmwatcher.ini 

启动后主备库处于打开状态
在这里插入图片描述
监视器可收到守护进行消息
至此,读写分离集群搭建完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值