vault backup: 2026-11-07 16:33:44

This commit is contained in:
cheney
2026-11-07 16:33:55 +08:00
commit 7015312702
1208 changed files with 132432 additions and 0 deletions
@@ -0,0 +1,453 @@
> 虽然使用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