《Linux运维实战:基于银河麒麟V10+鲲鹏920CPU部署DM8数据库主备集群》

devtools/2024/9/30 6:31:02/

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结


一、安装前准备

1.1、硬件环境

数据守护集群安装部署前需要额外注意网络环境和磁盘 IO 配置情况,其他环境配置项建议请参考安装前准备工作。


1.2、集群规划

说明:由于资源限制只有2台服务器,确认监视器IP为172.18.1.42。

- A机器(主库) B机器(备库) 说明
操作系统 Kylin Linux Advanced Server V10 (Tercel) Kylin Linux Advanced Server V10 (Tercel)
CPU架构 ARM64 ARM64
主机名 dmdb01 dmdb02
业务IP 172.18.1.42 172.18.1.67
心跳IP 172.18.1.42 172.18.1.67
实例名 dmdb01 dmdb02
实例端口 5236 5236
MAL端口 5336 5336
MAL守护进程端口 5436 5436
守护进程端口 5536 5536
OGUID 45331 45331
守护组 GRP1 GRP1
安装目录 /home/dmdba /dmdbms /home/dmdba /dmdbms
实例目录 /data/dmdba/data /data/dmdba/data
归档目录 /data/dmdata/arch /data/dmdata/arch
备份目录 /data/dmdata/dmbak /data/dmdata/dmbak

1.3、集群架构

在这里插入图片描述

实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。

实时主备系统中, 主库提供完整的数据库功能,备库提供只读服务。主库修改数据产生的Redo日志,通过实时归档机制,在写入联机Redo日志文件之前发送到备库,实时备库通过重演Redo日志与主库保持数据同步。当主库出现故障时,备库在将所有Redo日志重演结束后,就可以切换为主库对外提供数据库服务。


1.4、切换模式说明

切换方式 dmarch dmwatcher dmmonitor 监视器要求
故障手动切换 ARCH_WAIT_APPLY=0 DW_MODE=MANUAL MON_DW_CONFIRM=0 1、手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
故障自动切换 ARCH_WAIT_APPLY=0或ARCH_WAIT_APPLY=1 DW_MODE=AUTO MON_DW_CONFIRM=1 1、手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。2、自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。

1、ARCH_WAIT_APPLY 参数,设置为 0:高性能模式;设置为 1:事务一致模式。
2、故障手动切换情境下 ARCH_WAIT_APPLY 只能为 0。故障自动切换情境下 ARCH_WAIT_APPLY 可以为 0,也可以为 1。
3、ARCH_WAIT_APPLY 参数设置的判断依据为业务是否要查询备机最新数据。如果需要,则配置为 1(较大性能衰减);如果不需要,则配置为 0。


二、初始化环境

1.1、关闭防火墙和selinux

说明:以下操作分别在dmdb01和dmdb02主机上执行。

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux

1.2、修改主机名

说明:分别在对应主机上修改主机名。

[root@dmdb01 ~]# hostnamectl set-hostname dmdb01 && bash 
[root@dmdb02 ~]# hostnamectl set-hostname dmdb02 && bash 

1.3、修改hosts文件

说明:以下操作分别在dmdb01和dmdb02主机上执行。

vim /etc/hosts
172.18.1.42 dmdb01 
172.18.1.67 dmdb02

1.4、新建数据库管理用户和组

说明:以下操作分别在dmdb01和dmdb02主机上执行。

# 1、创建用户组dinstall
[root@dmdb01 ~]# groupadd dinstall -g 2001
# 2、创建用户dmdba
[root@dmdb01 ~]# useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
# 3、修改dmdba用户密码
[root@dmdb01 ~]# passwd dmdba

1.5、修改内核参数

说明:以下操作分别在dmdb01和dmdb02主机上执行。

[root@dmdb01 ~]# vi /etc/sysctl.conf
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
kernel.core_pattern = /data/dmdata/core.%e.%p
vm.swappiness=10
vm.dirty_background_ratio = 0
vm.min_free_kbytes = 2097152使参数生效,执行
sysctl -p

1.6、修改文件打开最大数

说明:以下操作分别在dmdb01和dmdb02主机上执行。

