总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考: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运维实战总结