读写分离部署

目录

集群架构规划

集群架构

切换模式说明

 集群搭建

1.配置A机器

(1)初始化实例

 (2)修改 dmarch.ini

(3)创建 dmmal.ini

(4)创建 dmwatcher.ini

(5)拷贝备份文件

(6)注册服务

2.配置B机器

(1)初始化实例

(2)恢复数据

(3)替换dmarch.ini

(4)配置dm.ini

(5)配置dmmal.ini

(6)配置dmwatcher.ini

3.配置监视器

(1)创建确认监视器dmmonitor.ini

(2)创建非确认监视器dmmonitor_manual.ini

(3)注册服务

4.启动服务及查看信息

(1)启动数据库并修改参数

(2)启动守护进程

(3)启动监视器

(4)启停集群

5.dm_svc.conf 配置

(1)常用配置项介绍

(2) 常用配置


集群架构规划

A机器

B机器

业务 IP

10.0.0.113

10.0.0.114

心跳 IP

172.16.1.113

172.16.1.114

实例名

GRP1_RWW_01

GRP1_RWW_02

实例端口

5236

5236

MAL 端口

5336

5336

MAL 守护进程端口

5436

5436

守护进程端口

5536

5536

OGUID

45331

45331

守护组

GRP1

GRP1

安装目录

/opt/dmdbms

/opt/dmdbms

实例目录

/opt/dmdbms/data/

/opt/dmdbms/data/

归档上限

51200

51200

集群架构

切换模式说明

故障切换方式

dmarch

dmwatcher

dmmonitor

监视器要求

故障手动切换

ARCH_WAIT_APP

LY=0

DW_MODE=

MANUAL

MON_DW_CON

FIRM=0

1、配置手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。

故障自动切换

ARCH_WAIT_APP

LY= 0

DW_MODE=

AUTO

MON_DW_CON

FIRM=1

1、配置手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。

2、配置自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。

  • ARCH_WAIT_APPLY 参数,设置为 0:高性能模式;设置为 1:事务一致模式。
  • 故障手动切换情境下 ARCH_WAIT_APPLY 只能为 0。故障自动切换情境下 ARCH_WAIT_APPLY 可以为 0,也可以为 1。
  • ARCH_WAIT_APPLY 参数设置的判断依据为业务是否要查询备机最新数据。如果需要,则配置为 1(较大性能衰减);如果不需要,则配置为 0。

 集群搭建

1.配置A机器

(1)初始化实例

/opt/dmdbms/bin/dminit PATH=/opt/dmdbms/data/ INSTANCE_NAME=GRP1_RWW_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048

  • 启动服务

/opt/dmdbms/bin/dmserver /opt/dmdbms/data/DAMENG/dm.ini

  • 开启归档

/opt/dmdbms/bin/disql SYSDBA/SYSDBA@10.0.0.113:5236

SQL> ALTER DATABASE MOUNT;

SQL> ALTER DATABASE ARCHIVELOG;

SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';

SQL> ALTER DATABASE OPEN;

  • 备份数据

SQL> BACKUP DATABASE BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE';

  • 修改dm.ini

SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);

SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);

SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);

SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);

SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);

SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);

  • 关闭前台实例服务

 (2)修改 dmarch.ini

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmarch.ini

ARCH_WAIT_APPLY = 1 #0:高性能 1:事务一致

[ARCHIVE_LOCAL]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /opt/dmdbms/data/DAMENG/arch/ #本地归档存放路径

ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB

ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = GRP1_RWW_02 #实时归档目标实例名

(3)创建 dmmal.ini

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmmal.ini

MAL_CHECK_INTERVAL         = 10  #MAL 链路检测时间间隔

MAL_CONN_FAIL_INTERVAL     = 10  #判定 MAL 链路断开的时间

MAL_TEMP_PATH              = /opt/dmdbms/data/malpath/  #临时文件目录

MAL_BUF_SIZE               = 512  #单个 MAL 缓存大小,单位 MB

MAL_SYS_BUF_SIZE           = 2048  #MAL 总大小限制,单位 MB

MAL_COMPRESS_LEVEL         = 0  #MAL 消息压缩等级,0 表示不压缩

[MAL_INST1]

MAL_INST_NAME            = GRP1_RWW_01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致

MAL_HOST                 = 10.0.0.113  #MAL 系统监听 TCP 连接的 IP 地址

MAL_PORT                 = 5336  #MAL 系统监听 TCP 连接的端口

MAL_INST_HOST            = 172.16.1.113  #实例的对外服务 IP 地址

MAL_INST_PORT            = 5236  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致

MAL_DW_PORT              = 5436  #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT         = 5536  #实例监听守护进程 TCP 连接的端口

[MAL_INST2]

MAL_INST_NAME            = GRP1_RWW_02

MAL_HOST                 = 10.0.0.114

MAL_PORT                 = 5336

MAL_INST_HOST            = 172.16.1.114

MAL_INST_PORT            = 5236

