本次部署的是2节点主备集群+1个确认监视器的集群架构。使用的操作系统是centos7.6,cpu架构是x86。
数据库的初始化参数至关重要,一些重要参数如页大小,数据库字符集和大小写是否敏感等,一旦初始化实例是不能直接修改的,如果要修改,必须重新再初始化实例,所以一定要和应用人员沟通清楚。
systemctl stop firewalld
systemctl disable firewalld
容器运行需要对/proc/self/attr/keycreate有写权限,因此需要将SELINUX配置为disable。
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
#3部署步骤
[root@docker ~]#yum install -y docker
启动docker:
[root@docker ~]# systemctl start docker
根据操作系统版本和cpu架构,申请对应的DM8主备集群docker镜像包,下载后,上传到主节点服务器,如/opt目录。
执行以下命令,加载docker镜像:
docker load -i dm8_20230224_rev178822_x86_rh6_64_docker_dw.tar
查看加载的镜像:docker images
镜像重命名:
docker tag dmwatcher:dm8_20230224_rev178822_x86_rh6_64_docker_dw dmwatcher:dm8_dw
本次部署主备集群,主库节点、备库节点和监视器节点分别部署在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
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
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
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
注意:需要根据实际情况,设置对应的数据库页大小,字符集,大小写是否敏感,字符以字节还是字符为单位等数据库初始化参数。
docker ps
docker logs dmwatcher_monitor -f
docker logs dmwatcher_standby -f
docker logs dmwatcher_primary -f
会发现主库这里一直卡在传输文件到备节点和监视器节点。
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
重启主库、备库和监视器的容器,会自动对软件包和备份文件进行解压执行。
docker restart dmwatcher_primary
docker restart dmwatcher_standby
docker restart dmwatcher_monitor
分别各节点日志,发现主备节点都显示SYSTEM IS READY,启动到了MOUNT状态,但是一直无法OPEN。监视器也显示不对,这时候要排查各节点的配置文件是否正确,且主备库是否设置了primary/standby模式,是否设置了相同的oguid。
主库设置:
[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 #打开归档配置
主库和备库的配置是一样的,主库配置如下:
[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
主库设置如下:
[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
主库配置如下:
[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
主库执行:
[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);
确认监视器配置如下:
[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
上传数据库的授权文件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
先监视器,再主库,后备库:
[root@dmmonitor DAMENG]# docker restart dmwatcher_monitor
[root@dmdb01 opt]# docker restart dmwatcher_primary
[root@dmdb02 opt]# docker restart dmwatcher_standby
重启完主库和备库容器后,通过监视器查看集群是否启动成功,且主库和备库数据库都处于OPEN状态,且远程归档状态都是VALID。至此,主备集群部署完成。
分别登陆主库和备库节点,执行数据库参数优化脚本AutoParaAdj3.4_dm8.sql。优化完成后,重启主备集群容器。
先启动主库,再启动备库,最后启动确认监视器。启动后,通过监视器查询集群状态。
[root@data43 DAMENG]# docker start dmwatcher_primary
[root@data44 DAMENG]# docker start dmwatcher_standby
[root@monitoring DAMENG]# docker start dmwatcher_monitor
先关闭确认监视器,再关闭主库,最后关闭备库。
[root@monitoring DAMENG]# docker stop dmwatcher_monitor
[root@data43 DAMENG]# docker stop dmwatcher_primary
[root@data44 DAMENG]# docker stop dmwatcher_standby
方法(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登陆:
(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)
文章
阅读量
获赞