注册
DM8数据守护主备集群搭建-dcp学习
培训园地/ 文章详情 /

DM8数据守护主备集群搭建-dcp学习

guoguo 2023/05/30 902 0 0

DM8数据守护主备集群搭建

1.搭建需求

操作系统 麒麟v10sp3

数据库版本:
主机 192.168.52.188 root,dmdba/Dameng_123
备机 192.168.52.189
监视 192.168.52.190

数据库名 实例名 PORT_NUM MAL_INST_DW_PORT MAL_HOST MAL_PORT MAL_DW_PORT
DMDWDB INST_1 5336 15101 192.168.52.188 25101 35101
DMDWDB INST_2 5336 15101 192.168.52.189 25101 35101

2.安装步骤:

创建三个测试虚机:2cpu,4Gmem,30Gdisk即可。关闭防火墙,禁用selinux等。

2.1创建主备数据库实例:(可以命令方式也可以图形gui方式)

命令方式创建数据库实例:
主库:
/dm8/bin/dminit db_name=DMDWDB instance_name=INST_1 port_num=5336 path=/dm8/data
启动数据库修改密码:
后台启动:/dm8/bin/dmserver /dm8/data/DMDWDB/dm.ini &
[dmdba@localhost ~]$ /dm8/bin/disql sysdba/SYSDBA@192.168.52.188:5336
服务器[192.168.52.188:5336]:处于普通打开状态
登录使用时间 : 3.775(ms)
disql V8
SQL> alter user sysdba identified by dameng123;
操作已执行
已用时间: 5.150(毫秒). 执行号:500.
SQL> exit
停主库:ps -ef|grep dmserver
kill进程,不要加-9,否则备份失败

备库:

/dm8/bin/dminit db_name=DMDWDB instance_name=INST_2 port_num=5336 path=/dm8/data
后台启动:/dm8/bin/dmserver /dm8/data/DMDWDB/dm.ini &
[dmdba@localhost ~]$ /dm8/bin/disql sysdba/SYSDBA@192.168.52.189:5336
服务器[192.168.52.188:5336]:处于普通打开状态
登录使用时间 : 3.775(ms)
disql V8
SQL> alter user sysdba identified by dameng123;
操作已执行
已用时间: 5.150(毫秒). 执行号:500.
SQL> exit
停备库:ps -ef|grep dmserver
kill进程

2.2备份主库

/dm8/bin/dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/DMDWDB/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/backup/BACKUP_FILE_01'"
传到备库
注意两节点先设置好相应的备份目录和dmdba的密码Dameng_123
scp * 192.168.52.189:/dm8/backup/

2.3主库准备相关参数ini

dm.ini

INSTANCE_NAME = INST_1
PORT_NUM = 5336
DW_INACTIVE_INTERVAL = 60
#需要改的4项
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1

RLOG_SEND_APPLY_MON = 64

dmmal.ini

MAL_CHECK_INTERVAL = 60
MAL_CONN_FAIL_INTERVAL = 60
[MAL_INST1]
MAL_INST_NAME = INST_1
MAL_HOST = 192.168.52.188
MAL_PORT = 25101
MAL_INST_HOST = 192.168.52.188
MAL_INST_PORT = 5336
MAL_DW_PORT = 35101
MAL_INST_DW_PORT = 15101
[MAL_INST2]
MAL_INST_NAME = INST_2
MAL_HOST = 192.168.52.189
MAL_PORT = 25101
MAL_INST_HOST = 192.168.52.189
MAL_INST_PORT = 5336
MAL_DW_PORT = 35101
MAL_INST_DW_PORT = 15101

dmarch.ini