# 执行以下命令,修改dmdba用户资源限制,文件末尾添加如下内容:
[root@dmdb01 ~]# vim /etc/security/limits.conf
dmdba soft nice 0
dmdba hard nice 0
dmdba soft as unlimited
dmdba hard as unlimited
dmdba soft fsize unlimited
dmdba hard fsize unlimited
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft data unlimited
dmdba hard data unlimited

1.7、目录规划及权限设置

说明:以下操作分别在dmdb01和dmdb02主机上执行。

1、创建目录

# 实例保存目录
[root@dmdb01 ~]# mkdir /data/dmdata/data -pv
# 归档保存目录
[root@dmdb01 ~]# mkdir /data/dmdata/arch -pv
# 备份保存目录
[root@dmdb01 ~]# mkdir /data/dmdata/dmbak -pv

2、设置目录权限

# 设置目录属主和属组dmdba:dinstall,并给路径下的文件设置755权限
[root@dmdb01 ~]# chmod 755 /data
[root@dmdb01 ~]# cd /data
[root@dmdb01 ~]# chown -R dmdba:dinstall dmdata
[root@dmdb01 ~]# chown -R dmdba:dinstall dmdata/data
[root@dmdb01 ~]# chown -R dmdba:dinstall dmdata/arch
[root@dmdb01 ~]# chown -R dmdba:dinstall dmdata/dmbak
[root@dmdb01 ~]# chmod -R 755 dmdata
[root@dmdb01 ~]# chmod -R 755 dmdata/data
[root@dmdb01 ~]# chmod -R 755 dmdata/arch
[root@dmdb01 ~]# chmod -R 755 dmdata/dmbak

1.8、外挂iso文件

说明:以下操作分别在dmdb01和dmdb02主机上执行。

[root@dmdb01 ~]# mkdir -p /dmiso
[root@dmdb01 ~]# mount -o loop dm8_20240123_HWarm_kylin10_64.iso /dmiso/ 

1.9、配置环境变量

说明:以下操作分别在dmdb01和dmdb02主机上执行。

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ vim /home/dmdba/.bash_profile 
export DM_HOME=/home/dmdba/dmdbms
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin

三、安装数据库软件

说明:以下操作分别在dmdb01和dmdb02主机上执行,如果监视器采用单独一台主机安装,则也需要安装数据库软件。

[root@dmdb01 ~]# su - dmdba
Last login: Mon Apr 22 16:10:54 CST 2024 on pts/0
[dmdba@dmdb01 ~]$ cd /dmiso/
[dmdba@dmdb01 dmiso]$ ./DMInstall.bin -i
[root@dmdb01 ~]# /home/dmdba/dmdbms/script/root/root_installer.sh

四、配置A机器

说明:以下操作只需在dmdb01主机上执行。

4.1、初始化实例并备份数据

4.1.1、初始化实例

[dmdba@dmdb01 ~]$ dminit PATH=/data/dmdata/data PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 LENGTH_IN_CHAR=1 CASE_SENSITIVE=0 LOG_SIZE=2048 DB_NAME=dmdb INSTANCE_NAME=dmdb01 PORT_NUM=5236 SYSDBA_PWD="DyfN8pS#8xNCyrLSH" SYSAUDITOR_PWD="DyfN8pS#8xNCyrLSH"

执行结果,如下图所示:
在这里插入图片描述

初始化参数详解,如下所示:

# PATH:初始数据库存放的路径
# PAGE_SIZE:数据页大小(8),可选值:4, 8, 16, 32,单位:K
# EXTENT_SIZE:数据文件使用的簇大小(16),可选值:16, 32, 64,单位:页
# CHARSET:字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
# LENGTH_IN_CHAR:VARCHAR类型长���是否以字符为单位(N),可选值:Y/N,1/0
# CASE_SENSITIVE:大小敏感(Y),可选值:Y/N,1/0
# LOG_SIZE:日志文件大小(256),单位为:M,范围为:256M ~ 8G
# DB_NAME:数据库名(DAMENG)
# INSTANCE_NAME:实例名(DMSERVER)
# PORT_NUM:监听端口号(5236)
# SYSDBA_PWD:设置SYSDBA密码(SYSDBA)
# SYSAUDITOR_PWD:设置SYSAUDITOR密码(SYSAUDITOR)

4.1.2、修改备份目录

