MASTER && SLAVE

1、服务器系统时间检查
date
2、关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
3、关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
4、修改内核参数
vi /etc/security/limits.conf
##在最后面添加以下内容
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536

dmdba soft nice 65536
dmdba hard nice 65536
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
5、重启服务器
reboot
6、新建dmdba

必须创建 dmdba 用户,禁止使用 root 用户安装数据库

groupadd dinstall -g 2001
useradd  -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
echo "JCSS%6!8" | passwd --stdin dmdba
7、挂载数据库镜像
unzip dm8_20250423_HWarm920_kylin10_sp1_64.zip
mount -o loop dm8_20250423_HWarm920_kylin10_sp1_64.iso /mnt
8、命令安装
su - dmdba
cd /mnt
./DMInstall.bin -i
9、配置环境变量
cd /home/dmdba/dmdbms
DM_HOME=`pwd`
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
cat >> /etc/profile <<EOF
export DM_HOME="/home/dmdba/dmdbms"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DM_HOME/bin"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
EOF
source /etc/profile

MASTER

1、初始化实例
su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit path=/home/dmdba/dmdbms/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=0 CHARSET=1 DB_NAME=DM_MASTER INSTANCE_NAME=DM_MASTER PORT_NUM=5236 BUFFER=2048 LOG_SIZE=2048 SYSDBA_PWD="MES_Admin@123#?" SYSAUDITOR_PWD="MES_Admin@123#?"
2、启动服务
su - dmdba
/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DM_MASTER/dm.ini
3、开启归档
/home/dmdba/dmdbms/bin/disql SYSDBA/\"MES_Admin@123#?\"@192.170.100.38:5236
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/dmdbms/data/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
4、备份数据
SQL> BACKUP DATABASE BACKUPSET '/home/dmdba/dmdbms/data/bak/BACKUP_FILE';
5、修改dm.ini
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);

关闭前台实例服务,确保正常停库 Ctrl-c

6、开启mysql兼容模式
vim  /home/dmdba/dmdbms/data/DM_MASTER/dm.ini
#添加
LENGTH_IN_CHAR = 1         # 按字符存储(而非字节)
#修改
COMPATIBLE_MODE = 4        # MySQL兼容模式
7、修改dmarch.ini
su - dmdba
vim dmdbms/data/DM_MASTER/dmarch.ini
ARCH_WAIT_APPLY      = 0        