MAL_DW_PORT             = 5436

MAL_INST_DW_PORT        = 5536

(4)创建 dmwatcher.ini

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmwatcher.ini

[GRP1]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切

DW_ERROR_TIME = 20 #远程守护进程故障认定时间

INST_ERROR_TIME = 20 #本地实例故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_OGUID = 45331 #守护系统唯一 OGUID 值

INST_INI = /opt/dmdbms/data/DAMENG/dm.ini #dm.ini 文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

(5)拷贝备份文件

[dmdba@~]$ scp -r /opt/dmdbms/data/DAMENG/bak/BACKUP_FILE dmdba@10.0.0.114:/opt/dmdbms/data/DAMENG/bak

(6)注册服务

  • 创建

[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RWW_01 -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -m mount

[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini

  • 删除

[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RWW_01 [root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

2.配置B机器

(1)初始化实例

[dmdba@~]$ /opt/dmdbms/bin/dminit PATH=/opt/dmdbms/data/ INSTANCE_NAME=GRP1_RWW_02 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048

(2)恢复数据

[dmdba@~]$ /opt/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE'"

[dmdba@~]$ /opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE'"

[dmdba@~]$ /opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

(3)替换dmarch.ini

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmarch.ini

ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致

[ARCHIVE_LOCAL]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /opt/dmdbms/data/DAMENG/arch/ #本地归档存放路径

ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB

ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = GRP1_RWW_01 #实时归档目标实例名

(4)配置dm.ini

INSTANCE_NAME  = GRP1_RWW_02

PORT_NUM = 5236                               #数据库实例监听端口

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)配置dmmal.ini

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmmal.ini

MAL_CHECK_INTERVAL         = 10  #MAL 链路检测时间间隔

MAL_CONN_FAIL_INTERVAL     = 10  #判定 MAL 链路断开的时间

MAL_TEMP_PATH              = /opt/dmdbms/data/malpath/  #临时文件目录

MAL_BUF_SIZE               = 512  #单个 MAL 缓存大小,单位 MB

MAL_SYS_BUF_SIZE           = 2048  #MAL 总大小限制,单位 MB

MAL_COMPRESS_LEVEL         = 0  #MAL 消息压缩等级,0 表示不压缩

[MAL_INST1]

MAL_INST_NAME            = GRP1_RWW_01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致

MAL_HOST                 = 10.0.0.113  #MAL 系统监听 TCP 连接的 IP 地址

MAL_PORT                 = 5336  #MAL 系统监听 TCP 连接的端口

MAL_INST_HOST            = 172.16.1.113  #实例的对外服务 IP 地址

MAL_INST_PORT            = 5236  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致

MAL_DW_PORT              = 5436  #实例对应的守护进程监听 TCP 连接的端口

MAL_INST_DW_PORT         = 5536  #实例监听守护进程 TCP 连接的端口

[MAL_INST2]

MAL_INST_NAME            = GRP1_RWW_02

MAL_HOST                 = 10.0.0.114

MAL_PORT                 = 5336

MAL_INST_HOST            = 172.16.1.114

MAL_INST_PORT            = 5236

MAL_DW_PORT             = 5436

MAL_INST_DW_PORT        = 5536

(6)配置dmwatcher.ini

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmwatcher.ini

[GRP1]

DW_TYPE = GLOBAL #全局守护类型

DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切

DW_ERROR_TIME = 20 #远程守护进程故障认定时间

INST_ERROR_TIME = 20 #本地实例故障认定时间

INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间

INST_OGUID = 45331 #守护系统唯一 OGUID 值

INST_INI = /opt/dmdbms/data/DAMENG/dm.ini #dm.ini 文件路径

INST_AUTO_RESTART = 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

(7)注册服务

  • 创建

[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RWW_02 -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -m mount

[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini

  • 删除

[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RWW_02

[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

3.配置监视器

(1)创建确认监视器dmmonitor.ini

[dmdba@~]$ vi /opt/dmdbms/bin/dmmonitor.ini

MON_DW_CONFIRM             = 1  #0:非确认(故障手切) 1:确认(故障自切)

MON_LOG_PATH               = ../log  #监视器日志文件存放路径

MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件

MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位 MB

MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位 MB

[GRP1]

MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值

MON_DW_IP          = 172.16.1.113:5436  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT

MON_DW_IP                = 172.16.1.114:5436

(2)创建非确认监视器dmmonitor_manual.ini

MON_DW_CONFIRM             = 0  #0:非确认(故障手切) 1:确认(故障自切)

MON_LOG_PATH               = ../log  #监视器日志文件存放路径

MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件

MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位 MB

MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位 MB

[GRP1]

MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值

MON_DW_IP          = 172.16.1.113:5436  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT

MON_DW_IP                = 172.16.1.114:5436

(3)注册服务

  • 创建

[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /opt/dmdbms/bin/dmmonitor.ini

  • 删除

[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor

4.启动服务及查看信息

(1)启动数据库并修改参数

##A 机器

[dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RWW_01 start

[dmdba@~]$ /opt/dmdbms/bin/disql SYSDBA/SYSDBA@10.0.0.113:5236

SQL> SP_SET_OGUID(45331);

SQL> ALTER DATABASE PRIMARY;

##B 机器

[dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RWW_02 start

[dmdba@~]$ /opt/dmdbms/bin/disql SYSDBA/SYSDBA@10.0.0.114:5236

SQL> SP_SET_OGUID(45331);

SQL> ALTER DATABASE STANDBY;

(2)启动守护进程

##A/B机器

[dmdba@~]$ /opt/dmdbms/bin/DmWatcherServiceWatcher start

(3)启动监视器

##后台启动

[dmdba@~]$ /opt/dmdbms/bin/DmMonitorServiceMonitor start

##前台启动

[dmdba@~]$ /opt/dmdbms/bin/dmmonitor /opt/dmdbms/bin/dmmonitor.ini

(4)启停集群

##启动

##A/B 机器

[dmdba@~]$ /opt/dmdbms/bin/DmWatcherServiceWatcher start

##停止

##A/B机器

[dmdba@~]$ /opt/dmdbms/bin/DmWatcherServiceWatcher stop

##A 机器

[dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RWW_01 stop

##B机器

[dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RWW_02 stop

5.dm_svc.conf 配置

dm_svc.conf 是使用达梦数据库时非常重要的配置文件,它包含了达梦各接口和客户端工具所需要配置的一些参数。通过它可以实现达梦各种集群的读写分离和均衡负载,且必须和接口/客户端工具位于同一台机器上才能生效。

初始 dm_svc.conf 文件由达梦安装时自动生成。不同的平台生成目录有所不同,注意相应访问用户需要对该文件有读取权限。

但在某些情况下,所使用的用户没有读取和修改 /etc 目录下文件的权限,这时就需要将 dm_svc.conf 文件放到有权限的目录下,并修改 url 连接串的内容

dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。全局配置区在前,可配置所有的配置项,服务配置区在后,以“[服务名]”开头,可配置除了服务名外的所有配置项。服务配置区中的配置优先级高于全局配置区(服务配置区的相同配置项会覆盖全局配置区对应的配置项)。

(1)常用配置项介绍

  • 服务名

用于连接数据库的服务名,参数值格式为:

服务名=(IP[:PORT],IP[:PORT],......)。

  • TIME_ZONE

指明客户端的默认时区设置范围为:-779~840M,如 60 对应 +1:00 时区,+480 对于东八区,如果不做配置默认是操作系统的时区。

  • KEYWORDS

该参数可以用于屏蔽数据库关键字,如果数据库关键字在 SQL 语句中以单词的形式存在,无法识别需要加上双引号或者可以通过该参数来屏蔽关键字,建议大小写都写入参数中。

  • LOGIN_MODE

指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。

注意

在 2021 年版本之后,此参数的默认值由 0 变更为 4。该参数详细介绍及使用办法请参考《DM 数据守护与读写分离集群》-5.8 章节。手册位于数据库安装路径 /dmdbms/doc 文件夹。

  • SWITCH_TIMES

表示以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围 1~9223372036854775807,默认值为 1,可以设置至少 3 次用来避免由于网卡的波动,造成数据库连接测频繁切换。

  • SWITCH_INTERVAL

表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807。与参数 SWITCH_TIMES、EP_SELECTOR 配合使用,EP_SELECTOR 设置为 0,等待 SWITCH_INTERVAL 后会切换尝试连接下一个服务器,EP_SELECTOR 设置为 1,等待 SWITCH_INTERVAL 后会继续尝试连接该服务器,直到 SWITCH_TIMES 次再切换下一个服务器。

  • EP_SELECTOR

表示连接数据库时采用何种模型建立连接。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接。

  • AUTO_RECONNECT

表示连接发生异常或一些特殊场景下连接处理策略。0:关闭连接,1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2 配合 EP_SELECTOR=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上,可以根据应用的实际要求设定。

(2) 常用配置

单机配置

配置示例:

##以#开头的行表示是注释

##全局配置区

TIME_ZONE=(480)

LANGUAGE=(cn)

DM=(172.16.1.1:5236)

连接示例:

Disql 连接:

[dmdba@localhost~]$/dmsoft/dmdbms/disql SYSDBA/SYSDBA@DM

通过管理工具连接:

 

主备集群配置

配置示例:

##以#开头的行表示是注释

##全局配置区

TIME_ZONE=(480)

LANGUAGE=(cn)

DMRW=(10.0.0.113:5236,10.0.0.114:5236)

##服务配置

[DMRW]

LOGIN_MODE=(1)

RW_SEPARATE=(1)

RW_PERCENT=(30)

SWITCH_TIMES=(60)

SWITCH_INTERVAL=(1000)

jdbc 连接串:

jdbc:dm://DMHA

读写分离集群安装部署 | 达梦技术文档 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值