说明:当前环境,指定备份目录为/data/dmdata/dmbak,所以需要修改dm.ini文件。

[dmdba@dmdb01 ~]$ vim /data/dmdata/data/dmdb/dm.iniBAK_PATH                        = /data/dmdata/dmbak              #backup file path

4.1.3、前台启动服务

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/dmserver /data/dmdata/data/dmdb/dm.ini 

执行结果,如下图所示:

在这里插入图片描述


4.1.4、开启归档

说明:由于实例服务在前台启动,所以需要另开一个shell终端,执行如下操作。

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/data/dmdata/arch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=0';
SQL> ALTER DATABASE OPEN;

执行结果,如下图所示:

在这里插入图片描述


4.1.5、备份数据

说明:由于实例服务在前台启动,所以需要另开一个shell终端,执行如下操作。

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> BACKUP DATABASE BACKUPSET '/data/dmdata/dmbak/DB_dmdb_FULL_2024_04_23';

执行结果,如下图所示:
在这里插入图片描述


4.1.6、修改dm.ini

说明:由于实例服务在前台启动,所以需要另开一个shell终端,执行如下操作。

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);

执行结果,如下图所示:
在这里插入图片描述


4.1.7、关闭前台实例服务

说明:由于实例服务在前台启动,所以只需在键盘上使用Ctrl+c键,即可关闭实例服务。


4.2、修改dmarch.ini文件

# 增加如下内容
[dmdba@dmdb01 ~]$ vim /data/dmdata/data/dmdb/dmarch.ini 
[ARCHIVE_REALTIME1]
ARCH_TYPE                = REALTIME  #实时归档类型
ARCH_DEST                = dmdb02    #实时归档目标实例名

如下图所示:
在这里插入图片描述


4.3、创建dmmal.ini文件

[dmdba@dmdb01 ~]$ vim /data/dmdata/data/dmdb/dmmal.ini
MAL_CHECK_INTERVAL         = 10  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定 MAL 链路断开的时间
MAL_TEMP_PATH              = /data/dmdata/data/dmdb/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            = dmdb01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 172.18.1.42  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5336  #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 172.18.1.42  #实例的对外服务 IP 地址
MAL_INST_PORT            = 5236  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT              = 5436  #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT         = 5536  #实例监听守护进程 TCP 连接的端口[MAL_INST2]
MAL_INST_NAME            = dmdb02 
MAL_HOST                 = 172.18.1.67
MAL_PORT                 = 5336
MAL_INST_HOST            = 172.18.1.67
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 5436
MAL_INST_DW_PORT         = 5536

如下图所示:
在这里插入图片描述


4.4、创建dmwatcher.ini文件

[dmdba@dmdb01 ~]$ vim /data/dmdata/data/dmdb/dmwatcher.ini
[GRP1]
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                 = /data/dmdata/data/dmdb/dm.ini  #dm.ini 文件路径
INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
INST_STARTUP_CMD         = /home/dmdba/dmdbms/bin/dmserver  #命令行方式启动
RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭

4.5、拷贝备份文件

说明:拷贝备份文件到B机器,即dmdb02实例主机。

[dmdba@dmdb01 ~]$ scp -r /data/dmdata/dmbak/DB_dmdb_FULL_2024_04_23/ dmdba@172.18.1.67:/data/dmdata/dmbak

如下图所示:

在这里插入图片描述


4.6、注册服务

[root@dmdb01 ~]# cd /home/dmdba/dmdbms/script/root/
[root@dmdb01 root]# ./dm_service_installer.sh -t dmserver -p dmdb01 -dm_ini  /data/dmdata/data/dmdb/dm.ini -m mount
[root@dmdb01 root]# ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /data/dmdata/data/dmdb/dmwatcher.ini

如下图所示:

在这里插入图片描述

若要删除自启,可利用如下方式:

[root@dmdb01 ~]# cd /home/dmdba/dmdbms/script/root/
[root@dmdb01 root]# ./dm_service_uninstaller.sh -n DmServicedmdb01
[root@dmdb01 root]# ./dm_service_uninstaller.sh -n DmWatcherServiceWatcher

五、配置B机器

说明:以下操作只需在dmdb02主机上执行。

5.1、初始化实例