[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL        
        ARCH_DEST            = /home/dmdba/dmdbms/data/arch        
        ARCH_FILE_SIZE       = 1024        
        ARCH_SPACE_LIMIT     = 51200        
        ARCH_FLUSH_BUF_SIZE  = 2        
        ARCH_HANG_FLAG       = 1        

[ARCHIVE_REALTIME1]
        ARCH_TYPE            = REALTIME
        ARCH_DEST            = DM_SLAVE
8、创建dmmal.ini
vim /home/dmdba/dmdbms/data/DM_MASTER/dmmal.ini
MAL_CHECK_INTERVAL         = 10  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定 MAL 链路断开的时间
MAL_TEMP_PATH              = /home/dmdba/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            = DM_MASTER  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 10.13.78.223  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5336  #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 10.13.78.223  #实例的对外服务 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            = DM_SLAVE
MAL_HOST                 = 10.13.78.224
MAL_PORT                 = 5337
MAL_INST_HOST            = 10.13.78.224
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 5437
MAL_INST_DW_PORT         = 5537
9、创建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                 = /home/dmdba/dmdbms/data/DM_MASTER/dm.ini  #dm.ini 文件路径
INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
INST_STARTUP_CMD         = /home/dmdba/dmdbms/bin/dmserver  #命令行方式启动
RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭
10、拷贝备份文件
#root用户权限
scp -r /home/dmdba/dmdbms/data/bak/BACKUP_FILE 192.170.100.39:/home/dmdba/dmdbms/data/bak
10、注册服务
su  root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM_MASTER -dm_ini /home/dmdba/dmdbms/data/DM_MASTER/dm.ini -m mount
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/DM_MASTER/dmwatcher.ini

SLAVE

1、初始化实例
su - dmdba
cd /home/dmdba/dmdbms/bin
./dminit path=/home/dmdba/dmdbms/data/ PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=0 CHARSET=1 DB_NAME=DM_SLAVE INSTANCE_NAME=DM_SLAVE PORT_NUM=5236 BUFFER=2048 LOG_SIZE=2048 SYSDBA_PWD="MES_Admin@123#?" SYSAUDITOR_PWD="MES_Admin@123#?"
2、恢复数据
#root用户权限下
cd /home/dmdba/dmdbms/data && chown -R dmdba:dmdba bak
su - dmdba
/home/dmdba/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dmdbms/data/DM_SLAVE/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/data/bak'"

/home/dmdba/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/DM_SLAVE/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/data/bak'"

 /home/dmdba/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/DM_SLAVE/dm.ini' UPDATE DB_MAGIC"
3、编辑dmarch.ini
su - dmdba
vim /home/dmdba/dmdbms/data/DM_SLAVE/dmarch.ini
ARCH_WAIT_APPLY            = 0  #0:高性能   1:事务一致 

[ARCHIVE_LOCAL]
ARCH_TYPE                = LOCAL  #本地归档类型
ARCH_DEST                = /home/dmdba/dmdbms/data/arch  #本地归档存放路径
ARCH_FILE_SIZE           = 1024  #单个归档大小,单位 MB
ARCH_SPACE_LIMIT         = 51200  #归档上限,单位 MB

[ARCHIVE_REALTIME1]
ARCH_TYPE                = REALTIME  #实时归档类型
ARCH_DEST                = DM_MASTER  #实时归档目标实例名
4、配置dm.ini
su dmdba
vim /home/dmdba/dmdbms/data/DM_SLAVE/dm.ini
INSTANCE_NAME  = DM_SLAVE
PORT_NUM = 5236                               #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60              #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0                     #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS  = 2                      #不允许备库 OFFLINE 表空间
MAL_INI = 1                                           #打开 MAL 系统
ARCH_INI = 1                                         #打开归档配置
RLOG_SEND_APPLY_MON = 64             #统计最近 64 次的日志重演信息
5、配置dmmal.ini、dmwatcher.ini
#与DM_MASTER的一样
#切回root用户权限
cd /home/dmdba/dmdbms/data/DM_SLAVE/
scp 10.13.78.223:/home/dmdba/dmdbms/data/DM_MASTER/dmmal.ini .
scp 10.13.78.223:/home/dmdba/dmdbms/data/DM_MASTER/dmwatcher.ini .
chown -R dmdba:dmdba dmmal.ini dmwatcher.ini
6、注册服务
su root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM_SLAVE -dm_ini /home/dmdba/dmdbms/data/DM_SLAVE/dm.ini -m mount
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/DM_SLAVE/dmwatcher.ini

配置监视器

可以使用备节点创建监视器,生产环境还是需要独立部署监视器

  • 手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
  • 自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。
1、创建dmmonitor.ini
vim  /home/dmdba/dmdbms/data/DM_SLAVE/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                = 10.13.78.223:5436  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 10.13.78.224:5437
2、注册服务
su root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/data/DM_SLAVE/dmmonitor.ini

启动服务及查看信息

启动数据库及并修改参数
MASTER
su dmdba
/home/dmdba/dmdbms/bin/DmServiceDM_MASTER start
/home/dmdba/dmdbms/bin/disql SYSDBA/\"MES_Admin@123#?\"@192.107.100.38:5236
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
SLAVE
su dmdba
/home/dmdba/dmdbms/bin/DmServiceDM_SLAVE start
/home/dmdba/dmdbms/bin/disql SYSDBA/\"MES_Admin@123#?\"@192.170.100.39:5236
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
启动守护进程
MASTER
su dmdba
/home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
SLAVE
su dmdba
 /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
启动监视器
##前台启动
su dmdba
/home/dmdba/dmdbms/bin/dmmonitor /home/dmdba/dmdbms/data/DM_SLAVE/dmmonitor.ini

##后台启动
su dmdba
mkdir /home/dmdba/dmdbms/data/log
/home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start

先前台启动监视器检查集群状态,集群状态正常后退出,再通过监视器服务后台启动监视器。

启停集群

##启动
##MASTER、SLAVE 机器
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start

##停止
##先停掉MASTER、SLAVE两个节点的守护进程
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop
##停掉主库实例:
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmServiceMASTER stop
##停掉备库实例:
[dmdba@~]$ /home/dmdba/dmdbms/bin/DmServiceSLAVE stop
ALTER SYSTEM SET 'ALTER_MODE_STATUS' = 1;
SELECT * FROM V$PARAMETER WHERE NAME = 'ALTER_MODE_STATUS';

验证主从

1、检查库状态
SELECT STATUS$ FROM V$INSTANCE;
2、主库建表
CREATE TABLE test_sync_20250626 ( id INT PRIMARY KEY,  data VARCHAR(50));
INSERT INTO test_sync_20250626(id, data) VALUES (1, 'master_test');
COMMIT;
3、从库查表
SELECT TABLE_NAME FROM ALL_TABLES WHERE TABLE_NAME = 'TEST_SYNC_20250626';
SELECT * FROM test_sync_20250626 WHERE id = 1;
4、主从自动切换

重启主库,从库会自动升级为主库

验证新主库是否可写

CREATE TABLE test_switch(id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO test_switch VALUES(1, 'auto failover');
COMMIT;
SELECT * FROM test_switch;