社区地址:https://eco.dameng.com
1、网络规划。
主机名 | public ip | private ip | 实例名 | 端口 | 用途 |
server01 | 192.168.118.101 | 10.0.0.11 | dmrw1 | 5236 | 数据库实例 dmrw1 监听端口 |
server01 | 192.168.118.101 | 10.0.0.11 | dmrw1 | 61141 | MAL 系统监听连接的端口 |
server01 | 192.168.118.101 | 10.0.0.11 | dmrw1 | 52141 | 实例本地守护进程监听连接的端口 |
server01 | 192.168.118.101 | 10.0.0.11 | dmrw1 | 33141 | 实例监听守护进程连接的端口 |
server02 | 192.168.118.102 | 10.0.0.12 | dmrw2 | 5236 | 数据库实例 dmrw2 监听端口 |
server02 | 192.168.118.102 | 10.0.0.12 | dmrw2 | 61141 | MAL 系统监听连接的端口 |
server02 | 192.168.118.102 | 10.0.0.12 | dmrw2 | 52141 | 实例本地守护进程监听连接的端口 |
server02 | 192.168.118.102 | 10.0.0.12 | dmrw2 | 33141 | 实例监听守护进程连接的端口 |
2、验证系统信息。
[root@server01 ~]# getconf LONG_BIT
64
[root@server01 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@server01 ~]# uname -a
Linux server01 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

系统需要安装RPM包:
[root@server01 dmrw]# yum -y install unixODBC*
[root@server01 dmrw]# yum -y install glibc*
3、关闭防火墙。
1. 先查看防火墙状态
[root@bogon ~]#systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since 一 2015-05-25 22:53:54 CST; 3min 18s ago
Main PID: 979 (firewalld)
CGroup: /system.slice/firewalld.service
└─979 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
5月 25 22:53:54 localhost.localdomain systemd[1]: Started firewalld - dynami...
Hint: Some lines were ellipsized, use -l to show in full.
2. 关闭防火墙
[root@bogon ~]#systemctl stop firewalld
[root@bogon ~]#systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: inactive (dead) since 一 2015-05-25 23:03:56 CST; 3s ago
Process: 979 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 979 (code=exited, status=0/SUCCESS)
5月 25 22:53:54 localhost.localdomain systemd[1]: Started firewalld - dynami...
5月 25 23:03:55 bogon systemd[1]: Stopping firewalld - dynamic firewall da.....
5月 25 23:03:56 bogon systemd[1]: Stopped firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.
3. 查看防火墙服务是否开机启动
[root@bogon ~]#systemctl is-enabled firewalld
enabled #开启
4. 关闭防火墙开机启动
[root@bogon ~]#systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
[root@bogon ~]#systemctl is-enabled firewalld
disabled
4、关闭SELinux。
1. 查看当前SELinux状态
[root@bogon ~]#getenforce
Enforcing
2. 关闭SElinux
[root@bogon ~]#setenforce 0
[root@bogon ~]# getenforce
Permissive
3. 编辑配置文件
[root@bogon ~]#
vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive #修改此参数
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
5、创建DM数据库软件安装用户及用户组。
创建安装用户组dinstall。
#groupadd -g 12349 dinstall
2.创建安装用户dmdba。
#useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
初始化用户密码。
#passwd dmdba (dmdba用户密码为:caiong)

修改用户资源限制
执行以下命令,修改 dmdba 用户资源限制:
vim /etc/security/limits.conf
文件末尾添加如下内容:
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft stack 65536
dmdba hard stack 65536
6、检查操作系统限制。
#ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15034
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15034
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

data seg size (kbytes, -d)
建议用户设置为1048576(即1GB)以上或unlimited(无限制),此参数过小将导致数据库启动失败。
file size
file size(blocks, -f)
建议用户设置为unlimited(无限制),此参数过小将导致数据库安装或初始化失败。
open files
open files(-n)
建议用户设置为65536以上或unlimited(无限制)。
virtual memory
virtual memory (kbytes, -v)
建议用户设置为1048576(即1GB)以上或unlimited(无限制),此参数过小将导致数据库启动失败。
如果用户需要为当前安装用户更改ulimit的资源限制,请修改文件/etc/security/limits.conf。
7、针对open files检查做出修改。
[root@server01 ~]# vim /etc/profile #在文件末尾加入一行:ulimit -n 65536
ulimit -n 65536
[root@server01 ~]# source /etc/profile
[root@server01 ~]# ulimit -a|grep open
open files (-n) 65536

