注册
docker部署DM8主备集群

docker部署DM8主备集群

csw 2023/05/29 3878 7 6
摘要 --虽然使用docker部署比较方便,但是不建议使用docker部署数据库,尤其是比较关键的系统,负载比较大的系统。

1部署规划

本次部署的是2节点主备集群+1个确认监视器的集群架构。使用的操作系统是centos7.6,cpu架构是x86。

1.1集群ip规划

image.png

1.2集群端口规划

image.png

1.3实例参数规划

数据库的初始化参数至关重要,一些重要参数如页大小,数据库字符集和大小写是否敏感等,一旦初始化实例是不能直接修改的,如果要修改,必须重新再初始化实例,所以一定要和应用人员沟通清楚。
image.png

1.4磁盘映射

image.png

1.5目录规划(对应docker内)

image.png

2部署前宿主机优化

2.1关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2.2关闭selinux

容器运行需要对/proc/self/attr/keycreate有写权限,因此需要将SELINUX配置为disable。

setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

#3部署步骤

3.1部署docker

[root@docker ~]#yum install -y docker
启动docker:
[root@docker ~]# systemctl start docker

3.2加载数据库主备集群docker镜像包

根据操作系统版本和cpu架构,申请对应的DM8主备集群docker镜像包,下载后,上传到主节点服务器,如/opt目录。
执行以下命令,加载docker镜像:

docker load -i dm8_20230224_rev178822_x86_rh6_64_docker_dw.tar

image.png
查看加载的镜像:docker images
image.png
镜像重命名:

docker tag dmwatcher:dm8_20230224_rev178822_x86_rh6_64_docker_dw dmwatcher:dm8_dw

image.png

3.3配置docker网络

本次部署主备集群,主库节点、备库节点和监视器节点分别部署在3台服务器上,所以采用HOST模式(容器使用宿主机的IP和端口)。这种方式需要在/etc/hosts文件中配置映射关系,否则容器运行后可能拿到的地址是127.0.0.1,而非本机的真正IP地址。三台服务器均需修改,更改如下:

主库节点:
vi /etc/hosts
192.168.1.10  host   localhost
备库节点:
vi /etc/hosts
192.168.1.11  host   localhost
监视器节点:
vi /etc/hosts
192.168.1.12  host   localhost

3.4运行容器

3.4.1运行监视器容器

docker run -d --name dmwatcher_monitor --restart=always  --privileged=true --net host  -e DMWATCHER_ROLE=monitor -e CLUSTER_IPS="192.168.1.10,192.168.1.11,192.168.1.12" -e LD_LIBRARY_PATH=/opt/dmdbms/bin -v /dmdata/dmwatcher_monitor:/opt/dmdbms/data dmwatcher:dm8_dw

3.4.2运行备库容器

docker run -d --name dmwatcher_standby -p 5236:5236 --restart=always --privileged=true --net host -e DMWATCHER_ROLE=standby -e DW_NO=2 -e CLUSTER_IPS="192.168.1.10,192.168.1.11,192.168.1.12" -e LD_LIBRARY_PATH=/opt/dmdbms/bin -v /dmdata/dmwatcher_standby:/opt/dmdbms/data  dmwatcher:dm8_dw

3.4.3运行主库容器

docker run -d --name dmwatcher_primary -p 5236:5236 --restart=always  --privileged=true --net host -e PAGE_SIZE=32 -e extent_size=32 -e CASE_SENSITIVE=1  -e charset=1 -e DMWATCHER_ROLE=primary -e DW_NO=1 -e CLUSTER_IPS="192.168.1.10,192.168.1.11,192.168.1.12" -e LD_LIBRARY_PATH=/opt/dmdbms/bin -v /dmdata/dmwatcher_primary:/opt/dmdbms/data dmwatcher:dm8_dw

注意:需要根据实际情况,设置对应的数据库页大小,字符集,大小写是否敏感,字符以字节还是字符为单位等数据库初始化参数。

3.4.4查看运行的容器

docker ps

image.png
image.png
image.png

3.4.5查看容器应用运行日志:

docker logs dmwatcher_monitor -f
docker logs dmwatcher_standby -f
docker logs dmwatcher_primary -f

会发现主库这里一直卡在传输文件到备节点和监视器节点。
image.png

