docker下搭建达梦主备架构数据库、优化参数及其验证高可用性
专栏/培训园地/ 文章详情 /

docker下搭建达梦主备架构数据库、优化参数及其验证高可用性

干饭王 2024/04/01 1894 0 1
摘要

1.本文简介

本文深入探讨在docker容器下如何创建1主库1实时备库1监视器的达梦主备集群架构数据库,特别介绍达梦主备架构中参数最优配置。验证常见问题例如主库异常情况下,观察使用了服务名的业务在无需做任何变更的情况下,也能保持业务连续性,进而证明达梦主备集群架构的数据库是具有高可用性。

2.硬件资源情况

本次验证使用宿主机是Intel X86_64架构,操作系统为CentOS 7.9,内存8G,硬盘1T

[root@node1 ~]# 
[root@node1 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    8
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 165
Model name:            Intel(R) Core(TM) i3-10100 CPU @ 3.60GHz
Stepping:              3
CPU MHz:               3599.999
BogoMIPS:              7199.99
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              6144K
NUMA node0 CPU(s):     0-7
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 arat md_clear spec_ctrl intel_stibp flush_l1d arch_capabilities
[root@node1 ~]# 
[root@node1 ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

复制

[root@node1 ~]# 
[root@node1 ~]# free -g
              total        used        free      shared  buff/cache   available
Mem:              7           2           1           0           3           5
Swap:             0           0           0
[root@node1 ~]# 

复制

[root@node1 ~]#
[root@node1 ~]# lsblk
NAME   MAJ:MIN RM    SIZE RO TYPE MOUNTPOINT
sda      8:0    0      1T  0 disk 
├─sda1   8:1    0    300M  0 part /boot
├─sda2   8:2    0    7.9G  0 part 
└─sda3   8:3    0 1015.9G  0 part /
sr0     11:0    1   1024M  0 rom  
[root@node1 ~]#

复制

[root@node1 ~]# ip addr
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:be:50:75 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.52/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33
       valid_lft 73391sec preferred_lft 73391sec
[root@node1 ~]# 
[root@node1 ~]# 
[root@node1 ~]# ping www.baidu.com
PING www.a.shifen.com (14.119.104.254) 56(84) bytes of data.
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=1 ttl=56 time=9.92 ms
64 bytes from 14.119.104.254 (14.119.104.254): icmp_seq=2 ttl=56 time=10.6 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 9.927/10.304/10.682/0.390 ms
[root@node1 ~]# 

复制

3.搭建docker容器

3.1.安装必要的一些系统工具

[root@node1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 .....             
Complete!
[root@node1 ~]#

复制

3.2.添加软件源信息repo

[root@node1 ~]#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@node1 ~]#  yum makecache fast
Loaded plugins: fastestmirror, langpacks
......             
Complete!
[root@node1 ~]#

复制

3.3.更新并安装docker-ce

[root@node1 ~]#  yum makecache fast
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
......                                
Metadata Cache Created
[root@node1 ~]#

复制

[root@node1 ~]# yum -y install docker-ce docker-ce-cli containerd.io
Loaded plugins: fastestmirror, langpacks
......
Complete!
[root@node1 ~]# 

复制

3.4.开启docker服务

[root@node1 ~]# systemctl enable docker 
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@node1 ~]# 

复制

[root@node1 ~]# systemctl start docker
[root@node1 ~]# 

复制

3.5.检查版本

[root@node1 ~]# docker version
Client: Docker Engine - Community
 Version:           24.0.4
 API version:       1.43
 Go version:        go1.20.5
 Git commit:        3713ee1
 Built:             Fri Jul  7 14:54:21 2023
 OS/Arch:           linux/amd64
 Context:           default
Server: Docker Engine - Community
 Engine:
  Version:          24.0.4
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.5
  Git commit:       4ffc614
  Built:            Fri Jul  7 14:53:26 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.21
  GitCommit:        3dce8eb055cbb6872793272b4f20ed16117344f8
 runc:
  Version:          1.1.7
  GitCommit:        v1.1.7-0-g860f061
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[root@node1 ~]#

复制

4.docker下创建达梦数据主备

创建1主库1实时备库1监视器的达梦主备集群架构数据库。

4.1.主备集群架构规划

序号 角色 IP 端口
1 主库(primary) 172.20.0.2 35232
2 实时备库(standby) 172.20.0.3 35233
3 监视器(monitor) 172.20.0.4

4.2.关键参数介绍

4.2.1.docker容器库参数介绍

-p<映射端口:数据库端口>:例如-p 30236:5236 是指将容器中数据库默认端口5236 映射到宿主机上 30236 端口,应用可以通过宿主机 IP:30236 端口访问容器中数据库服务;此参数为必须配置参数。5236 是数据库的默认端口,数值不能替换;宿主机端口30236 是容器映射出来的,取值范围 30000~33000。
-name:指定容器名称如 dmsingle;此参数为必须配置参数。
-e MODE:用于区分部署单机或主备容器模式的选择,若 MODE=dmsingle,则镜像运行部署单机容器,若 MODE=docker_dmwatcher,则镜像运行部署主备集群容器;此参数为必须配置参数。
-e CLUSTER_IPS:达梦主备集群所有节点容器 IP,IP 之间用“,”隔开,第一个 IP 是监视器 IP,第二个 IP 是主节点IP,主节点 IP 之后的是所有备节点 IP
-e LD_LIBRARY_PATH:指定容器 LD_LIBRARY_PATH 环境变量
-e DMWATCHER_ROLE:达梦主备集群节点角色:主节点(primary) 、 备节点(standby)、监视器(monitor)
-e DW_NODES;当 mode=dmwatcher 时配置,达梦主备集群节点数,不包含监视器节点
-e DW_NO:当 mode=dmwatcher 时配置,INSTANCE_NAME后面的序号(顺序号),例如主节点为1,备节点依次为2,3
-v <宿主机目录> <镜像名>:使用宿主机本地磁盘目录来存放 dm8 容器里的数据库数据文件。挂载的容器目录为/opt/dmdbms/data,本地磁盘的挂载路径为/home/mnt/disks/dmsingle;此参数为必须配置参数。
<镜像名>:运行容器时所需要拉取的镜像,以镜像的“name:tag”格式输入,例如dm8:dm8_20230209_rev176349_x86_rh6_64;此参数为必须配置参数。
-e PAGE_SIZE 等其他参数:达梦数据库初始化实例参数可以通过“-e 参数名=参数值”方式进行指定,初始化实例详细参数介绍可以在《DM8_dminit 使用手册》进行查阅。此类参数为包含默认值的参数,若没有通过-e 方式指定的话,则以默认值运行容器

4.2.2.主备集群关键参数介绍

4.2.2.1.dmarch.ini文件参数介绍

4.2.2.1.1.节点1
ARCH_WAIT_APPLY            = 0   #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE                = LOCAL  #本地归档类型
ARCH_DEST                = /opt/dmdbms/data/DAMENG/arch/  #本地归档存放路径
ARCH_FILE_SIZE           = 256 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT         = 10240 #归档上限,单位 MB

[ARCHIVE_REALTIME1]
ARCH_TYPE                = REALTIME  #实时归档类型
ARCH_DEST                = GRP453331_DW2  #实时归档目标实例名

复制

4.2.2.1.2.节点2
ARCH_WAIT_APPLY            = 0   #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE                = LOCAL  #本地归档类型
ARCH_DEST                = /opt/dmdbms/data/DAMENG/arch/  #本地归档存放路径
ARCH_FILE_SIZE           = 256 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT         = 10240 #归档上限,单位 MB

[ARCHIVE_REALTIME1]
ARCH_TYPE                = REALTIME  #实时归档类型
ARCH_DEST                = GRP453331_DW1  #实时归档目标实例名

复制

4.2.2.2.dmmal.ini文件参数介绍

MAL_CHECK_INTERVAL         = 10  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定 MAL 链路断开的时间
MAL_TEMP_PATH              = /opt/dmdbms/data/malpath/  #临时文件目录
MAL_BUF_SIZE               = 512  #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE           = 2048  #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL         = 0  #MAL 消息压缩等级,0 表示不压缩

[MAL_INST1]
MAL_INST_NAME            = GRP453331_DW1  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 172.20.0.2  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 172.16.1.1  #实例的对外服务 IP 地址
MAL_INST_PORT            = 5236  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT              = 52141 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT         = 33141 #实例监听守护进程 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME            = GRP453331_DW2
MAL_HOST                 = 172.20.0.3
MAL_PORT                 = 61141
MAL_INST_HOST            = 172.16.1.2
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 52141
MAL_INST_DW_PORT         = 33141

复制

4.2.2.3.dmwatcher.ini文件参数介绍

[GRP453331]
DW_TYPE                  = GLOBAL  #全局守护类型
DW_MODE                  = AUTO  #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME            = 20  #远程守护进程故障认定时间
INST_ERROR_TIME          = 20  #本地实例故障认定时间
INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间
INST_OGUID               = 45331  #守护系统唯一 OGUID 值
INST_INI                 = /opt/dmdbms/data/DAMENG/dm.ini  #dm.ini 文件路径
INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
INST_STARTUP_CMD         = /opt/dmdbms/bin/dmserver  #命令行方式启动
RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭
DW_RECONNECT = 2        #让主节点coredump 结束前开始进行切主,2023年Q4版本新增,主节点core dump 结束前开始切主

复制

4.2.2.4.dmmonitor.ini文件参数介绍

MON_DW_CONFIRM             = 1  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = /opt/dmdbms/data/log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 32 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 0 #日志上限,单位 MB

[GRP453331]
MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP                = 172.20.0.2:52141 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 172.20.0.3:52141

复制

4.3.创建bridge网卡

使用net1的docker容器可通过net1网络相互通讯,且能被外网访问

[root@node1 ~]# ddocker network create --driver bridge  --subnet=172.20.0.0/24  --gateway 172.20.0.1  net1
bba9b239f696e61362442fc8e9e25abd643da9fc9b053a21c62cf812ebf70096
[root@node1 ~]#

复制

4.4.创建主库primary

[root@node1 disks]# docker run -d -p 35232: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=SYSDBA001 -e DMWATCHER_ROLE=primary  -e DW_NODES=2 -e DW_NO=1 -e CLUSTER_IPS="172.20.0.4,172.20.0.2,172.20.0.3" -e LD_LIBRARY_PATH=/opt/dmdbms/bin -v /home/mnt/disks/dmwatcher_primary:/opt/dmdbms/data dm8:dm8_20230629_rev187846_x86_rh6_64
557b093aeaa5e1988862534dec7048d8d6d6b7152ad42646508db2ed987ec2f5
[root@node1 disks]# 

复制

4.5.创建备库standby

[root@node1 disks]# 
[root@node1 disks]# docker run -d -p 35233:5236 --restart=always --name dmwatcher_standby --privileged=true --net net1 --ip 172.20.0.3 -e MODE=docker_dmwatcher -e PAGE_SIZE=16 -e CASE_SENSITIVE=1 -e UNICODE_FLAG=1 -e LENGTH_IN_CHAR=1 -e SYSDBA_PWD=SYSDBA001 -e DMWATCHER_ROLE=standby  -e DW_NODES=2 -e DW_NO=2 -e CLUSTER_IPS="172.20.0.4,172.20.0.2,172.20.0.3" -e LD_LIBRARY_PATH=/opt/dmdbms/bin -v /home/mnt/disks/dmwatcher_standby:/opt/dmdbms/data dm8:dm8_20230629_rev187846_x86_rh6_64
8e6b12f7c221cb6214b9bb6c786cbda9fcc69cc43349144e09e1bc4426049633
[root@node1 disks]# 

复制

4.6.创建监视器monitor

[root@node1 disks]# 
[root@node1 disks]# docker run -d --restart=always --name dmwatcher_monitor --privileged=true --net net1 --ip 172.20.0.4 -e MODE=docker_dmwatcher -e PAGE_SIZE=16 -e CASE_SENSITIVE=1 -e UNICODE_FLAG=1 -e LENGTH_IN_CHAR=1 -e SYSDBA_PWD=SYSDBA001 -e DMWATCHER_ROLE=monitor -e CLUSTER_IPS="172.20.0.4,172.20.0.2,172.20.0.3" -e LD_LIBRARY_PATH=/opt/dmdbms/bin -v /home/mnt/disks/dmwatcher_monitor:/opt/dmdbms/data dm8:dm8_20230629_rev187846_x86_rh6_64
185e5835554b877719295f437558b80e5608e2b104c9d60ea8bf5767afe0560b
[root@node1 disks]# 

复制

4.7.检查主备集群日志

4.7.1.主库日志

docker logs -f -n10 dmwatcher_primary #查看主数据库容器日志

==> /opt/dmdbms/log/DmServiceDMSERVER.log <==
checkpoint requested by CKPT_INTERVAL, rlog free space[536849408], used space[13312]
checkpoint generate by ckpt_interval
checkpoint begin, used_space[13312], free_space[536849408]...
checkpoint end, 0 pages flushed, used_space[13824], free_space[536848896].

复制

4.7.2.备库日志

docker logs -f -n10 dmwatcher_standby #查看备数据库容器日志

==> /opt/dmdbms/log/DmServiceDMSERVER.log <==
checkpoint requested by CKPT_INTERVAL, rlog free space[536848384], used space[14336]
checkpoint generate by ckpt_interval
checkpoint begin, used_space[14336], free_space[536848384]...
checkpoint end, 0 pages flushed, used_space[14848], free_space[536847872].

复制

4.7.3.监视器日志

docker logs -f -n10 dmwatcher_monitor #查看监视器容器日志

[monitor]         2024-03-31 22:48:43: 
                  GROUP            OGUID       MON_CONFIRM MODE         MPP_FLAG  
                  GRP453331        453331      TRUE        AUTO         FALSE     


                  <<DATABASE GLOBAL INFO:>>
                  DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
                  172.20.0.2          52141        2024-03-31 22:48:42  GLOBAL    VALID     OPEN           GRP453331_DW1    OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

                  EP INFO:
                  INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE     RTYPE     RSTAT       FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
                  172.20.0.2          5236       OK        GRP453331_DW1    OPEN        PRIMARY   0          0                REALTIME  VALID       4726            38650           4726            38650           NONE                  

                  <<DATABASE GLOBAL INFO:>>
                  DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
                  172.20.0.3          52141        2024-03-31 22:48:42  GLOBAL    VALID     OPEN           GRP453331_DW2    OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID    

                  EP INFO:
                  INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE     RTYPE     RSTAT       FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
                  172.20.0.3          5236       OK        GRP453331_DW2    OPEN        STANDBY   0          0                REALTIME  VALID       4722            38650           4722            38650           NONE                  

                  DATABASE(GRP453331_DW2) APPLY INFO FROM (GRP453331_DW1), REDOS_PARALLEL_NUM (1), WAIT_APPLY(FALSE):
                  DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4726, 4726, 4726], (RLSN, SLSN, KLSN)[38650, 38650, 38650], N_TSK[0], TSK_MEM_USE[0]
                  REDO_LSN_ARR: (38650)

复制

至此,通过查看主备集群日志,可以发现1主1备1监视器的主备集群架构已成功搭建。

4.8.收尾操作

4.8.1.定时备份

根据应用需求,定制备份策略如下所示
备份类型 备份周期 备份时间
全量备份 每周 每周六 22 点
增量备份 每天 除周六外每天 22 点
删除备份 每天 每天 23 点 30

4.8.1.1.创建作业系统表

登录数据库执行以下命令,

SP_INIT_JOB_SYS(1);

复制

4.8.1.2.全量备份

每周六 23 点全备

call SP_CREATE_JOB('bakfull',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakfull');
call SP_ADD_JOB_STEP('bakfull', 'bak1', 6, '01020000/dmbak', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakfull', 'std1', 1, 2, 1, 64, 0, '22:00:00', NULL, '2021-11-01 21:17:22', NULL, '');
call SP_ADD_JOB_SCHEDULE('bakfull', 'once_test', 1, 0, 0, 0, 0, NULL, NULL, sysdate+1/1440, NULL, '');
call SP_JOB_CONFIG_COMMIT('bakfull');

复制

4.8.1.3.累积增量备份

每周除周六外每天 23 点增量备份

call SP_CREATE_JOB('bakincr',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakincr');
call SP_ADD_JOB_STEP('bakincr', 'bak2', 6, '41010000/dmbak|/dmbak', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakincr', 'std2', 1, 2, 1, 63, 0, '22:00:00', NULL, '2021-11-01 21:19:30', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakincr');

复制

4.8.1.4.备份定期删除

每天 23:30 删除 14 天前备份

call SP_CREATE_JOB('delbak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('delbak');
call SP_ADD_JOB_STEP('delbak','bak1',0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dmdata/dmbak'');call sp_db_bakset_remove_batch(''DISK'',now()-14);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('delbak', 'del01', 1, 1, 1, 0, 0, '23:30:00', NULL, '2020-11-02 14:48:41', NULL, '');
call SP_JOB_CONFIG_COMMIT('delbak');

复制

4.8.2.自动收集统计信息

每周6凌晨1点开始收集

call SP_CREATE_JOB('statistics',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('statistics');
call SP_ADD_JOB_STEP('statistics', 'statistics1', 0, 'begin
for rs in (select ''sf_set_SESSION_para_value(''''HAGR_HASH_SIZE'''',(select cast(
case when max(table_rowcount(owner,table_name))<=(select max_value from v$dm_ini 
where para_Name=''''HAGR_HASH_SIZE'''') and max(table_rowcount(owner,table_name))>=(
select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''')  then 
max(table_rowcount(owner,table_name)) when max(table_rowcount(owner,table_name))<(
select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') then
 (select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') else 
 (select max_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') end as bigint) 
 from dba_tables where owner=''''''||NAME||''''''));''
sql1,''DBMS_STATS.GATHER_SCHEMA_STATS(''''''||NAME||'''''',100,TRUE,''''FOR ALL COLUMNS SIZE AUTO'''');'' 
sql2
 from SYS.SYSOBJECTS where TYPE$=''SCH'' ) loop
execute  immediate rs.sql1;
execute  immediate rs.sql2;
end loop;
end;', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('statistics', 'statistics1', 1, 2, 1, 64, 0, '01:00:00', NULL, '2021-06-09 22:54:37', NULL, '');
call SP_JOB_CONFIG_COMMIT('statistics');

复制

5.验证测试

使用了服务名的Jmeter在无需做任何变更的情况下,也能保持Jmeter连续性,进而证明达梦主备集群架构的数据库具有高可用性。

5.1.业务服务名配置

达梦数据库提供客户端(通常为应用)通过服务名连接集群的方式,在客户端所在的服务器(通常为应用服务器)的指定位置配置 dm_svc.conf 文件,该文件路径为:32/64位Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;在 Linux 平台下,此文件位于/etc 目录。
如果该文件在以上位置不存在,直接新建dm_svc.conf 文件即可。
文件内容:

# 以#开头的行表示是注释
# 全局配置区
DMDW=(192.168.0.52:35232,192.168.0.52:35233)
TIME_ZONE=(+480) #表示+8:00 时区
LOGIN_ENCRYPT=(0)
DIRECT=(Y)
# 服务配置区
[DMDW]
LOGIN_MODE=(1) #只连主库

复制

image.png

图:Jmeter的服务名配置

5.2.业务查询验证

image.png

图:Jmeter可正常查询

5.3.验证主库异常对业务的影响

5.3.1.业务查询验证

image.png

图:Jmeter可正常查询

5.3.2.模拟主库故障

[root@node1 ~]# docker ps 
CONTAINER ID   IMAGE                                   COMMAND                  CREATED          STATUS          PORTS                                           NAMES
185e5835554b   dm8:dm8_20230629_rev187846_x86_rh6_64   "/bin/bash /opt/star…"   28 minutes ago   Up 28 minutes   5236/tcp, 52141/tcp, 61141/tcp                  dmwatcher_monitor
8e6b12f7c221   dm8:dm8_20230629_rev187846_x86_rh6_64   "/bin/bash /opt/star…"   29 minutes ago   Up 29 minutes   52141/tcp, 61141/tcp, 0.0.0.0:35233->5236/tcp   dmwatcher_standby
557b093aeaa5   dm8:dm8_20230629_rev187846_x86_rh6_64   "/bin/bash /opt/star…"   29 minutes ago   Up 29 minutes   52141/tcp, 61141/tcp, 0.0.0.0:35232->5236/tcp   dmwatcher_primary
89e71c7d22bd   dm8:dm8_20230629_rev187846_x86_rh6_64   "/bin/bash /opt/star…"   35 hours ago     Up 3 hours      52141/tcp, 61141/tcp, 0.0.0.0:35236->5236/tcp   dmsingle
[root@node1 ~]# 
[root@node1 ~]# docker kill dmwatcher_primary
dmwatcher_primary
[root@node1 ~]# docker start dmwatcher_primary
dmwatcher_primary
[root@node1 ~]# 


复制

5.3.3.业务查询验证

image.png

图:Jmeter可感知数据库故障

image.png

图:Jmeter可正常查询

通过模拟主库故障,在故障前后,使用了服务名的Jmeter在无须做任何变更的情况下,也能保持业务连续性,进而证明达梦主备集群架构的数据库具有高可用性。

6.总结

本文详细描述如何在docker容器下创建1主库1实时备库1监视器的达梦主备集群架构数据库,同时也特别介绍达梦主备架构中参数最优配置。
通过模拟主库异常情况后,观察使用了服务名的业务在无需做任何变更的情况下,也能保持业务连续性,进而证明达梦主备集群架构的数据库是具有高可用性。

评论
后发表回复
柠檬
问一下 你和这个docker镜像是官网下载的吗?我看官网说下载的不支持集群
发布于 2024/07/17 14:17

作者

文章

阅读量

获赞

扫一扫
联系客服