- 部署规划
- IP规划
主机名 | 服务IP | 心跳IP | 数据库名 | 实例名 |
localhost | 192.168.124.129 | DMDB | DW1 | |
localhost | 192.168.124.130 | DMDB | DW2 | |
localhost | 192.168.124.136 | DMDB | DW3 |
- 端口规划
实例名 | 实例端口 | MAL 系统监听 | TCP 连接的端口 实例本地的守护进程监TCP 连接的端口 | 实例监听守护进程TCP 连接的端口 |
DW1 | 5236 | 7336 | 7436 | 7536 |
DW2 | 5236 | 7336 | 7436 | 7536 |
DW3 | 5236 | 7336 | 7436 | 7536 |
- 一主一备搭建
2.1 DW1与DW2完成初始化实例
./dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=DMDB instance_name=DW1 SYSDBA_PWD=”Hn@dameng123″ SYSAUDITOR_PWD=”Hn@dameng123″
./dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=DMDB instance_name=DW2 SYSDBA_PWD=”Hn@dameng123″ SYSAUDITOR_PWD=”Hn@dameng123″
以主机 dmdb01 为主库,启动实例
./dmserver /dmdata/DMDB/dm.ini
出现 system is ready 后输入 exit 停止数据库。
2.2 脱机备份数据库
dmdba 用户 启动 dmrman 工具
./dmrman use_ap=2
执行 backup 全库:
backup database ‘/dmdata/DMDB/dm.ini’ backupset ‘/home/dmdba/bakfull’;
2.3 备份还原
使用 dmrman 工具还原备库,dmdba 用户执行:
./dmrman
执行 restore:
restore database ‘/dmdata/DMDB/dm.ini’ from backupset ‘/home/dmdba/bakfull’;
完成后执行 recover:
recover database ‘/dmdata/DMDB/dm.ini’ from backupset ‘/home/dmdba/bakfull’;
最后执行 recover update db_magic。
recover database ‘/dmdata/DMDB/dm.ini’ update db_magic;
2.4 修改dm.ini参数
vi /dmdata/DMDB/dm.ini
主库 dw1 上修改以下参数值:
INSTANCE_NAME = dw1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
备库 dw2 上修改以下参数值:
INSTANCE_NAME = dw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
2.5 配置dmarch.ini
vi /dmdata/DMDB/dmarch.ini
主库 dw1 上添加以下内容:
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dw2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 4096
备库 dw2 上添加以下内容:
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dw1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 4096
2.6 配置dmmal.ini
vi /dmdata/DMDB/dmmal.ini
主备库 2 个节点文件内容要相同。
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 15
[MAL_INST1]
MAL_INST_NAME = dw1
MAL_HOST = 192.168.124.129
MAL_PORT = 7336
MAL_INST_HOST = 192.168.124.129
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST2]
MAL_INST_NAME = dw2
MAL_HOST = 192.168.124.130
MAL_PORT = 7336
MAL_INST_HOST = 192.168.124.130
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
2.7 dmwatcher.ini
vi /dmdata/DMDB/dmwatcher.ini
主备库 2 节点文件内容要相同。
[GRP_DW]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 30
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 20
INST_OGUID = 453331
INST_INI = /dmdata/DMDB/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
以 mount 方式启动数据库实例
使用 dmdba 用户,执行以下命令(主备库都执行):
./dmserver /dmdata/DMDB/dm.ini mount
在新的终端使用 disql 工具连接数据库:
./disql SYSDBA/'”Hn@dameng123″‘
主备库都修改 oguid,执行以下命令:
sp_set_oguid(453331);
主库 dw1 上修改数据库模式为 primary,执行以下命令:
alter database primary;
备库 dw2 上修改数据库模式为 standby,执行以下命令:
alter database standby;
启动守护进程
dmdba 用户下,到数据库安装目录的 bin 下执行以下命令
./dmwatcher /dmdata/DMDB/dmwatcher.ini
2.8 注册服务
使用 root 用户,到数据库安装目录的 script/root 下。
./dm_service_installer.sh -t dmwatcher -p dw -watcher_ini /dmdata/DMDB/dmwatcher.ini
./dm_service_installer.sh -t dmserver -p dw -dm_ini /dmdata/DMDB/dm.ini
./dm_service_uninstaller.sh -n DmServicedw
./dm_service_uninstaller.sh -n DmWatcherServicedw
2.9 验证一主一备搭建情况
create table test(id int);
insert into test values (1);
commit;
集群任意节点,配置普通监视器配置文件 dmmonitor.ini,执行以下命令:
vi /dmdata/DMDB/dmmonitor.ini
添加以下内容:
说明:具体配置时,请把#和#之后的中文内容删除。
MON_DW_Confirm = 0
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 200
MON_LOG_SPACE_LIMIT = 1024
[GRP_DW]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.124.129:7436
MON_DW_IP = 192.168.124.130:7436
执行以下命令,启动监视器:
./dmmonitor /dmdata/DMDB/dmmonitor.ini
2.10 参数优化
关闭主库守护进程:./DmWatcherServicedw stop
关闭备库守护进程:DmWatcherServicedw stop
关闭主库实例:./DmServicedw stop
关闭备库实例:./DmServicedw stop
启动主库实例:./DmServicedw start
启动备库实例:./DmServicedw start
启动主库守护进程:./DmWatcherServicedw start
启动备库守护进程:./DmWatcherServicedw start
- 尝试增加一个备份节点
3.1 初始化实例
./dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=DMDB instance_name=DW3 SYSDBA_PWD=”Hn@dameng123″ SYSAUDITOR_PWD=”Hn@dameng123″
3.2 备份还原
主库备份
./disql SYSDBA/SYSDBA@localhost:7236
BACKUP DATABASE BACKUPSET ‘/opt/D2/D2/EP01/dmbak’;
scp -r ./db_full_bak_01/ dmdba@192.168.101.220:/opt/D2/D2/
使用 dmrman 工具还原备库,dmdba 用户执行:
./dmrman use_ap=2
执行 restore:
restore database ‘/opt/D2/D2/EP02/DAMENG/dm.ini’ from backupset ‘/opt/D2/D2/db_full_bak_01/’;
完成后执行 recover:
recover database ‘/opt/D2/D2/EP02/DAMENG/dm.ini’ from backupset ‘/opt/D2/D2/db_full_bak_01/’;
最后执行 recover update db_magic。
recover database ‘/opt/D2/D2/EP02/DAMENG/dm.ini’ update db_magic;
3.3 修改dm.ini参数
vi /dmdata/DMDB/dm.ini
Dw3 上修改以下参数值:
INSTANCE_NAME = dw3
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
3.4 配置dmarch.ini
vi /dmdata/DMDB/dmarch.ini
Dw3 上添加以下内容:
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dw1
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = dw2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 4096
3.5 配置dmmal.ini
vi /dmdata/DMDB/dmmal.ini 要停止已经存在的主备架构并且修改配置文件
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 15
[MAL_INST1]
MAL_INST_NAME = dw1
MAL_HOST = 192.168.124.129
MAL_PORT = 7336
MAL_INST_HOST = 192.168.124.129
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST2]
MAL_INST_NAME = dw2
MAL_HOST = 192.168.124.130
MAL_PORT = 7336
MAL_INST_HOST = 192.168.124.130
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST3]
MAL_INST_NAME = dw3
MAL_HOST = 192.168.124.136
MAL_PORT = 7336
MAL_INST_HOST = 192.168.124.136
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
3.6 dmwatcher.ini
vi /dmdata/DMDB/dmwatcher.ini
[GRP_DW]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 30
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 20
INST_OGUID = 453331
INST_INI = /dmdata/DMDB/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
以 mount 方式启动数据库实例
使用 dmdba 用户,执行以下命令
./dmserver /opt/D2/D2/EP02/DAMENG/dm.ini mount
在新的终端使用 disql 工具连接数据库:
./disql SYSDBA/@localhost:7236
执行以下命令:
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
sp_set_oguid(453331);
alter database standby;
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
动态添加MAL设置,集群的每个节点都要运行
./disql SYSDBA/'”Hn@dameng123″‘@192.168.124.129:5236
./disql SYSDBA/'”Hn@dameng123″‘@192.168.124.130:5236
SF_MAL_CONFIG(1,0);
SF_MAL_INST_ADD(‘MAL_INST3′,’dw3′,’192.168.124.136′,7336,’192.168.124.136’,5236,7436,0,7536);
SF_MAL_CONFIG_APPLY();
SF_MAL_CONFIG(0,0);
动态添加归档配置
alter database add archivelog ‘DEST=dw3, TYPE=REALTIME’;
3.7 注册服务
使用 root 用户,到数据库安装目录的 script/root 下。
./dm_service_installer.sh -t dmwatcher -p dw -watcher_ini /dmdata/DMDB/dmwatcher.ini
./dm_service_installer.sh -t dmserver -p dw -dm_ini /dmdata/DMDB/dm.ini
3.8 启动集群
启动主库实例:./DmServicedw start
启动备库实例:./DmServicedw start
启动主库守护进程:./DmWatcherServicedw start
启动备库守护进程:./DmWatcherServicedw start
3.9 验证一主两备搭建情况
集群任意节点,配置普通监视器配置文件 dmmonitor.ini,执行以下命令:
vi /dmdata/DMDB/dmmonitor.ini
添加以下内容:
MON_DW_Confirm = 0
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 200
MON_LOG_SPACE_LIMIT = 1024
[GRP_DW]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.124.129:7436
MON_DW_IP = 192.168.124.130:7436
MON_DW_IP = 192.168.124.136:7436
执行以下命令,启动监视器:
./dmmonitor /dmdata/DMDB/dmmonitor.ini
- 主备集群主节点切换
4.1 主备库正常切换
4.1.1 确定节点状态
show 确定节点的LSN号一致
4.1.2 节点切换
监视器上切换的命令格式:switchover [group_name[.]] [inst_name]
switchover GRP_DW.DW2
此时DW2已经切换为主库
4.2 故障异常切换
主库发生故障后,可以通过监视器的 Takeover 命令,将备库切换为主库,继续对外提供服务。如果配置为自动切换模式,确认监视器可以自动检测主库故障,并通知备库接管,这个过程不需要人工干预。
命令格式:takeover [group_name[.]] [inst_name]
takeover GRP1.DMSERVER_02
备注:切换之前一定要先检查主备库的数据一致性。
五.易错点
- 网络状态要确定好,三台机器的防火墙、selinux都关闭
- 一主一备在第一次前台启动时,要做参数调优以及创建测试表,一是可以检验主备之间的同步状态是否正常,二可以触发DBMS的检查点刷盘统一主备的LSN号。
- 在增加备节点时,一主一备的实例和数据守护都处于运行状态,直到备节点完成配置,在dmmonitor中看到DW3为MOUNT状态。下一步可以按照正常关闭集群的顺序关闭主备集群,重启后三个节点的LSN就会统一
社区地址:https://eco.dameng.com