读写分离集群部署

主机规划​

主机名

服务ip

心跳ip

数据库名

实例名

dm-16

192.168.3.16


无需实例,仅做监视管理用

无需实例,仅做监视管理用

dm-17

192.168.2.17

192.168.3.17

dmrw

dmrw1

dm-18

192.168.3.18

192.168.3.18

dmrw

dmrw2


端口规划​

实例名

实例端口

MAL 系统监听 TCP 连接的端口

实例本地的守护进程监听 TCP 连接的端口

实例监听守护进程 TCP 连接的端口

dmrw1

5236

7336

7436

7536

dmrw2

5236

7336

7436

7536

本地存储LVM磁盘​

磁盘

LVM磁盘名/用途

/dev/sda(25G)

/dev/mapper/centos-root数据库安装磁盘)

/dev/sda(25G)

/dev/mapper/centos-root数据磁盘)




目录规划​

数据库软件安装目录

/home/dmdba/dmdbms

实例安装目录

/home/dmdba/dmdata/

归档日志存放目录

/home/dmdba/dmdata/arch

备份文件存放目录

/home/dmdba/dmdata/dmbak/



搭建步骤​

修改主机名​

vi /etc/hostname

修改规划上面的主机名

软件安装​

dm数据库单节点安装步骤,此处略

初始化实例​