8、检查内存使用情况。
# grep MemTotal /proc/meminfo
MemTotal: 3880468 kB
获取交换分区大小
# grep SwapTotal /proc/meminfo
SwapTotal: 12582908 kB
获取内存使用详情
#free -m
total used free shared buff/cache available
Mem: 3789 655 1666 18 1467 2845
Swap: 12287 0 12287

9、检查磁盘空间使用情况。
[root@server01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 468G 5.0G 463G 2% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda2 20G 37M 20G 1% /home
/dev/sda1 197M 152M 46M 78% /boot
tmpfs 379M 4.0K 379M 1% /run/user/42
tmpfs 379M 24K 379M 1% /run/user/1000
tmpfs 379M 0 379M 0% /run/user/0
DM完全安装需要1GB的存储空间,用户需要提前规划好安装目录
临时文件需要1GB的存储空间,临时文件目录默认为**/tmp**
10、上传DM软件安装介质。
上传安装介质”dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso”到dmdba家目录。

11、修改安装文件拥有组和拥有人及权限。
[root@server01 dmdba]# chown dmdba:dinstall dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso
[root@server01 dmdba]# chmod 755 dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso
[root@server01 dmdba]# ls -l
total 781128
-rwxr-xr-x. 1 dmdba dinstall 799875072 Apr 20 14:08 dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso
12、以root身份挂载安装镜像文件。
[root@server01 dmdba]# mkdir -p /media/centos7
[root@server01 dmdba]#mount -t iso9660 -o loop /home/dmdba/dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso /media/centos7/
mount: /dev/loop0 is write-protected, mounting read-only
[root@server01 dmdba]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 468G 4.3G 464G 1% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.2M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda2 20G 800M 20G 4% /home
/dev/sda1 197M 152M 46M 78% /boot
tmpfs 379M 12K 379M 1% /run/user/42
tmpfs 379M 0 379M 0% /run/user/0
/dev/loop0 763M 763M 0 100% /media/centos7
13、配置本地YUM仓库。
挂载系统文件ISO光盘,默认挂在后
[root@server01 centos]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sr0 4.3G 4.3G 0 100% /run/media/dmdba/CentOS 7 x86_64
[root@server01 centos]#mkdir /mnt/cdrom
[root@server01 centos]#cd /run/media/dmdba/CentOS\ 7\ x86_64/
[root@server01 CentOS 7 x86_64]# ls
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@server01 centos]#cd /run/media/dmdba
[root@server01 centos]#cp -r CentOS\ 7\ x86_64/ /mnt/cdrom/centos
[root@server01 yum.repos.d]# cd /mnt/cdrom/centos
[root@server01 centos]# ls
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@server01 yum.repos.d]#cd /etc/yum.repos.d
[root@server01 yum.repos.d]#mv CentOS-* /tmp/ ##把原来的配置文件备份到TMP下
[root@server01 yum.repos.d]# ls
[root@server01 yum.repos.d]# vim local.repo
[local_server]
name=This is a local repo
baseurl=file:///mnt/cdrom/centos
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@server01 centos]#yum clean all
[root@server01 centos]#yum list all
……
yum-plugin-verify.noarch 1.1.31-50.el7 local_server
yum-plugin-versionlock.noarch 1.1.31-50.el7 local_server
zlib-devel.x86_64 1.2.7-18.el7 local_server
zsh.x86_64 5.0.2-31.el7 local_server
zziplib.x86_64 0.13.62-9.el7 local_server
本地YUM源配置完成。
14、创建 /opt/dmdbms、/dmdata目录,并授权。
[root@server01 opt]# cd /opt
[root@server01 /]# mkdir dmdbms
[root@server01 /]# id dmdba
uid=12345(dmdba) gid=12349(dinstall) 组=12349(dinstall)
[root@server01 /]# chown dmdba:dinstall dmdbms/
[root@server01 /]# mkdir /dmdata
[root@server01 /]# chown dmdba:dinstall /dmdata
15、配置dmdba用户常用环境变量。
将数据库常用命令的目录加到dmdba环境变量中。
/opt/dmdbms/bin
/opt/dmdbms/bin2
/opt/dmdbms/tool
[dmdba@server01 tool]$ vim /home/dmdba/.bash_profile #文本最后添加
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/dmdbms/bin"
export DM_HOME="/opt/dmdbms"
export PATH=/opt/dmdbms/bin:/opt/dmdbms/bin2:/opt/dmdbms/tool:$PATH
export DISPLAY=192.168.118.82:0.0
[dmdba@server01 tool]$ source /home/dmdba/.bash_profile
16、继续命令行方式执行安装程序。
[dmdba@server01 centos7]$ ls
DM8 Install.pdf DMInstall.bin
[dmdba@server01 centos7]$ ./DMInstall.bin -i
Please select the installer's language (E/e:English C/c:Chinese) [E/e]:c
解压安装程序..........
删除配置文件/tmp/dm_build.properties失败,请手动删除。
[dmdba@server01 centos7]$ ./DMInstall.bin -i
Please select the installer's language (E/e:English C/c:Chinese) [E/e]:c
解压安装程序..........
欢迎使用达梦数据库安装程序
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
设置时区:
[ 1]: GTM-12=日界线西
……
[21]: GTM+08=中国标准时间
[22]: GTM+09=汉城
请选择设置时区 [21]:
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:
所需空间: 1220M
请选择安装目录 [/home/dmdba/dmdbms]:/opt/dmdbms #输入提前创建好的目录
可用空间: 457G
是否确认安装路径(/opt/dmdbms)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /opt/dmdbms
所需空间: 1220M
可用空间: 457G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
2022-04-21 13:43:44
[INFO] 安装达梦数据库...
2022-04-21 13:43:44
[INFO] 安装 基础 模块...
2022-04-21 13:43:47
[INFO] 安装 服务器 模块...
2022-04-21 13:43:51
[INFO] 安装 客户端 模块...
2022-04-21 13:44:22
[INFO] 安装 驱动 模块...
2022-04-21 13:44:28
[INFO] 安装 手册 模块...
2022-04-21 13:44:30
[INFO] 安装 服务 模块...
2022-04-21 13:44:31
[INFO] 移动日志文件。
2022-04-21 13:44:31
[INFO] 安装达梦数据库完成。
请以root系统用户执行命令:
/opt/dmdbms/script/root/root_installer.sh
安装结束
在新的会话连接中以root用户身份执行脚本
[root@server01 ~]# /opt/dmdbms/script/root/root_installer.sh
移动 /opt/dmdbms/bin/dm_svc.conf 到/etc目录
mv: cannot stat ‘/opt/dmdbms/bin/dm_svc.conf’: No such file or directory
修改服务器权限
创建DmAPService服务
创建服务(DmAPService)完成
启动DmAPService服务
##########################以上步骤均都需要在两个节点完成#######################
17、分别在对两个节点进行数据库初始化操作。
[dmdba@server01 dmdata]$ dminit path=/dmdata db_name=dmrw page_size=32
[dmdba@server02 dmdata]$ dminit path=/dmdata db_name=dmrw page_size=32
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2022-09-24
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dmdata/dmrw/dmrw01.log
log file path: /dmdata/dmrw/dmrw02.log
write to dir [/dmdata/dmrw].
create dm database success. 2022-04-28 11:40:15
创建数据库服务,两个节点都执行
[root@server01 bin]# cd /opt/dmdbms/script/root/
[root@server01 root]# ./dm_service_installer.sh -t dmserver -p dmserver -dm_ini /dmdata/dmrw/dm.ini
[root@server02 bin]# cd /opt/dmdbms/script/root/
[root@server02 root]# ./dm_service_installer.sh -t dmserver -p dmserver -dm_ini /dmdata/dmrw/dm.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicedmserver.service to /usr/lib/systemd/system/DmServicedmserver.service.
创建服务(DmServicedmserver)完成
[root@server01 root]# systemctl start DmServicedmserver.service
[root@server01 root]# systemctl status DmServicedmserver
● DmServicedmserver.service - DM Instance Service(DmServicedmserver).
Loaded: loaded (/usr/lib/systemd/system/DmServicedmserver.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2022-04-28 11:57:47 CST; 22s ago
//启动数据库服务只在主库上做。
18、对主库进行脱机备份。
1.先确认主库dmap服务已启动
[dmdba@server01 dmdata]$ systemctl list-units|grep Dm

2.关闭数据库后,使用dmrman工具对主库进行备份。
[dmdba@server01 ~]$ disql sysdba/SYSDBA@192.168.118.101:5236
服务器[192.168.118.101:5236]:处于普通打开状态
disql V8
SQL> shutdown immediate;
操作已执行
[dmdba@server01 ~]$ dmrman
dmrman V8
RMAN> backup database '/dmdata/dmrw/dm.ini' backupset '/dmdata/backup/bakfull';

19、备库还原。
拷贝主库的备份集到备库
[dmdba@server01 bakfull]$ scp -r /dmdata/backup/bakfull 192.168.118.102:/dmdata/backup/

SQL> shutdown immediate;
RMAN> restore database '/dmdata/dmrw/dm.ini' from backupset '/dmdata/backup/bakfull';
RMAN> recover database '/dmdata/dmrw/dm.ini' from backupset '/dmdata/backup/bakfull';
RMAN> recover database '/dmdata/dmrw/dm.ini' update db_magic;

20、配置主库和备库实例的配置文件 dm.ini。
[dmdba@server01 ~]$ vim /dmdata/dmrw/dm.ini
INSTANCE_NAME = dmrw1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
//主库dm.ini配置文件修改
[dmdba@server02 ~]$ vim /dmdata/dmrw/dm.ini
INSTANCE_NAME = dmrw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
//备库dm.ini配置文件修改
21、配置归档配置文件 dmarch.ini。
[dmdba@server01 ~]$ vim /dmdata/dmrw/dmarch.ini
[ARCHIVE_TIMELYE]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmrw2 #即时归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/dmrw/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 #单位 MB,0 表示无限制,范围 1024~4294967294 MB
//主库dmarch.ini配置文件修改
[dmdba@server02 arch]$ vim /dmdata/dmrw/dmarch.ini
[ARCHIVE_TIMELY]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmrw1 #即时归档目标实例名(备库侧填写主库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/dmrw/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 #单位 MB,0 表示无限制,范围 1024~4294967294 MB
//备库dmarch.ini配置文件修改
22、配置MAL系统配置文件 dmmal.ini。
在主库和备库实例目录下新建文件 dmmal.ini配置文件,两边都需要,且内容相同。
[dmdba@server01 bakfull]# vim /dmdata/dmrw/dmmal.ini
[dmdba@server02 bakfull]# vim /dmdata/dmrw/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = dmrw1 #与 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 10.0.0.11 #MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.118.101 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = dmrw2 #与 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 10.0.0.12 # MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.118.102 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33141
23、配置守护进程配置文件 dmwatcher.ini。
在主库和备库实例目录下新建文件 dmwatcher.ini配置文件,两边都需要,且内容相同。
[dmdba@server01 ~]$ vim /dmdata/dmrw/dmwatcher.ini
[dmdba@server02 ~]$ vim /dmdata/dmrw/dmwatcher.ini
[GRP_RW]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/dmrw/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
24、以 Mount 方式启动数据库实例。
使用 dmdba用户,到数据库安装目录的 bin 下执行以下命令(主备库都执行):
dmserver /dmdata/dmrw/dm.ini mount
在新的终端使用 disql 工具连接数据库:
disql SYSDBA/SYSDBA
主备库都修改 oguid,执行以下命令:
sp_set_oguid(453331);
主库修改数据库模式为 primary,执行以下命令:
alter database primary;

备库修改数据库模式为 standby,执行以下命令:
alter database standby;
25、启动守护进程。
dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):
dmwatcher /dmdata/dmrw/dmwatcher.ini
SQL> select name,status$ from v$instance;