[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = INST_2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/DMDWDB/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0

dmwatcher.ini

[DMDWDB_GRP]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 60
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 60
INST_OGUID = 705605
INST_INI = /dm8/data/DMDWDB/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

2.4启动主库状态

dmdba用户下启动主库mount状态
[dmdba@localhost ~]$ /dm8/bin/dmserver /dm8/data/DMDWDB/dm.ini mount
[dmdba@localhost ~]$ /dm8/bin/disql sysdba/dameng123@192.168.52.188:5336

服务器[192.168.52.188:5336]:处于普通配置状态
登录使用时间 : 4.163(ms)
disql V8
SQL>

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(705605);
SQL>alter database primary;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
[dmdba@localhost ~]$ /dm8/bin/disql sysdba/dameng123@192.168.52.188:5336

服务器[192.168.52.188:5336]:处于主库配置状态
登录使用时间 : 3.467(ms)
disql V8
SQL>

2.5恢复备库

/dm8/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/DMDWDB/dm.ini' FROM BACKUPSET '/dm8/backup'"
/dm8/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/DMDWDB/dm.ini' FROM BACKUPSET '/dm8/backup'"
/dm8/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/DMDWDB/dm.ini' UPDATE DB_MAGIC"

2.6备库准备相关参数ini

dm.ini

INSTANCE_NAME = INST_2
PORT_NUM = 5336
DW_INACTIVE_INTERVAL = 60

ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1

RLOG_SEND_APPLY_MON = 64

dmmal.ini

MAL_CHECK_INTERVAL = 60
MAL_CONN_FAIL_INTERVAL = 60
[MAL_INST1]
MAL_INST_NAME = INST_1
MAL_HOST = 192.168.52.188
MAL_PORT = 25101
MAL_INST_HOST = 192.168.52.188
MAL_INST_PORT = 5336
MAL_DW_PORT = 35101
MAL_INST_DW_PORT = 15101
[MAL_INST2]
MAL_INST_NAME = INST_2
MAL_HOST = 192.168.52.189
MAL_PORT = 25101
MAL_INST_HOST = 192.168.52.189
MAL_INST_PORT = 5336
MAL_DW_PORT = 35101
MAL_INST_DW_PORT = 15101

dmarch.ini

[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = INST_1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/DMDWDB/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0

dmwatcher.ini

[DMDWDB_GRP]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 60
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 60
INST_OGUID = 705605
INST_INI = /dm8/data/DMDWDB/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver
RLOG_APPLY_THRESHOLD = 0

2.7启动备库状态

dmdba用户下启动备库mount状态

/dm8/bin/dmserver /dm8/data/DMDWDB/dm.ini mount

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(705605);
SQL>alter database standby;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

=====================
[dmdba@localhost ~]$ /dm8/bin/disql sysdba/dameng123@192.168.52.189:5336

服务器[192.168.52.189:5336]:处于普通配置状态
登录使用时间 : 4.848(ms)
disql V8
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 7.904(毫秒). 执行号:0.
SQL> sp_set_oguid(705605);
DMSQL 过程已成功完成
已用时间: 3.155(毫秒). 执行号:1.
SQL> alter database standby;
操作已执行
已用时间: 6.584(毫秒). 执行号:0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 6.327(毫秒). 执行号:2.
SQL> exit
[dmdba@localhost ~]$ /dm8/bin/disql sysdba/dameng123@192.168.52.189:5336

服务器[192.168.52.189:5336]:处于备库配置状态
登录使用时间 : 3.963(ms)
disql V8
SQL>

2.8主库注册服务

手动启动:
/dm8/bin/dmwatcher /dm8/data/DMDWDB/dmwatcher.ini
注册服务:
/dm8/script/root/dm_service_installer.sh -t dmserver -p DmServiceINST_1 -m mount -dm_ini /dm8/data/DMDWDB/dm.ini
/dm8/script/root/dm_service_installer.sh -t dmwatcher -p DMDWDBWATCHER -watcher_ini /dm8/data/DMDWDB/dmwatcher.ini

root用户执行启停:
systemctl stop DmServiceDmServiceINST_2
systemctl stop DmWatcherServiceDMDWDBWATCHER
systemctl start DmServiceDmServiceINST_2
systemctl start DmWatcherServiceDMDWDBWATCHER
systemctl restart DmWatcherServiceDMDWDBWATCHER

2.9备库注册服务:

手动启动:
/dm8/bin/dmwatcher /dm8/data/DMDWDB/dmwatcher.ini
注册服务:(可以加-m mount也可以不用mount)
/dm8/script/root/dm_service_installer.sh -t dmserver -p DmServiceINST_2 -m mount -dm_ini /dm8/data/DMDWDB/dm.ini
/dm8/script/root/dm_service_installer.sh -t dmwatcher -p DMDWDBWATCHER -watcher_ini /dm8/data/DMDWDB/dmwatcher.ini
启停服务
[dmdba@localhost ~]$ /dm8/bin/DmWatcherServiceDMWATCHER start
DmWatcherServiceDMWATCHER (pid 1676) is running.
[dmdba@localhost ~]$ /dm8/bin/DmWatcherServiceDMWATCHER stop
Stopping DmWatcherServiceDMWATCHER: [ OK ]
[dmdba@localhost ~]$ ll /dm8/bin/Dm*
-rwxr-xr-x 1 dmdba dinstall 14941 5月 23 09:27 /dm8/bin/DmAPService
-rwxr-xr-x 1 dmdba dinstall 15487 5月 23 09:27 /dm8/bin/DmAuditMonitorService
-rwxr-xr-x 1 dmdba dinstall 14651 5月 23 09:27 /dm8/bin/DmInstanceMonitorService
-rwxr-xr-x 1 dmdba dinstall 15105 5月 23 09:27 /dm8/bin/DmJobMonitorService
-rwxr-xr-x 1 dmdba dinstall 17340 5月 23 09:29 /dm8/bin/DmServiceDMSERVER
-rwxr-xr-x 1 dmdba dinstall 17342 5月 23 16:24 /dm8/bin/DmServiceDMSERVER1
-rwxr-xr-x 1 dmdba dinstall 17360 5月 26 10:42 /dm8/bin/DmServiceDmServiceIN_JYC2
-rwxr-xr-x 1 dmdba dinstall 17362 5月 28 20:48 /dm8/bin/DmServiceDmServiceINST_2
-rwxr-xr-x 1 dmdba dinstall 14929 5月 28 15:29 /dm8/bin/DmWatcherServiceDMDWDBWATCHER
-rwxr-xr-x 1 dmdba dinstall 14921 5月 26 10:43 /dm8/bin/DmWatcherServiceDMWATCHER
卸载服务参考命令:
/dm8/script/root/dm_service_uninstaller.sh -n DmMonitorServiceDMDWDBMONITOR

root用户执行启停:
systemctl stop DmServiceDmServiceINST_2
systemctl stop DmWatcherServiceDMDWDBWATCHER
systemctl start DmServiceDmServiceINST_2
systemctl start DmWatcherServiceDMDWDBWATCHER
systemctl restart DmWatcherServiceDMDWDBWATCHER

2.10测试主备同步:

  1. reboot主机主备库观察状态
    su - dmdba
    /dm8/bin/disql sysdba/dameng123@192.168.52.188:5336
    /dm8/bin/disql sysdba/dameng123@192.168.52.189:5336
  2. 创建对象观察同步
    create table t1(id int);
    insert into t1 values(1);实时模式即使没提交,备库也有
    select * from t1;
  3. 查看OGUID
    SQL> SELECT oguid FROM v$instance;

行号 OGUID


1 705605
SQL> SELECT * FROM v$dm_mal_ini;

行号 MAL_NAME MAL_INST_NAME MAL_HOST MAL_PORT MAL_INST_HOST MAL_INST_PORT MAL_DW_PORT MAL_LINK_MAGIC MAL_INST_DW_PORT


1 MAL_INST1 INST_1 192.168.52.188 25101 192.168.52.188 5336 35101 0 15101
2 MAL_INST2 INST_2 192.168.52.189 25101 192.168.52.189 5336 35101 0 15101

2.11配置监视器

监视器上配置:dmmonitor.ini可以在任意位置,无需创建实例。

dmmonitor.ini

MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm8/data/DMDWDB/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[DMDWDB_GRP]
MON_INST_OGUID = 705605
MON_DW_IP = 192.168.52.188:35101
MON_DW_IP = 192.168.52.189:35101

su - dmdba
/dm8/bin/dmmonitor /dm8/data/DMDWDB/dmmonitor.ini
show
switchover
login
用户名:sysdba
密码:dameng123
检查./disql sysdba/dameng123@localhost:5336

再切switchover

注册监视:
/dm8/script/root/dm_service_installer.sh -t dmmonitor -p DMDWDBMONITOR -monitor_ini /dm8/data/DMDWDB/dmmonitor.ini
删除服务:
systemctl disable DmMonitorServiceDMDWDBMONITOR.service
rm -f /usr/lib/systemd/system/DmMonitorServiceDMDWDBMONITOR.service
或者
/dm8/script/root/dm_service_uninstaller.sh -n DmMonitorServiceDMDWDBMONITOR

[root@localhost data]# systemctl start DmMonitorServmonitor

这时,你无法登录监视器了,因为监视器没提供端口给你访问

如果设置的是确认监视器(确认监视器只能启动一个)并且已经启动了,
那么可以配置一个非确认监视器进行查看各节点状态及切换操作,
[dmdba@localhost ~]$ cp /dm8/data/DMDWDB/dmmonitor.ini /dm8/data/DMDWDB/dmmonitor2.ini
[dmdba@localhost ~]$ vi /dm8/data/DMDWDB/dmmonitor2.ini
#修改此项即可:
MON_DW_CONFIRM = 0

使用
/dm8/bin/dmmonitor /dm8/data/DMDWDB/dmmonitor2.ini命令进行查看

查看日志则进入cd /dm8/data/DMDWDB/log
tail -f xxx方式即可。
查看集群状态:
show global info
image.png

3.遇到的问题:

kill -9导致备份失败:(前台启动数据库之间exit即可,但后台启动数据库后,正常停库使用kill进程不要加-9)
[dmdba@localhost backup]$ /dm8/bin/dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/DMDWDB/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/backup/BACKUP_FILE_01'"
dmrman V8
BACKUP DATABASE '/dm8/data/DMDWDB/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/backup/BACKUP_FILE_01'
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
begin redo pwr log collect, last ckpt lsn: 38640 ...
redo pwr log collect finished
EP[0]'s cur_lsn[38950], file_lsn[38950]
[-8216]:归档日志不完整,请使用dmrman工具执行'repair archive log ...'语句修复归档日志
重启库
[dmdba@localhost backup]$ /dm8/bin/dmserver /dm8/data/DMDWDB/dm.ini &
[1] 3560
[dmdba@localhost backup]$ file dm.key not found, use default license!
version info: develop
DM Database Server 64 V8 03134283968-20230103-178822-20033 startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2024-01-03
begin redo pwr log collect, last ckpt lsn: 38640 ...
redo pwr log collect finished
main rfil[/dm8/data/DMDWDB/DMDWDB01.log]'s grp collect 0 valid pwr record, discard 17 invalid pwr record
EP[0]'s cur_lsn[38950], file_lsn[38950]
begin redo log recover, last ckpt lsn: 38640 ...
redo log recover finished
ndct db load finished
ndct second level fill fast pool finished
ndct third level fill fast pool finished
ndct second level fill fast pool finished
ndct third level fill fast pool finished
ndct fill fast pool finished
pseg_set_gtv_trxid_low next_trxid in mem:[7021]
pseg_collect_mgr_items, total collect 0 active_trxs, 0 cmt_trxs, 0 pre_cmt_trxs, 0 to_release_trxs, 0 active_pages, 0 cmt_pages, 0 pre_cmt_pages, 0 to_release_pages, 0 mgr pages, 0 mgr recs!
next_trxid in mem:[8023]
next_trxid = 9025.
pseg recv finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
nsvr_process_before_open begin.
nsvr_process_before_open success.
SYSTEM IS READY.
执行checkpoint(100);
[dmdba@localhost backup]$ /dm8/bin/disql sysdba/dameng123@192.168.52.188:5336

服务器[192.168.52.188:5336]:处于普通打开状态
登录使用时间 : 3.949(ms)
disql V8
SQL> checkpoint(100);
checkpoint request by user
checkpoint begin, used_space[105472], free_space[536757248]...
checkpoint end, 0 pages flushed, used_space[71680], free_space[536791040].
DMSQL 过程已成功完成
已用时间: 6.833(毫秒). 执行号:500.
SQL> exit
[dmdba@localhost backup]$ ps -ef|grep dmse
dmdba 1611 1 0 14:27 ? 00:00:04 /dm8/bin/dmserver path=/dm8/data/DMDW/dm.ini -noconsole mount
dmdba 3560 2831 0 14:55 pts/0 00:00:00 /dm8/bin/dmserver /dm8/data/DMDWDB/dm.ini
dmdba 3666 2831 0 14:56 pts/0 00:00:00 grep dmse
关闭库:
[dmdba@localhost backup]$ kill 3560
[dmdba@localhost backup]$ Server is stopping...
listener closed and all sessions disconnected
adjust undo_retention & wakeup purge thread...full check point starting...
generate force checkpoint, rlog free space[536780800], used space[81920]
checkpoint begin, used_space[81920], free_space[536780800]...
checkpoint end, 0 pages flushed, used_space[0], free_space[536862720].
full check point end.
shutdown audit subsystem...OK
shutdown schedule subsystem...OK
shutdown timer successfully.
pre-shutdown MAL subsystem...OK
shutdown worker threads subsystem...OK
shutdown logic log subsystem...OK
shutdown sequence cache subsystem...OK
wait for mtsk link worker to exit..OK
shutdown mpp session subsystem...OK
wait for rapply is all over... OK
rapply worker threads exit successfully.
pre ending task & worker threads...OK
shutdown dblink subsystem...OK
shutdown local parallel threads pool successfully.
shutdown pthd_pools...OK
shutdown session subsystem...shutdown aux session subsystem...OK
shutdown rollback segments purging subsystem...OK
shutdown transaction subsystem...OK
shutdown locking subsystem...OK
shutdown dbms_lock subsystem...OK
ending tsk and worker threads...OK
ckpt2_exec_immediately begin.
checkpoint begin, used_space[0], free_space[536862720]...
checkpoint end, 0 pages flushed, used_space[6144], free_space[536856576].
checkpoint begin, used_space[6144], free_space[536856576]...
checkpoint end, 0 pages flushed, used_space[0], free_space[536862720].
checkpoint begin, used_space[0], free_space[536862720]...
checkpoint end, 0 pages flushed, used_space[0], free_space[536862720].
shutdown archive subsystem...OK
shutdown redo log subsystem...OK
shutdown MAL subsystem...OK
shutdown message compress subsystem successfully.
shutdown task subsystem...OK
shutdown trace subsystem...OK
shutdown svr_log subsystem...OK
shutdown plan cache subsystem...OK
shutdown database dictionary subsystem...OK
shutdown file subsystem...OK
shutdown mac cache subsystem...OK
shutdown dynamic login cache subsystem...OK
shutdown ifun/bifun/sfun/afun cache subsystem...OK
shutdown crypt subsystem...OK
shutdown pipe subsystem...OK
shutdown compress component...OK
shutdown slave redo subsystem...OK
shutdown kernel buffer subsystem...OK
shutdown SQL capture subsystem...OK
shutdown control file system...OK
shutdown dtype subsystem...OK
shutdown huge buffer and memory pools...OK
close lsnr socket
DM Database Server shutdown successfully.

[1]+ 已完成 /dm8/bin/dmserver /dm8/data/DMDWDB/dm.ini
[dmdba@localhost backup]$
[dmdba@localhost backup]$
重新执行备份:
[dmdba@localhost backup]$ /dm8/bin/dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/DMDWDB/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/backup/BACKUP_FILE_01'"
dmrman V8
BACKUP DATABASE '/dm8/data/DMDWDB/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/backup/BACKUP_FILE_01'
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[39344], file_lsn[39344]
Processing backupset /dm8/backup/BACKUP_FILE_01
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
backup successfully!
time used: 00:00:03.217
[dmdba@localhost backup]$

4.相关参考:

达梦官方资料
https://blog.csdn.net/u010053152/article/details/125623865
https://eco.dameng.com/community/post/20230519142157WS7K5G9RX82C3UXQGG
https://eco.dameng.com/community/training/de411da1eeb86dd6e5e8b32778fb5743

5.思考

DM是否可以像oracle的adg那样不需要停主库就可以搭建出守护集群呢?毕竟生产环境,尤其是大库的情况下,没有那么多停机时间,如果能在线完成搭建集群将满足更多适用的场景。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服