二个节点都要操作(dm-17\dm-18

dminit path=/home/dmdba/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=dmrw instance_name=dmrw

达梦实时主备集群搭建_数据库



以主机dm-17为读写分离主库,启动实例

dmserver /home/dmdba/dmdata/dmrw/dm.ini

出现system is ready后输入exit停止数据库

脱机备份数据库​

在主机dmdb01上执行以下命令,确认主库 dmap 服务已启动:

ps -ef|grep dmap

达梦实时主备集群搭建_守护进程_02


dmdba用户 启动dmrman工具

dmrman use_ap=2

执行 backup 全库:

backup database '/home/dmdba/dmdata/dmrw/dm.ini' backupset '/home/dmdba/dmdata/dmbak/bakfull';


达梦实时主备集群搭建_数据库_03


备份还原备库​

备份的文件/home/dmdba/dmdba/dmbak/bakfull 拷贝到服务器dm-18上。

scp -r /home/dmdba/dmdata/dmbak/bakfull 192.168.2.18:/home/dmdba/dmdata/dmbak/.

在主机dm-18

使用 dmrman 工具还原备库,dmdba 用户执行:

dmrman use_ap=2

进入dmrman工具交互界面

执行 restore:

restore database '/home/dmdba/dmdata/dmrw/dm.ini' from backupset '/home/dmdba/dmdata/dmbak/bakfull'

达梦实时主备集群搭建_hive_04


完成后执行 recover:

recover database '/home/dmdba/dmdata/dmrw/dm.ini' from backupset '/home/dmdba/dmdata/dmbak/bakfull '

达梦实时主备集群搭建_数据库_05


最后执行 recover update db_magic。

recover database '/home/dmdba/dmdata/dmrw/dm.ini' update db_magic;

达梦实时主备集群搭建_守护进程_06


修改dm.ini参数​

所有节点都要修改

执行以下命令:

vi /home/dmdba/dmdata/dmrw/dm.ini

主库dm-17上修改以下参数值:

INSTANCE_NAME = dmrw1

MAL_INI = 1

ARCH_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2


备库dm-18上修改以下参数值:

INSTANCE_NAME = dmrw2

MAL_INI = 1

ARCH_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2



配置归档配置文件​

在实例目录下新建文件 dmarch.ini,执行以下命令:

vi /dmdata/dmdb/dmarch.ini

在实例目录下新建文件 dmarch.ini,执行以下命令:

vi /dmdata/dmdb/dmarch.ini

主库dm-17上添加以下内容:

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME

ARCH_DEST = dmrw2

[ARCHIVE_REALTIME2]

ARCH_TYPE = REALTIME

ARCH_DEST = dmrw3

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /home/dmdba/dmdata/arch

ARCH_FILE_SIZE = 2048

ARCH_SPACE_LIMIT = 102400


备库dm-18上添加以下内容:

[ARCHIVE_REALTIME1]

ARCH_TYPE = REALTIME

ARCH_DEST = dmrw1

[ARCHIVE_REALTIME2]

ARCH_TYPE = REALTIME

ARCH_DEST = dmrw3

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /home/dmdba/dmdata/arch

ARCH_FILE_SIZE = 2048

ARCH_SPACE_LIMIT = 102400


配置dmmal.ini(心跳网络)​

两个节点都要配置,且配置必须相同

[dmdba@dm-17 dmrw]$ cat dmmal.ini

MAL_CHECK_INTERVAL = 5

MAL_CONN_FAIL_INTERVAL = 15

[MAL_INST1]

MAL_INST_NAME = dmrw1

MAL_HOST = 192.168.3.17

MAL_PORT = 7336

MAL_INST_HOST = 192.168.2.17

MAL_INST_PORT = 5236

MAL_DW_PORT = 7436

MAL_INST_DW_PORT = 7536

[MAL_INST2]

MAL_INST_NAME = dmrw2

MAL_HOST = 192.168.3.18

MAL_PORT = 7336

MAL_INST_HOST = 192.168.2.18

MAL_INST_PORT = 5236

MAL_DW_PORT = 7436

MAL_INST_DW_PORT = 7536

配置守护进程​

二个节点都要配置,且配置必须相同

[dmdba@dm-17 dmrw]$ cat dmwatcher.ini

[GRP_RW]

DW_TYPE = GLOBAL

DW_MODE =MANUAL

DW_ERROR_TIME = 30

INST_RECOVER_TIME = 60

INST_ERROR_TIME = 20

INST_OGUID = 453331

INST_INI = /home/dmdba/dmdata/dmrw/dm.ini

INST_AUTO_RESTART = 1

INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver

方式启动数据库实例​

使用 dmdba 用户,在主库上执行以下命令(主备库都执行):

dmserver /home/dmdba/dmdata/dmrw/dm.ini mount

在新的终端使用 disql 工具连接数据库:

./disql SYSDBA/SYSDBA

主备库都修改 oguid,执行以下命令:

sp_set_oguid(453331);

达梦实时主备集群搭建_hive_07


主库dm-17上修改数据库模式为 primary,执行以下命令:

alter database primary;

达梦实时主备集群搭建_守护进程_08


备库dm-18上类似操作,但注意修改数据库模式为 standby,执行以下命令:

alter database standby;

达梦实时主备集群搭建_守护进程_09


dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):

dmwatcher /home/dmdba/dmdata/dmrw/dmwatcher.ini

达梦实时主备集群搭建_守护进程_10


查看状态​

使用DM管理工具,连上二个实例上面查看

达梦实时主备集群搭建_数据库_11



达梦实时主备集群搭建_守护进程_12





配置监视器(服务器192.168.3.16)​

192.168.3.16首先也要安装数据库软件再操作下面步骤

vi /home/dmdba/dmdbms/bin/dmmonitor.ini

添加以下内容:

说明:具体配置时,请把#和#之后的中文内容删除。

MON_DW_CONFIRM = 1

MON_LOG_PATH = /home/dmdba/dmdbms/log

MON_LOG_INTERVAL = 60

MON_LOG_FILE_SIZE = 200

MON_LOG_SPACE_LIMIT = 1024

[GRP_RW]

MON_INST_OGUID = 453331

MON_DW_IP = 192.168.3.17:7436

MON_DW_IP = 192.168.3.18:7436

达梦实时主备集群搭建_数据库_13


启动监视器​

在服务器dm-16上操作:

dmmonitor /dmdata/dmdb/dmmonitor.ini


达梦实时主备集群搭建_hive_14


可以看见集群状态ok

