• 部署规划
    1. IP规划

主机名

服务IP

心跳IP

数据库名

实例名

localhost

192.168.124.129

DMDB

DW1

localhost

192.168.124.130

DMDB

DW2

localhost

192.168.124.136

DMDB

DW3

    1. 端口规划

实例名

实例端口

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

备注:切换之前一定要先检查主备库的数据一致性。

五.易错点

  1. 网络状态要确定好,三台机器的防火墙、selinux都关闭
  2. 一主一备在第一次前台启动时,要做参数调优以及创建测试表,一是可以检验主备之间的同步状态是否正常,二可以触发DBMS的检查点刷盘统一主备的LSN号。
  3. 在增加备节点时,一主一备的实例和数据守护都处于运行状态,直到备节点完成配置,在dmmonitor中看到DW3为MOUNT状态。下一步可以按照正常关闭集群的顺序关闭主备集群,重启后三个节点的LSN就会统一

社区地址:https://eco.dameng.com