//守护进程启动后,会将 Mount 的实例 Open。
26、安装守护监视器。
守护监视器在第三台服务器上安装。
[dmdba@server03 network-scripts]# cd /opt/dmdbms/
[dmdba@server03 dmdbms]# touch dmmonitor.ini
[dmdba@server03 dmdbms]# vim dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /opt/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP_RW]
MON_INST_OGUID = 453331 #组 GRP_RW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.0.0.11:52141
MON_DW_IP = 10.0.0.12:52141
[dmdba@server03 ~]$ dmmonitor /opt/dmdbms/dmmonitor.ini
启动后输入 show 命令查看集群状态

27、注册守护进程服务(主备库都执行)。
[root@server01 root]# cd /opt/dmdbms/script/root
[root@server01 root]# ./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /dmdata/dmrw/dmwatcher.ini
[root@server02 root]# ./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /dmdata/dmrw/dmwatcher.ini


28、注册监视器服务。
只需在第三台服务器,监视器服务器上执行。
[root@server03 root]# pwd
/opt/dmdbms/script/root
[root@server03 root]# ./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /opt/dmdbms/dmmonitor.ini

29、验证主备集群同步状态。
1.配置普通监视器
集群任意节点,配置普通监视器配置文件 dmmonitor.ini,执行以下命令:
[dmdba@server01 dmdbms]$ cd /dmdata/dmrw/
[dmdba@server01 dmrw]$ touch dmmonitor.ini
[dmdba@server01 dmrw]$ vim dmmonitor.ini
[dmdba@server01 dmrw]$ cat dmmonitor.ini
MON_DW_Confirm = 0
MON_LOG_PATH = /opt/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP_RW]
MON_INST_OGUID = 453331
MON_DW_IP = 10.0.0.11:52141
MON_DW_IP = 10.0.0.12:52141
2.在主库节机点启动监视器
[dmdba@server01 dmrw]$ dmmonitor /dmdata/dmrw/dmmonitor.ini
输入 show 命令查看集群状态:

