454 lines
14 KiB
Markdown
454 lines
14 KiB
Markdown
> 虽然使用docker部署比较方便,但是不建议使用docker部署数据库,尤其是比较关键的系统,负载比较大的系统。
|
||
|
||
|
||
# 1 部署规划
|
||
|
||
本次部署的是2节点主备集群+1个确认监视器的集群架构。使用的操作系统是centos7.6,cpu架构是x86。
|
||
|
||
## 1.1集群ip规划
|
||
|
||

|
||
|
||
## 1.2集群端口规划
|
||
|
||

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

|
||
|
||
## 1.4磁盘映射
|
||
|
||

|
||
|
||
## 1.5目录规划(对应docker内)
|
||
|
||

|
||
|
||
# 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
|
||
```
|
||
|
||

|
||
查看加载的镜像:docker images
|
||

|
||
镜像重命名:
|
||
|
||
```crmsh
|
||
docker tag dmwatcher:dm8_20230224_rev178822_x86_rh6_64_docker_dw dmwatcher:dm8_dw
|
||
```
|
||
|
||

|
||
|
||
## 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
|
||
```
|
||
|
||

|
||

|
||

|
||
|
||
### 3.4.5查看容器应用运行日志:
|
||
|
||
```powershell
|
||
docker logs dmwatcher_monitor -f
|
||
docker logs dmwatcher_standby -f
|
||
docker logs dmwatcher_primary -f
|
||
```
|
||
|
||
会发现主库这里一直卡在传输文件到备节点和监视器节点。
|
||

|
||
|
||
### 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
|
||
```
|
||
|
||

|
||
|
||
### 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。至此,主备集群部署完成。
|
||

|
||
|
||
### 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登陆:
|
||

|
||
|
||
# 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参数解释
|
||
|
||

|
||
|
||
|
||
|
||
|
||
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
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|