本实践总结了在单机 windows 10 环境下搭建达梦数据库读写分离集群的方法。
为了搭建达梦数据库读写分离集群,本次实践建立了一主两备三个数据库实例,创建方式采用达梦 DBCA 工具来进行创建,并且创建主数据库时附带创建 DMHR 示例数据库。
数据库主目录为 D:\mnt\dmdbms\data
,三个数据库的数据存放在主目录下,以各自数据库名为目录名的目录下。
各数据库配置参数如下表。
数据库名 | DMPRIMARY | DMSTANDBY1 | DMSTANDBY2 |
---|---|---|---|
实例名 | DMPRIMARYSERVER | DMSTANDBY1SERVER | DMSTANDBY1SERVER |
PORT_NUM | 31141 | 31142 | 31143 |
MAL_INST_DW_PORT | 33141 | 33142 | 33143 |
MAL_PORT | 34141 | 34142 | 34143 |
MAL_DW_PORT | 32141 | 32142 | 32143 |
首先关闭三个数据库的服务,然后在三个数据库的dm.ini
配置文件搜索ARCH_INI
参数,并修改成以下值。
ARCH_INI = 1
最后分别创建三个数据库的dmarch.ini
配置文件。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = D:\mnt\dmdbms\data\DMPRIMARY\arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = D:\mnt\dmdbms\data\DMSTANDBY1\arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = D:\mnt\dmdbms\data\DMSTANDBY2\arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
开启主数据库服务,并执行以下语句进行热备。
BACKUP DATABASE BACKUPSET 'D:\mnt\dmdbms\data\bak\BACKUP_FILE_01';
使用命令行工具dmrman
将主库备份还原到备库,并进行恢复,还原恢复前需要关闭备库服务。
dmrman CTLSTMT="RESTORE DATABASE 'D:\mnt\dmdbms\data\DMSTANDBY1\dm.ini' FROM BACKUPSET 'D:\mnt\dmdbms\data\bak\BACKUP_FILE_01'"
dmrman CTLSTMT="RECOVER DATABASE 'D:\mnt\dmdbms\data\DMSTANDBY1\dm.ini' FROM BACKUPSET 'D:\mnt\dmdbms\data\bak\BACKUP_FILE_01'"
dmrman CTLSTMT="RECOVER DATABASE 'D:\mnt\dmdbms\data\DMSTANDBY1\dm.ini' UPDATE DB_MAGIC
dmrman CTLSTMT="RESTORE DATABASE 'D:\mnt\dmdbms\data\DMSTANDBY2\dm.ini' FROM BACKUPSET 'D:\mnt\dmdbms\data\bak\BACKUP_FILE_01'"
dmrman CTLSTMT="RECOVER DATABASE 'D:\mnt\dmdbms\data\DMSTANDBY2\dm.ini' FROM BACKUPSET 'D:\mnt\dmdbms\data\bak\BACKUP_FILE_01'"
dmrman CTLSTMT="RECOVER DATABASE 'D:\mnt\dmdbms\data\DMSTANDBY2\dm.ini' UPDATE DB_MAGIC
关闭主库服务后进行配置。
dm.ini
文件DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
RLOG_SEND_APPLY_MON = 64
dmmal.ini
文件MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DMPRIMARYSERVER # 和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 127.0.0.1
MAL_PORT = 34141
MAL_INST_HOST = 127.0.0.1
MAL_INST_PORT = 31141 # 和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 32141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DMSTANDBY1SERVER # 和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 127.0.0.1
MAL_PORT = 34142
MAL_INST_HOST = 127.0.0.1
MAL_INST_PORT = 31142 # 和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 32142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = DMSTANDBY2SERVER # 和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 127.0.0.1
MAL_PORT = 34143
MAL_INST_HOST = 127.0.0.1
MAL_INST_PORT = 31143 # 和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 32143
MAL_INST_DW_PORT = 33143
dmarch.ini
文件[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY
ARCH_DEST = DMSTANDBY1SERVER
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY
ARCH_DEST = DMSTANDBY2SERVER
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = D:\mnt\dmdbms\data\DMPRIMARY\arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
dmwatcher.ini
文件[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453332
INST_INI = D:\mnt\dmdbms\data\DMPRIMARY\dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = C:\dmdbms\bin\dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
以 Mount 模式启动主库服务。
dmserver D:\mnt\dmdbms\data\DMPRIMARY\dm.ini mount
显示以下内容表示启动成功。
启动命令行工具 DIsql,登录主库设置 OGUID 值,并将主库运行模式改为 Primary 模式。
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> SP_SET_OGUID(453332);
SQL> ALTER database primary;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
dm.ini
文件对D:\mnt\dmdbms\data\DMSTANDBY1\dm.ini
按照 2.1 进行同样的修改。
dmmal.ini
文件将D:\mnt\dmdbms\data\DMPRIMARY\dmmal.ini
复制到D:\mnt\dmdbms\data\DMSTANDBY1\dmal.ini
。
dmarch.ini
文件[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY
ARCH_DEST = DMPRIMARYSERVER
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY
ARCH_DEST = DMSTANDBY2SERVER
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = D:\mnt\dmdbms\data\DMSTANDBY1\arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
dmwatcher.ini
文件[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453332
INST_INI = D:\mnt\dmdbms\data\DMSTANDBY1\dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = C:\dmdbms\bin\dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
以 Mount 模式启动备库服务。
dmserver D:\mnt\dmdbms\data\DMSTANDBY1\dm.ini mount
启动命令行工具 DIsql,登录备库设置 OGUID 值,并将备库运行模式改为 Standby 模式。
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> SP_SET_OGUID(453332);
SQL> ALTER database standby;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
dm.ini
文件对D:\mnt\dmdbms\data\DMSTANDBY2\dm.ini
按照 2.1 进行同样的修改。
dmmal.ini
文件将D:\mnt\dmdbms\data\DMPRIMARY\dmmal.ini
复制到D:\mnt\dmdbms\data\DMSTANDBY2\dmal.ini
。
dmarch.ini
文件[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY
ARCH_DEST = DMPRIMARYSERVER
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY
ARCH_DEST = DMSTANDBY1SERVER
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = D:\mnt\dmdbms\data\DMSTANDBY2\arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
dmwatcher.ini
文件[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453332
INST_INI = D:\mnt\dmdbms\data\DMSTANDBY2\dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = C:\dmdbms\bin\dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
以 Mount 模式启动备库服务。
dmserver D:\mnt\dmdbms\data\DMSTANDBY2\dm.ini mount
参考 4.6。
在D:\mnt\dmdbms\data
目录下创建dmmonitor.ini
配置文件如下。
MON_DW_CONFIRM = 1
MON_LOG_PATH = D:\mnt\dmdbms\data\log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453332
MON_DW_IP = 127.0.0.1:32141
MON_DW_IP = 127.0.0.1:32142
MON_DW_IP = 127.0.0.1:32143
使用不同的命令行窗口启动各个主备的守护进程。
dmwatcher D:\mnt\dmdbms\data\DMPRIMARY\dmwatcher.ini
dmwatcher D:\mnt\dmdbms\data\DMSTANDBY1\dmwatcher.ini
dmwatcher D:\mnt\dmdbms\data\DMSTANDBY2\dmwatcher.ini
启动监视器。
dmmonitor D:\mnt\dmdbms\data\dmmonitor.ini
监视器返回如下结果表示整个集群搭建成功。
确保各个主备数据库实例均处于 Open 状态。
当做完所有数据库的备份还原之后,应关闭所有打开的主备数据库服务。后续启动时应保证以 mount 模式打开,确保通过 dmwatcher 守护进程对数据库修改为 open 模式。
文章
阅读量
获赞