Files
Knowledge/1 使用/数据库/docker部署DM8主备集群.md
T

454 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
> 虽然使用docker部署比较方便,但是不建议使用docker部署数据库,尤其是比较关键的系统,负载比较大的系统。
# 1 部署规划
本次部署的是2节点主备集群+1个确认监视器的集群架构。使用的操作系统是centos7.6,cpu架构是x86。
## 1.1集群ip规划
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/202305290923542FAJY1GVRXEZEBMM4T)
## 1.2集群端口规划
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/202305290925170RCTGTCK8A6IC53HDA)
## 1.3实例参数规划
数据库的初始化参数至关重要,一些重要参数如页大小,数据库字符集和大小写是否敏感等,一旦初始化实例是不能直接修改的,如果要修改,必须重新再初始化实例,所以一定要和应用人员沟通清楚。
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/20230529092620G28VSVZGK73QAK7VR5)
## 1.4磁盘映射
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/20230529092705BA00UEWDUPGPX5U6T5)
## 1.5目录规划(对应docker内)
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/202305290927573JU1SBS0TWK18VNT5F)
# 2 部署前宿主机优化
## 2.1关闭防火墙
```gauss
systemctl stop firewalld
systemctl disable firewalld
```
## 2.2关闭selinux
容器运行需要对/proc/self/attr/keycreate有写权限,因此需要将SELINUX配置为disable。
```awk
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
```
# 3 部署步骤
## 3.1 部署docker
```autoit
[root@docker ~]#yum install -y docker
启动docker:
[root@docker ~]# systemctl start docker
```
## 3.2 加载数据库主备集群docker镜像包
根据操作系统版本和cpu架构,申请对应的DM8主备集群docker镜像包,下载后,上传到主节点服务器,如/opt目录。
执行以下命令,加载docker镜像:
```stylus
docker load -i dm8_20230224_rev178822_x86_rh6_64_docker_dw.tar
```
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/20230529093338XR209LL1HFDXAVE3XC)
查看加载的镜像:docker images
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/202305290934060KNL9GQOWE709YX59E)
镜像重命名:
```crmsh
docker tag dmwatcher:dm8_20230224_rev178822_x86_rh6_64_docker_dw dmwatcher:dm8_dw
```
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/20230529093428N2BBO716C4WPHJC3Y4)
## 3.3配置docker网络
本次部署主备集群,主库节点、备库节点和监视器节点分别部署在3台服务器上,所以采用HOST模式(容器使用宿主机的IP和端口)。这种方式需要在/etc/hosts文件中配置映射关系,否则容器运行后可能拿到的地址是127.0.0.1,而非本机的真正IP地址。三台服务器均需修改,更改如下:
```accesslog
主库节点:
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运行监视器容器
```routeros
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运行备库容器
```routeros
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运行主库容器
```routeros
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查看运行的容器
```ebnf
docker ps
```
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/20230529094945UDY9MTRAOKJGEVOV37)
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/20230529094956OJDH9R52YER1G8EYP9)
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/20230529095003RVPYRD83N033OLF6Z2)
### 3.4.5查看容器应用运行日志:
```powershell
docker logs dmwatcher_monitor -f
docker logs dmwatcher_standby -f
docker logs dmwatcher_primary -f
```
会发现主库这里一直卡在传输文件到备节点和监视器节点。
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/20230529095244DS7CMC4JUVHGU54EWR)
### 3.4.6手动拷贝软件和主库备份到其他节点
```elixir
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](https://download.dameng.com/eco-file-server/file/eco/preview/202305290954161EWWUQMJKB0ISUBE5W)
### 3.4.7重启所有节点的容器
重启主库、备库和监视器的容器,会自动对软件包和备份文件进行解压执行。
```maxima
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
```makefile
主库设置:
[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配置文件
```makefile
主库和备库的配置是一样的,主库配置如下:
[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
```makefile
主库设置如下:
[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
```makefile
主库配置如下:
[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
```elixir
主库执行:
[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
```makefile
确认监视器配置如下:
[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,更新主库和备库的数据库授权。
```vim
主库操作:
[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参数:
```awk
-v /opt/dm.key:/opt/dmdbms/bin/dm.key
```
#### 3.4.8.8重启所有容器
```autoit
先监视器,再主库,后备库:
[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](https://download.dameng.com/eco-file-server/file/eco/preview/20230529101051IY61R6K5GIYTY1ZA1M)
### 3.4.9优化数据库参数
分别登陆主库和备库节点,执行数据库参数优化脚本AutoParaAdj3.4_dm8.sql。优化完成后,重启主备集群容器。
# 4集群启停方式
## 4.1集群启动
先启动主库,再启动备库,最后启动确认监视器。启动后,通过监视器查询集群状态。
```autoit
[root@data43 DAMENG]# docker start dmwatcher_primary
[root@data44 DAMENG]# docker start dmwatcher_standby
[root@monitoring DAMENG]# docker start dmwatcher_monitor
```
## 4.2集群关闭
先关闭确认监视器,再关闭主库,最后关闭备库。
```autoit
[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客户端登陆
```elixir
[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](https://download.dameng.com/eco-file-server/file/eco/preview/20230529101657VHJHIWV4S8PPBDOO0I)
# 5应用链接方式
(1)数据库驱动:进入容器,数据库驱动位于/opt/dmdbms/drivers目录,如
jdbc驱动,DmJdbcDriver18.jar(对应jdk1.8),DmJdbcDriver17.jar(对应jdk1.7)。
(2)URL链接方式:采用服务名的方式链接达梦主备集群。
配置文件不是xml文件,则配置如下:
```apache
jdbc:dm://DMDW?DMDW=(192.168.1.10:5236, 192.168.1.11:5236)&LOGIN_MODE=(1)
```
配置文件是xml文件,则配置如下:
```apache
jdbc:dm://DMDW?DMDW=(192.168.1.10:5236, 192.168.1.11:5236) &LOGIN_MODE=(1)
```
# 6docker参数解释
![image.png](https://download.dameng.com/eco-file-server/file/eco/preview/20230529101924UHEN1P5RWAL4CO7KZQ)
docker run -d -p 15236:5236 --restart=always --name dmwatcher_primary --privileged=true --net docker1 --ip 172.28.0.2
-e MODE=docker_dmwatcher
-e PAGE_SIZE=32
-e CASE_SENSITIVE=1
-e UNICODE_FLAG=1
-e BLANK_PAD_MODE=1
-e SYSDBA_PWD=Skh_2025 -e SYSAUDITOR_PWD=Skh_2025 -e DMWATCHER_ROLE=primary -e DW_NO=1 -e CLUSTER_IPS="172.28.0.4,172.28.0.2,172.28.0.3" -v /data/deploy/dm-server/dm8/image/dm.key:/opt/dmdbms/bin/dm.key dm8:dm8_20241230_rev255012_HWarm_kylin10_64
#!/bin/env bash
# 运行主节点容器
name=dmwatcher_primary
img=dm8:dm8_20241230_rev255012_x86_kylin10_64
docker rm -vf $name
docker run -d \
-p 30136:5236 \
--restart=always \
--name dmwatcher_primary \
--privileged=true \
--net net1 \
--ip 172.20.0.2 \
-e MODE=docker_dmwatcher \
-e PAGE_SIZE=16 \
-e CASE_SENSITIVE=1 \
-e UNICODE_FLAG=1 \
-e LENGTH_IN_CHAR=1 \
-e SYSDBA_PWD=sunyard123 \
-e DMWATCHER_ROLE=primary \
-e DW_NO=1 \
-e CLUSTER_IPS="172.20.0.2,172.20.0.3,172.20.0.4" \
-e LD_LIBRARY_PATH=/opt/dmdbms/bin \
-v `pwd`/dmwatcher_primary:/opt/dmdbms/data \
-v `pwd`/dm1701120153.key:/opt/dmdbms/bin/dm.key \
$img