[root@dmdb02 ~]# su - dmdba
[dmdba@dmdb02 ~]$ dminit PATH=/data/dmdata/data PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 LENGTH_IN_CHAR=1 CASE_SENSITIVE=0 LOG_SIZE=2048 DB_NAME=dmdb INSTANCE_NAME=dmdb02 PORT_NUM=5236 SYSDBA_PWD="DyfN8pS#8xNCyrLSH" SYSAUDITOR_PWD="DyfN8pS#8xNCyrLSH"

执行结果,如下图所示:
在这里插入图片描述

初始化参数详解,如下所示:

# PATH:初始数据库存放的路径
# PAGE_SIZE:数据页大小(8),可选值:4, 8, 16, 32,单位:K
# EXTENT_SIZE:数据文件使用的簇大小(16),可选值:16, 32, 64,单位:页
# CHARSET:字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
# LENGTH_IN_CHAR:VARCHAR类型长���是否以字符为单位(N),可选值:Y/N,1/0
# CASE_SENSITIVE:大小敏感(Y),可选值:Y/N,1/0
# LOG_SIZE:日志文件大小(256),单位为:M,范围为:256M ~ 8G
# DB_NAME:数据库名(DAMENG)
# INSTANCE_NAME:实例名(DMSERVER)
# PORT_NUM:监听端口号(5236)
# SYSDBA_PWD:设置SYSDBA密码(SYSDBA)
# SYSAUDITOR_PWD:设置SYSAUDITOR密码(SYSAUDITOR)

5.2、恢复数据

[dmdba@dmdb02 ~]$ dmrman CTLSTMT="check backupset '/data/dmdata/dmbak/DB_dmdb_FULL_2024_04_23'"
[dmdba@dmdb02 ~]$ dmrman CTLSTMT="RESTORE DATABASE '/data/dmdata/data/dmdb/dm.ini' FROM BACKUPSET '/data/dmdata/dmbak/DB_dmdb_FULL_2024_04_23'"
[dmdba@dmdb02 ~]$ dmrman CTLSTMT="RECOVER DATABASE '/data/dmdata/data/dmdb/dm.ini' FROM BACKUPSET '/data/dmdata/dmbak/DB_dmdb_FULL_2024_04_23'"
[dmdba@dmdb02 ~]$ dmrman CTLSTMT="RECOVER DATABASE '/data/dmdata/data/dmdb/dm.ini' UPDATE DB_MAGIC"

执行结果,如下图所示:
在这里插入图片描述


5.3、创建dmarch.ini

[dmdba@dmdb02 ~]$ vim /data/dmdata/data/dmdb/dmarch.ini 
#DaMeng Database Archive Configuration file
#this is commentsARCH_WAIT_APPLY      = 0        [ARCHIVE_LOCAL1]ARCH_TYPE            = LOCAL        ARCH_DEST            = /data/dmdata/arch        ARCH_FILE_SIZE       = 2048        ARCH_SPACE_LIMIT     = 0        ARCH_FLUSH_BUF_SIZE  = 0        ARCH_HANG_FLAG       = 1        [ARCHIVE_REALTIME1]
ARCH_TYPE                = REALTIME  #实时归档类型
ARCH_DEST                = dmdb01  #实时归档目标实例名

5.4、修改dm.ini

[dmdba@dmdb02 ~]$ vim /data/dmdata/data/dmdb/dm.ini
INSTANCE_NAME                   = DMDB02                #Instance name
PORT_NUM                        = 5236                  #数据库实例监听端口				
DW_INACTIVE_INTERVAL            = 60                    #接收守护进程消息超时时间
ALTER_MODE_STATUS               = 0                     #不允许手工方式修改实例模式/状态/OGUID, 1: yes, 0: no				
ENABLE_OFFLINE_TS               = 2                     #不允许备库 OFFLINE 表空间
MAL_INI                         = 1                     #打开 MAL 系统
ARCH_INI                        = 1                     #打开归档配置
RLOG_SEND_APPLY_MON             = 64                    #统计最近 64 次的日志重演信息
BAK_PATH                        = /data/dmdata/dmbak              #backup file path

说明:根据目录规划,备份目录为/data/dmdata/dmbak,所以需要在dm.ini文件中修改。


5.5、创建dmmal.ini 文件

说明:B 机器里dmmal.ini与A机器dmdb01的dmmal.ini相同,参照A机器 dmmal.ini文件进行配置。