以上证明集群搭建成功

关库​

按照关闭dmmonitor---dmwatcher关闭后(dmwatcher关闭顺序先主后备)---dmserver(dmserver关闭顺序先主后备)的顺序依次关闭数据库

添加服务作为系统启动服务​

下面的操作在主备节点都要执行,执行顺序:先主库执行----备库执行:

cd /home/dmdba/dmdbms/script/root/

./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /home/dmdba/dmdata/dmrw/dmwatcher.ini

./dm_service_installer.sh -t dmserver -p dmrw -dm_ini /home/dmdba/dmdata/dmrw/dm.ini

监视器执行(192.168.3.16)执行​

使用 root 用户,到数据库安装目录的script/root下。

cd /home/dmdba/dmdbms/script/root/

./dm_service_installer.sh -t dmmonitor -p monitor-confirm -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini

启动命令

systemctl start DmMonitorServicemonitor-confirm

主机dm-16再添加一个普通监视器​

cd /home/dmdba/dmdbms/bin

cp dmmonitor.ini dmmonitor-normal.ini

修改dmmonitor-normal.ini

[dmdba@dm-16 bin]$ cat dmmonitor-normal.ini

MON_DW_CONFIRM = 0

MON_LOG_PATH = /home/dmdba/dmdbms/log

MON_LOG_INTERVAL = 60

MON_LOG_FILE_SIZE = 200

MON_LOG_SPACE_LIMIT = 1024

[GRP_RW]

MON_INST_OGUID = 453331

MON_DW_IP = 192.168.3.17:7436

MON_DW_IP = 192.168.3.18:7436





启动集群:​

启动备库实例​

192.168.2.18启动实例

systemctl start DmServicedmrw

达梦实时主备集群搭建_守护进程_15



启动主库实例​

192.168.2.17

systemctl start DmServicedmrw

达梦实时主备集群搭建_守护进程_16


启动主库守护进程​

192.168.2.17

systemctl start DmWatcherServicedmrw

达梦实时主备集群搭建_数据库_17


启动备库守护进程​

192.168.2.18

systemctl start DmWatcherServicedmrw

启动监视服务​

192.168.3.16

达梦实时主备集群搭建_hive_18



查看集群状态​

法一:查看日志:

cat /home/dmdba/dmdbms/log/DmMonitorservicemonitor-confirm.log

法二:前端查看

dmmonitor path= /home/dmdba/dmdbms/bin/dmmonitor-normal.ini

达梦实时主备集群搭建_hive_19



主备与读写分离比较归纳​

主备及读写分离本质还是相同的,都是对redo日志的处理不同产生的几种解决模式,





主库redo

备库模式

Realtime

Timely

高性能

Arch_wait_apply=0

优点:

1、备库对主库性能影响小

2、保障备库最快收到redo日志

优点:

主库日志比备库只多不少

备库与主库能保证事务一致

缺点:备库数据因为redo未及时重演,可能会有延迟

缺点:

备库数据可能有延迟,一方面来自于redo未及时重演引起的延迟,另一方面来自于主库写联机日志这时间引发的延迟


架构模式:实时主备

架构模式:普通主备架构

适用场景:业务一致性要求一般,对主库可用性要求较高的场景

适用场景:备库对业务的实时一致性要求一般,但对容灾的备库有事务不能丢失要求

事务一致

Arch_wait_apply=1

优点:在满足事务一致性基础上,对主库性能影响最低

优点:

强事务一致性保证,主备数据库能同步

缺点:

1、主库性能受备库的影响较高

2、当主库故障时有可能引起备库与主库数据不一致

缺点:

主库性能影响受备库居中,

架构模式:实时读写分离集群,要求守护进程是自动模式

架构架构模式:普通读写分离集群

适用场景:业务一致性要求一般,对主库可用性要求较高的场景

适用场景:业务一致性要求高,对主库可用性没有高要求场景


达梦社区地址:​​https://eco.dameng.com​