3.4.6手动拷贝软件和主库备份到其他节点

scp BACKUP_FILE_01.tar DAMENG.tar  192.168.1.11:/dmdata/dmwatcher_standby
scp BACKUP_FILE_01.tar DAMENG.tar  192.168.1.12:/dmdata/dmwatcher_monitor

image.png

3.4.7重启所有节点的容器

重启主库、备库和监视器的容器,会自动对软件包和备份文件进行解压执行。

docker restart dmwatcher_primary
docker restart dmwatcher_standby
docker restart dmwatcher_monitor

分别各节点日志,发现主备节点都显示SYSTEM IS READY,启动到了MOUNT状态,但是一直无法OPEN。监视器也显示不对,这时候要排查各节点的配置文件是否正确,且主备库是否设置了primary/standby模式,是否设置了相同的oguid。

3.4.8修改主备库的相关配置文件

3.4.8.1数据库参数配置文件dm.ini

主库设置:
[root@dmdb01 ~]# cd /dmdata/dmwatcher_primary/DAMENG
[root@dmdb01 DAMENG]# vi dm.ini 
INSTANCE_NAME	     = DW1     #数据库实例名
PORT_NUM	     = 5236    #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60      #接收守护进程消息超时时间
ALTER_MODE_STATUS    = 0       #不允许手工方式修改实例模式/状态/oguid
ENABLE_OFFLINE_TS    = 2       #不允许备库OFFLINE表空间
MAL_INI		     = 1       #打开MAL系统
ARCH_INI	     = 1       #打开归档配置
备库设置:
[root@dmdb01 ~]# cd /dmdata/dmwatcher_standby/DAMENG
[root@dmdb01 DAMENG]# vi dm.ini 
INSTANCE_NAME        = DW2     #数据库实例名
PORT_NUM	     = 5236    #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60      #接收守护进程消息超时时间
ALTER_MODE_STATUS    = 0       #不允许手工方式修改实例模式/状态/oguid
ENABLE_OFFLINE_TS    = 2       #不允许备库OFFLINE表空间
MAL_INI		     = 1       #打开MAL系统
ARCH_INI	     = 1       #打开归档配置

3.4.8.2修改dmmal.ini配置文件

主库和备库的配置是一样的,主库配置如下:
[root@dmdb01 DAMENG]# cd /dmdata/dmwatcher_primary/DAMENG
[root@dmdb01 DAMENG]# vi dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DW1
MAL_HOST = 192.168.1.10
MAL_PORT = 61141
MAL_INST_HOST = 192.168.1.10
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DW2
MAL_HOST = 192.168.1.11
MAL_PORT = 61141
MAL_INST_HOST = 192.168.1.11
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141

3.4.8.3修改归档配置文件dmarch.ini

主库设置如下:
[root@dmdb01 DAMENG]# cd /dmdata/dmwatcher_primary/DAMENG
[root@dmdb01 DAMENG]# vi dmarch.ini
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = DW2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 10240 #根据实际磁盘设置,建议要能保存2个全备之间的归档。这里设置的是10G
备库设置如下:
[root@dmdb02 DAMENG]# cd /dmdata/dmwatcher_standby/DAMENG
[root@dmdb02 DAMENG]# vi dmarch.ini
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = DW1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 10240

3.4.8.4修改数据守护进程文件dmwatcher.ini

主库配置如下:
[root@dmdb01 DAMENG]# cd /dmdata/dmwatcher_primary/DAMENG
[root@dmdb01 DAMENG]# vi dmwatcher.ini 
[GRP453331]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /opt/dmdbms/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
备库配置如下:
[root@dmdb02 DAMENG]# cd /dmdata/dmwatcher_standby/DAMENG/
[root@dmdb02 DAMENG]# vi dmwatcher.ini 
[GRP453331]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /opt/dmdbms/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

3.4.8.5设置数据库模式和oguid