[dmdba@dmdb02 ~]$ vim /data/dmdata/data/dmdb/dmmal.ini
MAL_CHECK_INTERVAL         = 10  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定 MAL 链路断开的时间
MAL_TEMP_PATH              = /data/dmdata/data/dmdb/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            = dmdb01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 172.18.1.42  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5336  #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 172.18.1.42  #实例的对外服务 IP 地址
MAL_INST_PORT            = 5236  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT              = 5436  #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT         = 5536  #实例监听守护进程 TCP 连接的端口[MAL_INST2]
MAL_INST_NAME            = dmdb02 
MAL_HOST                 = 172.18.1.67
MAL_PORT                 = 5336
MAL_INST_HOST            = 172.18.1.67
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 5436
MAL_INST_DW_PORT         = 5536

5.6、创建dmwatcher.ini文件

说明:B机器里dmwatcher.ini与 A 机器dmdb01的dmwatcher.ini相同,参照A机器 dmwatcher.ini文件进行配置。

[dmdba@dmdb02 ~]$ vim /data/dmdata/data/dmdb/dmwatcher.ini
[GRP1]
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                 = /data/dmdata/data/dmdb/dm.ini  #dm.ini 文件路径
INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
INST_STARTUP_CMD         = /home/dmdba/dmdbms/bin/dmserver  #命令行方式启动
RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭

5.7、注册服务

[root@dmdb02 ~]# cd /home/dmdba/dmdbms/script/root/
[root@dmdb02 root]# ./dm_service_installer.sh -t dmserver -p dmdb02 -dm_ini  /data/dmdata/data/dmdb/dm.ini -m mount
[root@dmdb02 root]# ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /data/dmdata/data/dmdb/dmwatcher.ini

若要删除自启,可利用如下方式:

[root@dmdb02 root]# ./dm_service_uninstaller.sh -n DmServicedmdb02
[root@dmdb02 root]# ./dm_service_uninstaller.sh -n DmWatcherServiceWatcher

六、配置监视器

说明:由于资源限制,这里使用了两台服务器,即dmdb01实例和dmdb02实例主机,选择将监视器安装在dmdb01主机上。

1、手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
2、自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。


6.1、创建dmmonitor.ini

1、确认监视器配置文件

[dmdba@dmdb01 ~]$ vim /home/dmdba/dmdbms/bin/dmmonitor.ini 
MON_DW_CONFIRM             = 1  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位 MB[GRP1]
MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP                = 172.18.1.42:5436  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 172.18.1.67:5436

注意:守护进程配置为自动切换时,必须配置确认监视器。在当前环境中,守护进程配置的是自动切换,所以选择配置确认监视器。


2、非确认监视器配置文件

[dmdba@dmdb01 ~]$ vim /home/dmdba/dmdbms/bin/dmmonitor_manual.ini 
MON_DW_CONFIRM             = 0  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位 MB[GRP1]
MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP                = 172.18.1.42:5436  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 172.18.1.67:5436[dmdba@dmdb02 ~]$ vim /home/dmdba/dmdbms/bin/dmmonitor_manual.ini 
MON_DW_CONFIRM             = 0  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位 MB[GRP1]
MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP                = 172.18.1.42:5436  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 172.18.1.67:5436

注意:在配置监视器时,一般配置好确认监视器后,建议再配置一个非确认监视器的配置文件,在主备发生切换时,可以通过前台的方式启动非确认监视器进行手动切换。


6.3、注册服务

[root@dmdb01 dmdata]# cd /home/dmdba/dmdbms/script/root/
[root@dmdb01 root]# ./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini

若要删除自启,可利用如下方式:

[root@dmdb01 dmdata]# cd /home/dmdba/dmdbms/script/root/
[root@dmdb01 root]# ./dm_service_uninstaller.sh -n DmMonitorServiceMonitor

6.3、监视器使用

命令 含义
list 查看守护进程的配置信息
show global info 查看所有实例组的信息
tip 查看系统当前运行状态
login 登录监视器
logout 退出登录
choose switchover GRP1 主机正常:查看可切换为主机的实例列表
switchover GRP1.实例名 主机正常:使用指定组的指定实例,切换为主机
choose takeover GRP1 主机故障:查看可切换为主机的实例列表
takeover GRP1.实例名 主机故障:使用指定组的指定实例,切换为主机
choose takeover force GRP1 强制切换:查看可切换为主机的实例列表
takeover force GRP1.实例名 强制切换:使用指定组的指定实例,切换为主机