其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。
3.端验主库和备库数据同步
使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:
disql SYSDBA/SYSDBA@192.168.118.101:5236
create table test(id int);
insert into test values (1);
commit;
select * from test;
使用 disql 客户端登录备库,查询测试表验证,执行以下命令:
disql SYSDBA/SYSDBA@192.168.118.102:5236
select * from test;
结果显示主、备库数据一致,说明集群搭建成功。
30、集群的启停顺序。
关闭监视器:systemctl stop DmMonitorServiceconfirm
关闭主库守护进程:systemctl stop DmWatcherServicedmrw
关闭备库守护进程:systemctl stop DmWatcherServicedmrw
关闭主库实例:systemctl stop DmServiceddmserver
关闭备库实例:systemctl stop DmServiceddmserver
启动主库实例:systemctl start DmServiceddmserver
启动备库实例:systemctl start DmServiceddmserver
启动主库守护进程:systemctl start DmWatcherServicedmrw
启动备库守护进程:systemctl start DmWatcherServicedmrw
启动监视器:systemctl start DmMonitorServiceconfirm
31、模拟主库故障备库接管场景。
1.在第3台客户端服务器上配置服务名配置文件
[root@server03 ~]# vim /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
# 全局配置区
DMRW=(192.168.118.101:5236,192.168.118.102:5236)
LOGIN_ENCRYPT=(0)
DIRECT=(Y)
# 服务配置区
[DMRW]
SWITCH_TIME=(5) #在服务器之间切换的次数
SWITCH_INTERVAL=(10) #在服务器之间切换的时间间隔,单位为毫秒
RW_SEPARATE=(1) #启用读写分离
RW_PERCENT=(25) #读事务分发到主库的比例
2.在第3台客户端服务器上通过服务名连接数据库
[dmdba@server03 ~]$ disql sysdba/SYSDBA@DMRW
服务器[192.168.118.101:5236]:处于主库打开状态
登录使用时间 : 7.711(ms)
disql V8
SQL> SET TIMING OFF;
SQL> host hostname
server03
SQL> select name,status$ from v$instance;
行号 NAME STATUS$
---------- ----- -------
1 DMRW1 OPEN
通过查询发现客户端一开始连接的主库。
3.模拟主库故障,在主库上停止网络服务
[root@server01 ~]# service network stop
连续多次执行查询语句,发现连接已经自动切换到备库节点。