主库执行:
[root@dmdb01 opt]# docker exec -it dmwatcher_primary /bin/bash
root@dmdb01:/# cd /opt/dmdbms/bin
root@dmdb01:/opt/dmdbms/bin# ./disql sysdba/SYSDBA001
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
ALTER DATABASE PRIMARY;
SP_SET_OGUID(453331);
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
备库执行:
[root@dmdb02 DAMENG]# docker exec -it dmwatcher_standby /bin/bash
root@dmdb02:/# cd /opt/dmdbms/bin
root@dmdb02:/opt/dmdbms/bin# ./disql sysdba/SYSDBA001
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
ALTER DATABASE STANDBY;
SP_SET_OGUID(453331);
SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);

3.4.8.6修改监视器配置文件dmmonitor.ini

确认监视器配置如下:
[root@dmmonitor ~]# cd /dmdata/dmwatcher_monitor/DAMENG/
[root@dmmonitor DAMENG]# vi dmmonitor.ini 
MON_DW_Confirm = 1
MON_LOG_PATH = /opt/dmdbms/data/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 128
MON_LOG_SPACE_LIMIT = 1024
[GRP453331]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.1.11:52141
MON_DW_IP = 192.168.1.10:52141

3.4.8.7更新数据库授权

上传数据库的授权文件dm.key到/opt,更新主库和备库的数据库授权。

主库操作:
[root@dmdb01 ~]# cd /opt/
[root@dmdb01 opt]# docker cp dm.key dmwatcher_primary:/opt/dmdbms/bin
备库操作:
[root@dmdb02 ~]# cd /opt/
[root@dmdb02 opt]# docker cp dm.key dmwatcher_standby:/opt/dmdbms/bin

当然这里也可以在创建容器的时候就指定授权文件。指定-v参数:

-v /opt/dm.key:/opt/dmdbms/bin/dm.key

3.4.8.8重启所有容器

先监视器,再主库,后备库:
[root@dmmonitor DAMENG]# docker restart dmwatcher_monitor
[root@dmdb01 opt]# docker restart dmwatcher_primary
[root@dmdb02 opt]# docker restart dmwatcher_standby

3.4.8.9查看监视器状态

重启完主库和备库容器后,通过监视器查看集群是否启动成功,且主库和备库数据库都处于OPEN状态,且远程归档状态都是VALID。至此,主备集群部署完成。
image.png

3.4.9优化数据库参数

分别登陆主库和备库节点,执行数据库参数优化脚本AutoParaAdj3.4_dm8.sql。优化完成后,重启主备集群容器。

4集群启停方式

4.1集群启动

先启动主库,再启动备库,最后启动确认监视器。启动后,通过监视器查询集群状态。

[root@data43 DAMENG]# docker start dmwatcher_primary
[root@data44 DAMENG]# docker start dmwatcher_standby
[root@monitoring DAMENG]# docker start  dmwatcher_monitor

4.2集群关闭

先关闭确认监视器,再关闭主库,最后关闭备库。

[root@monitoring DAMENG]# docker stop  dmwatcher_monitor
[root@data43 DAMENG]# docker stop dmwatcher_primary
[root@data44 DAMENG]# docker stop dmwatcher_standby

4.3数据库登陆方式

方法(1):进入容器,使用disql客户端登陆

[root@data43 DAMENG]# docker exec -it dmwatcher_primary bash
root@data43:/# cd /opt/dmdbms/bin
root@data43:/opt/dmdbms/bin# ./disql sysdba/SYSDBA001
Server[LOCALHOST:5236]:mode is primary, state is open
login used time : 4.520(ms)
last login ip        : ::1
last login time      : 2023-05-24 17:12:49
login failed times   : 0
Whether password is expired : Not expired
disql V8

方法(2):使用达梦管理工具manager登陆:
image.png

5应用链接方式

(1)数据库驱动:进入容器,数据库驱动位于/opt/dmdbms/drivers目录,如
jdbc驱动,DmJdbcDriver18.jar(对应jdk1.8),DmJdbcDriver17.jar(对应jdk1.7)。
(2)URL链接方式:采用服务名的方式链接达梦主备集群。
配置文件不是xml文件,则配置如下:

jdbc:dm://DMDW?DMDW=(192.168.1.10:5236, 192.168.1.11:5236)&LOGIN_MODE=(1)

配置文件是xml文件,则配置如下:

jdbc:dm://DMDW?DMDW=(192.168.1.10:5236, 192.168.1.11:5236) &LOGIN_MODE=(1)

6docker参数解释

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服