说明:对于在生产环境中配置有确认监视器时,主备只是发生了切换的情况下,再想将主备切换回去时,只需要启动非确认监视器执行切换命令即可。


七、启动服务

7.1、启动主备库实例并修改参数

1、dmdb01主机(主库)

说明:以下操作只需在dmdb01主机上执行。

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb01 start
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE PRIMARY;

执行结果,如下图所示:
在这里插入图片描述


2、dmdb02主机(备库)

说明:以下操作只需在dmdb02主机上执行。

[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb02 start
[dmdba@dmdb02 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE STANDBY;

执行结果,如下图所示:
在这里插入图片描述


7.2、启动主备库守护进程

说明:分别在dmdb01实例主机和dmdb02实例主机上执行。

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start

7.3、启动监视器

说明:由于资源限制,监视器安装在dmdb01实例主机上,以下操作只需在dmdb01主机上执行。

# 后台启动
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start
# 前台启动
[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb01 bin]$ ./dmmonitor dmmonitor.ini

7.4、主备集群启动停止顺序

方法一:以dmdba用户启动停止服务

1、启动顺序为:主库实例——备库实例——主库守护进程——备库守护进程——监视器服务

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb01 start
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb02 start
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start

2、关闭顺序为:监视器服务——备库守护进程——主库守护进程——主库实例——备库实例

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmMonitorServiceMonitor stop
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb01 stop
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb02 stop

方法二:以root用户启动停止服务

1、启动顺序为:主库实例——备库实例——主库守护进程——备库守护进程——监视器服务

[root@dmdb01 ~]# systemctl start DmServicedmdb01
[root@dmdb02 ~]# systemctl start DmServicedmdb02
[root@dmdb01 ~]# systemctl start DmWatcherServiceWatcher 
[root@dmdb02 ~]# systemctl start DmWatcherServiceWatcher 
[root@dmdb01 ~]# systemctl start DmMonitorServiceMonitor

2、关闭顺序为:监视器服务——备库守护进程——主库守护进程——主库实例——备库实例

[root@dmdb01 ~]# systemctl stop DmMonitorServiceMonitor
[root@dmdb02 ~]# systemctl stop DmWatcherServiceWatcher 
[root@dmdb01 ~]# systemctl stop DmWatcherServiceWatcher 
[root@dmdb01 ~]# systemctl stop DmServicedmdb01
[root@dmdb02 ~]# systemctl stop DmServicedmdb02

八、验证主备集群

8.1、检查集群状态

说明:通过前台方式启动非确认监视器查看主备集群状态。

[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb01 bin]$ ./dmmonitor dmmonitor_manual.ini

执行结果,如下图所示:
在这里插入图片描述

可通过监视器命令 tip 或 show 来检查集群状态是否正常。
在这里插入图片描述


8.2、验证主备集群同步

1、在主库dmdb01上创建表和插入数据

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
# 设置事务自动提交执行
SQL> SET AUTOCOMMIT ON;
# 创建表
SQL> CREATE TABLE SYSDBA.city
(city_id CHAR(3) NOT NULL,city_name VARCHAR(40) NULL,region_id INT NULL
);
# 插入数据
SQL> INSERT INTO SYSDBA.city(city_id,city_name,region_id) VALUES('BJ','北京',1);
SQL> INSERT INTO SYSDBA.city(city_id,city_name,region_id) VALUES('SJZ','石家庄',1);
SQL> INSERT INTO SYSDBA.city(city_id,city_name,region_id) VALUES('SH','上海',2);
SQL> INSERT INTO SYSDBA.city(city_id,city_name,region_id) VALUES('SH','上海',2);

执行结果,如下图所示:
在这里插入图片描述


2、在备库dmdb02查看表及数据

[root@dmdb02 ~]# su - dmdba
[dmdba@dmdb02 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@localhost:5236
SQL> select * from SYSDBA.city;

在这里插入图片描述

说明:主备数据一致,则表明主备集群部署成功。


九、主备集群切换

9.1、手动切换主备库

1、启动监视器

[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb01 bin]$ ./dmmonitor dmmonitor_manual.ini 

2、输入show命令查看目前集群状态,其中group GRP1为集群的组名,当前主备集群状态正常,DMDB01实例为primary,DMDB02为standby,如下图所示:
在这里插入图片描述


3、登录非确认监视器

login
用户名:SYSDBA
密码:DyfN8pS#8xNCyrLSH

如下图所示:
在这里插入图片描述


4、查看满足切换条件的实例

choose switchover GRP1

如下图所示:
在这里插入图片描述
说明:可以看到 DMDB02 可以进行切换。


5、切换节点

switchover GRP1.DMDB02

如下图所示:
在这里插入图片描述


6、检查是否已经切换
在这里插入图片描述
说明:通过上图中可以看到,主备切换成功,此时主库已经由原先的DMDB01实例变成了DMDB02实例。


9.2、主备库故障切换

9.2.1、主库故障

1、在dmdb01主机上启动非确认监视器

[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb01 bin]$ ./dmmonitor dmmonitor_manual.ini 

2、输入show命令查看目前集群状态,其中group GRP1为集群的组名,当前主备集群状态正常,DMDB01实例为primary,DMDB02为standby,如下图所示:
在这里插入图片描述


3、主库停掉实例服务、守护进程服务

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb01 stop

如下图所示:
在这里插入图片描述


4、在dmdb02主机上启动非确认监视器

[dmdba@dmdb02 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb02 bin]$ ./dmmonitor dmmonitor_manual.ini 

如下图所示:
在这里插入图片描述
说明:通过上图中可以看到,主库实例服务和守护进程服务宕掉时,备库DMDB02切换成了主库。


5、在dmdb01主机上启动实例服务和守护进程服务

[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb01 start
[dmdba@dmdb01 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start

说明:停止掉主库dmdb01实例服务、守护进程服务,主备集群发生切换,DMDB02由备库变成主库,当dmdb01实例服务、守护进程服务恢复正常,则变成了备库,不会变成跟之前一样的主库。 如下图所示:
在这里插入图片描述
在这里插入图片描述


9.2.2、备库故障

1、在dmdb01主机上启动非确认监视器

[dmdba@dmdb01 ~]$ cd /home/dmdba/dmdbms/bin/
[dmdba@dmdb01 bin]$ ./dmmonitor dmmonitor_manual.ini 

2、输入show命令查看目前集群状态,其中group GRP1为集群的组名,当前主备集群状态正常,DMDB01实例为primary,DMDB02为standby,如下图所示:
在这里插入图片描述


3、备库停掉实例服务、守护进程服务

[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb02 stop

如下图所示:
在这里插入图片描述
说明:通过上图中可以看到,主库实例服务和守护进程服务宕掉时,主库DMDB01依然是主库。


5、在dmdb02主机上启动实例服务和守护进程服务

[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmServicedmdb02 start
[dmdba@dmdb02 ~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start

说明:停止掉主库dmdb02实例服务、守护进程服务,主备集群发生切换,DMDB01依然是主库,当dmdb02实例服务、守护进程服务恢复正常,则跟之前一样还是备库。 如下图所示:

在这里插入图片描述


十、dm_svc.conf配置

说明:dm_svc.conf 是使用达梦数据库时非常重要的配置文件,它包含了达梦各接口和客户端工具所需要配置的一些参数。通过它可以实现达梦各种集群的读写分离和均衡负载,且必须和接口/客户端工具位于同一台机器上才能生效。

# 以dmdba用户 修改/etc/dm_svc.conf文件,主备库都需要修改
##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
DMHA=(172.18.1.42:5236,172.18.1.67:5236)
##服务配置
[DMHA]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1)

参数详解:

LOGIN_MODE:
0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;
1:只连接主库;
2:只连接备库;
3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;
4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式

2、在主库上使用客户端工具disql连接数据库主备集群DMHA,发现连接的是主库,

[root@dmdb01 ~]# su - dmdba
[dmdba@dmdb01 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@DMHA
服务器[172.18.1.42:5236]:处于主库打开状态
登录使用时间 : 7.876(ms)
上次登录ip       : ::1
上次登录时间   : 2024-04-24 11:33:25
登录失败次数   : 0
口令是否过期   : 未过期
disql V8

如下图所示:
在这里插入图片描述


3、在备库上使用客户端工具disql连接数据库主备集群DMHA,发现连接的是主库,

[root@dmdb02 ~]# su - dmdba
[dmdba@dmdb02 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@DMHA
[dmdba@dmdb02 ~]$ disql SYSDBA/'"DyfN8pS#8xNCyrLSH"'@DMHA服务器[172.18.1.42:5236]:处于主库打开状态
登录使用时间 : 16.511(ms)
上次登录ip       : ::ffff:172.18.1.42
上次登录时间   : 2024-04-24 17:55:42
登录失败次数   : 0
口令是否过期   : 未过期
disql V8

如下图所示:
在这里插入图片描述


4、如果应用服务没有部署在达梦数据库集群各个节点上,采用单独主机部署的话,要想应用里的代码能够采用jdbc:dm://DMHA这样的方式连接达梦数据库主备集群,你需要在应用服务器主机上创建/etc/dm_svc.conf文件,注意该应用能有权限访问/etc/dm_svc.conf文件。

##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
DMHA=(172.18.1.42:5236,172.18.1.67:5236)
##服务配置
[DMHA]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1)

5、如果你想在客户端windows电脑上,使用DMHA连接达梦数据库,你需要修改C:\Windows\System32\dm_svc.conf文件

C:\Windows\System32\dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(CN)
DMHA=(172.18.1.42:5236,172.18.1.67:5236)[DMHA]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1)

如下图所示:
在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结


http://www.ppmy.cn/devtools/14991.html

相关文章

【Python】爬虫-基础入门

目录 一、什么是爬虫 二、爬虫的主要用途 三、学会爬虫需要掌握的技能 四、爬虫使用的语言 五、编写爬虫需要的库,以python为例 六、爬虫示例-python 示例一 示例二 示例三 一、什么是爬虫 爬虫,又称网络爬虫或网页爬虫,是一种用来自…

【C++】从零开始认识泛型编程 — 模版

送给大家一句话: 尽管眼下十分艰难,可日后这段经历说不定就会开花结果。总有一天我们都会成为别人的回忆,所以尽力让它美好吧。 – 岩井俊二 \\\ ⱶ˝୧(๑ ⁼̴̀ᐜ⁼̴́๑)૭兯 //// &#…

Web前端开发之HTML_2

HTML5简介与基础骨架标题标签标签之段落、换行、水平线标签之图片标签之超文本链接标签之文本列表标签之有序列表列表标签之无序列表 1. HTML5简介与基础骨架 1.1 HTML5简介 HTML5是用来描述网页的一种语言,被称为超文本标记语言。用HTML5编写的文件,后…

盲人公园游玩:科技之翼助力视障人士畅享户外乐趣

在阳光明媚的日子里,公园无疑是广大市民休闲娱乐、亲近自然的理想之地。然而,对于视障人士而言,盲人公园游玩这一看似平常的活动,却曾因种种障碍而显得遥不可及。幸而,科技的革新正为这一群体打开新的可能性&#xff0…

NumPy 1.26 中文官方指南(三)

基础与用法 NumPy 基础知识 原文:numpy.org/doc/1.26/user/basics.html 这些文档阐明了 NumPy 中的概念、设计决策和技术限制。这是了解 NumPy 基本思想和哲学的好地方。 数组创建 对ndarrays进行索引 使用 NumPy 进行 I/O 数据类型 广播 复制和视图 结构化数…

排序算法之计数排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性计数排序O(nk )O(nk)O(nk)O(k)Out-place稳定 稳定:如果A原本在B前面,而AB,排序之后A仍然在B的前面; 不…

阿里云Docker镜像加速器

阿里云Docker镜像加速器详解: Docker 镜像 仓库 容器介绍 以及镜像仓库详解 访问 https://www.aliyun.com/ 搜索 “容器镜像服务”

MATLAB 条件语句

MATLAB 条件语句 决策结构要求程序员应指定一个或多个要由程序评估或测试的条件,如果确定条件为真,则应指定要执行的一个或多个语句,如果条件为真,则可以选择要执行的其他语句。条件确定为假。 以下是大多数编程语言中常见的典型…