跳转到内容

单机在线转主备集群

目前版本(2025 年第一季度版本 - 8.1.4.80)已经支持单机在线转变为主备集群。

端口规划

主库的实例名为 DM01,备库的实例名为 DM02

实例名MAL_HOSTPORT_NUMMAL_INST_DW_PORTMAL_PORTMAL_DW_PORT
DM0110.76.11.20565237653376543765537
DM0210.76.11.20565238653386543865538

安装单机

初始化单机实例:

bash
./dminit path=data instance_name=DM01 db_name=DM01 port_num=65237 page_size=32 extent_size=32 log_size=2048 SYSDBA_PWD=DMDBA_hust4400 SYSAUDITOR_PWD=DMDBA_hust4400

使用 normal/open 状态启动单机实例:

bash
./dmserver data/DM01/dm.ini

如出现以下截图即代表启动成功:

单机实例启动成功

开启归档

正常安装的时候都会开启归档,所以在这里,我们模拟正常运行过一段时间的单机实例,将归档也打开。

执行如下命令:

sql
--开启归档:
alter database mount;
alter database archivelog;
alter database add archivelog 'TYPE=LOCAL,DEST=/data/DM01/arch,FILE_SIZE=2048,SPACE_LIMIT=102400';
alter database open;

启动 jmeter

使一个 insert 语句循环执行,用来判断搭建主备的时候,单机数据库是否正常对外服务,可以正常连接、正常执行 SQL。

先创建表结构:

sql
CREATE TABLE TEST_LG ( A1 INT, A2 VARCHAR(255), A3 CLOB );

建立 jmeter 的 workflow,如图下所示:

jmeter workflow

联机备份

与离线操作相同,在线操作也需要备份还原一个备库。

联机备份的操作如下:

sql
BACKUP DATABASE FULL BACKUPSET 'FULL_BAK_20250706' COMPRESSED LEVEL 1 PARALLEL 4;

新建实例并还原

我们需要还原一个实例作为备库。

操作如下:

bash
## 先初始化实例
./dminit path=data instance_name=DM02 db_name=DM02 port_num=65238 page_size=32 extent_size=32 log_size=2048 SYSDBA_PWD=DMDBA_hust4400 SYSAUDITOR_PWD=DMDBA_hust4400

## 备份还原
./dmrman CTLSTMT="RESTORE DATABASE '/data/DM02/dm.ini' FROM BACKUPSET '/data/DM02/bak/FULL_BAK_20250706'"
./dmrman CTLSTMT="RECOVER DATABASE '/data/DM02/dm.ini' FROM BACKUPSET '/data/DM02/bak/FULL_BAK_20250706'"
./dmrman CTLSTMT="RECOVER DATABASE '/data/DM02/dm.ini' UPDATE DB_MAGIC"

在线添加 dmmal

需要将单机实例与备份实例连接起来,就需要在线添加 dmmal 通讯。

sql
CALL SF_MAL_INST_ADD_APPLY('MAL_INST','DM01','10.76.11.205',65437,'10.76.11.205',65237,65137,0,65337);
CALL SF_MAL_INST_ADD_APPLY('MAL_INST1','DM02','10.76.11.205',65438,'10.76.11.205',65238,65138,0,65338);
CALL SP_SET_PARA_VALUE(1,'MAL_INI',1);

出现以下截图则代表操作成功:

add dmmal setting successfully

添加 REALTIME 归档

DM01 的归档发送到 DM02 去,需要在 DM01 上配置 DM02REALTIME 归档。 命令可以在 normal/open 状态下执行。

sql
ALTER DATABASE ADD ARCHIVELOG 'TYPE=REALTIME,DEST=DM02';

修改新实例的配置文件

需要修改四个文件。

dm.ini

修改原来的文件即可。

ini
MAL_INI = 1
ARCH_INI = 1

dmmal.ini

需要在实例目录新建文件,文件内容如下:

ini
#DaMeng Database Mail Configuration file
#this is comments
MAL_CHECK_INTERVAL     = 30
MAL_COMBIN_BUF_SIZE    = 0
MAL_SEND_THRESHOLD = 2048
MAL_CONN_FAIL_INTERVAL = 10
MAL_LOGIN_TIMEOUT      = 15
MAL_BUF_SIZE           = 100
MAL_SYS_BUF_SIZE       = 0
MAL_VPOOL_SIZE         = 128
MAL_COMPRESS_LEVEL     = 0
MAL_TEMP_PATH          =

[MAL_INST]
    MAL_INST_NAME    = DM01
    MAL_HOST         = 10.76.11.205
    MAL_PORT         = 65437
    MAL_INST_HOST    = 10.76.11.205
    MAL_INST_PORT    = 65237
    MAL_DW_PORT      = 65137
    MAL_LINK_MAGIC   = 0
    MAL_INST_DW_PORT = 65337

[MAL_INST1]
    MAL_INST_NAME    = DM02
    MAL_HOST         = 10.76.11.205
    MAL_PORT         = 65438
    MAL_INST_HOST    = 10.76.11.205
    MAL_INST_PORT    = 65238
    MAL_DW_PORT      = 65138
    MAL_LINK_MAGIC   = 0
    MAL_INST_DW_PORT = 65338

dmarch.ini

需要在实例目录新建文件,文件内容如下:

ini
#DaMeng Database Archive Configuration file
#this is comments

        ARCH_WAIT_APPLY      = 0

[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = /data/hbtest/lg/bin_4_80/data/DM02/arch
        ARCH_FILE_SIZE       = 2048
        ARCH_SPACE_LIMIT     = 102400
        ARCH_FLUSH_BUF_SIZE  = 2
        ARCH_HANG_FLAG       = 1

dmwatcher.ini

需要在实例目录新建文件,文件内容如下:

ini
[DM01]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 20250708
INST_INI = /data/hbtest/lg/bin_4_80/data/DM02/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /data/hbtest/lg/bin_4_80/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

使用 mount 状态启动新实例

命令如下:

bash
./dmserver /data/hbtest/lg/bin_4_80/data/DM02/dm.ini mount

修改新实例 oguid 以及数据库状态

命令如下:

bash
## 登录实例
./disql SYSDBA/DMDBA_hust4400@127.0.0.1:65238

## 修改 oguid, 数据库状态
alter database standby;
sp_set_oguid(20250708);

旧实例新增 dmwatcher

在旧实例的实例目录中创建 dmwatcher.ini 文件,文件内容如下:

ini
[DM01]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 20250708
INST_INI = /data/hbtest/lg/bin_4_80/data/DM02/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /data/hbtest/lg/bin_4_80/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

修改旧实例的 oguid 以及数据库状态

命令如下:

sql
alter database primary force;
sp_set_oguid(20250708);

启动新旧实例的 dmwatcher

命令如下:

bash
./dmwatcher /data/hbtest/lg/bin_4_80/data/DM01/dmwatcher.ini
./dmwatcher /data/hbtest/lg/bin_4_80/data/DM02/dmwatcher.ini

查看 dmmonitor

见到如下截图,则代表搭建成功。

dmmonitor

基于 Apache 2.0 许可发布