测试发现:主机故障,备机会自动接管并持续提供服务。
32、恢复故障主机,将故障主机加入集群。
1.恢复主库节点故障 service network restart


2.网络恢复后,查看两个数据库的角色。

//192.168.118.102 server02 主机上的数据库现在成为主库

//192.168.118.101 server01 主机上的数据库现在成为备库
3.重新启动server01上数据库守护服务。
[dmdba@server01 ~]$ ps -elf|grep dmwatcher
0 S dmdba 4849 17052 0 80 0 - 28178 pipe_w 21:20 pts/8 00:00:00 grep --color=auto dmwatcher
[dmdba@server01 ~]$ systemctl status DmWatcherServicedmrw.service
● DmWatcherServicedmrw.service - DM Data Watch Service(DmWatcherServicedmrw).
Loaded: loaded (/usr/lib/systemd/system/DmWatcherServicedmrw.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2022-04-29 13:54:53 CST; 1 day 7h ago
[dmdba@server01 ~]$ systemctl start DmWatcherServicedmrw.service
经查询发现server01上数据库的守护服务DmWatcherServicedmrw.service停止运行
启动server01上数据库的守护服务DmWatcherServicedmrw.service
[dmdba@server01 ~]$ systemctl start DmWatcherServicedmrw.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: caixiong
Password:
==== AUTHENTICATION COMPLETE ===
[dmdba@server01 ~]$ systemctl status DmWatcherServicedmrw.service
● DmWatcherServicedmrw.service - DM Data Watch Service(DmWatcherServicedmrw).
Loaded: loaded (/usr/lib/systemd/system/DmWatcherServicedmrw.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2022-04-30 21:26:25 CST; 3s ago
Process: 14474 ExecStart=/opt/dmdbms/bin/DmWatcherServicedmrw start (code=exited, status=0/SUCCESS)
Main PID: 14498 (dmwatcher)
Tasks: 17
CGroup: /system.slice/DmWatcherServicedmrw.service
└─14498 /opt/dmdbms/bin/dmwatcher path=/dmdata/dmrw/dmwatcher.ini
守护服务启动后,同时发现server03节点上监控工具中出现新的日志:
#=============================================================================#
[monitor] 2022-04-30 21:26:16: 收到守护进程(DMRW1)消息
[monitor] 2022-04-30 21:26:18: 守护进程(DMRW1)状态切换 [STARTUP-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-04-30 21:26:12 OPEN OK DMRW1 OPEN STANDBY VALID 3 27556 27556
测试发现:DMWR1数据库守护服务重启后,DMWR1将自动加入集群。
33、手动切换主备集群,恢复原主备集群的位置。
switchover GRP_RW.DMRW1
[monitor] 2022-04-30 21:58:46: 未登录监视器或服务器公钥发生变化,请重新登录!
login
用户名:SYSDBA
密码:
[monitor] 2022-04-30 21:59:31: 登录监视器成功!


DMRW1切为主库,DMWR2切为备库,集群恢复到最开始的状态。
34、测试读事务自动分发到备机的过程。
启用SQL日志,主库和备库都需要设置。读写分离可以通过数据库中的SQL日志来体现。SQL日志默认没有开启。可以使用动态开启SQL日志。开启后。会在数据库安装目录下的log文件夹下面出现一个dmsql_XXXXXX.log的日志文件。
SP_SET_PARA_VALUE(1,'SVR_LOG',1);

读事务自动分发
测试读写分离集群中读取事务是否会自动分发到备机上。测试前先需要在客户端和服务端做相关配置。确定启用读写分离。
服务端:
这需要配置一下RW_SEPARATE(1)和RW_PERCENT(50)其中RW_SEPARATE表示是否开启读写分离。1表示开启0表示不开启;RW_PERCENT表示读写分离的比例范围是0-100。配置好后需要重启一下实例。

顺序关停主库和备库,集群会检测到数据库关停后会自动启动主库和备库。
SQL> shutdown immediate;
操作已执行
已用时间: 0.801(毫秒). 执行号:0.


注意:这里主备最好都打开。当主备身份切换后也可以正常使用。
客户端:

输入./disql /nolog。
看到SQL>界面输入login
一直回车看到提示“是否读写分离”选择“y”然后回车
看到提示“读写分离百分百”选择合适的数值0-100.这里选50.然后回车
连接到主库之后进行查询之前我们创建的TEST表。

以上操作完成后可以通过查询主备sql日志看看查询操作是否在备机完成。


测试表明:测试读事务会自动分发到备机。
社区地址:https://eco.dameng.com




