两节点MPP(含主备)搭建
一、环境规划
搭建MPP两节点集群,各个节点包含主备,采用两台集群交叉方式做主备。
1.1、系统规划
操作系统 IP 所属角色 实例名 说明
centos7.4 192.168.47.14 MPP1 EP1 MPP节点一
centos7.4 192.168.47.16 MPP2 EP2 MPP节点二
centos7.4 192.168.47.16 MPP1备库 EP1STDY MPP1的备库
centos7.4 192.168.47.14 MPP2备库 EP2STDY MPP2的备库
centos7.4 192.168.47.16 监视器 EP2 监控两套主备
1.2、IP端口规划
1.2.1、主库规划
实例名 PORT_NUM MAL_PORT MAL_INST_HOST MAL_HOST MAL_INST_PORT MAL_INST_DW_PORT MAL_DW_PORT
EP1 5236 5269 192.168.47.14 192.168.47.14 6336 7336 8336
EP2 5236 5269 192.168.47.16 192.168.47.16 6336 7336 8336
1.2.2、备库规划
实例名 PORT_NUM MAL_PORT MAL_INST_HOST MAL_HOST MAL_INST_PORT MAL_INST_DW_PORT MAL_DW_PORT
EP1STDY 5237 5270 192.168.47.14 192.168.47.16 6337 7337 8337
EP2STDY 5237 5270 192.168.47.16 192.168.47.14 6337 7337 8337
1.3、守护进程规划
组名 实例名 IP
GRP1(OGUID:45331) EP1 192.168.47.14
EP1STDY 192.168.47.16
GRP2(OGUID:45332) EP2 192.168.47.16
EP2STDY 192.168.47.14
1.4、安装规划
1.4.1、主库路径规划
实例名 IP 安装路径 数据库路径
MPP1 EP1 192.168.47.14 /dm/dmdbms /dmdata
MPP2 EP2 192.168.47.16 /dm/dmdbms /dmdata
1.4.2、备库路径规划
实例名 IP 安装路径 数据库路径
MPP1 EP1STDY 192.168.47.16
共用一套 /dmdata/standy
MPP2 EP2STDY 192.168.47.14 /dmdata/standy
1.4日志规划
1.4.1、主库规划
实例名 在线日志 归档路径
EP1 256M2 /dm/arch
EP2 256M2 /dm/arch
1.4.2、备库规划
实例名 在线日志 归档路径
EP1STDY 256M2 /dm/arch1
EP2STDY 256M2 /dm/arch1
二、安装数据库
2.1、MPP1安装
略
2.2、MPP2安装
略
三、实例初始化
3.1、MPP1初始化
[dmdba@mpp1 ~]$ dminit PATH=/dmdata DB_NAME=EP1 INSTANCE_NAME=EP1 PAGE_SIZE=16
3.2、MPP2初始化
[dmdba@mpp2 ~]$ dminit PATH=/dmdata DB_NAME=EP2 INSTANCE_NAME=EP2 PAGE_SIZE=16
四、备库初始化
主备集群只能通过主库备份然后备库还原方式来保证魔数唯一性。主库初始化后使用脱机备份方式备份主库。
4.1、MPP1备库初始化
4.1.1、脱机备份数据库EP1
刚初始化的数据库需要启停一下才能备份
./dmrman CTLSTMT=“BACKUP DATABASE ‘/dmdata/DAMENG/dm.ini’ FULL TO MPP1 BACKUPSET ‘/dm/dmbak/MPP1’”
4.1.2、备库上恢复EP1
拷贝备份文件到备库所在机器
[dmdba@mpp1 dmbak]$ scp -r MPP1 192.168.47.16:/dm/dmbak
备库初始化一个数据库作为还原使用
[dmdba@mpp2 standy]$ dminit PATH=/dmdata/standy DB_NAME=EP1STDY INSTANCE_NAME=EP1STDY PAGE_SIZE=16
备库执行脱机数据库还原与恢复
[dmdba@mpp2 ~]$ dmrman CTLSTMT=“RESTORE DATABASE ‘/dmdata/standy/EP1STDY/dm.ini’ FROM BACKUPSET ‘/dm/dmbak/MPP1’”
[dmdba@mpp2 ~]$ dmrman CTLSTMT=“RECOVER DATABASE ‘/dmdata/standy/EP1STDY/dm.ini’ UPDATE DB_MAGIC”
4.2、MPP2备库初始化
4.2.1、脱机备份数据库EP2
刚初始化的数据库需要启停一下才能备份
./dmrman CTLSTMT=“BACKUP DATABASE ‘/dmdata/DAMENG/dm.ini’ FULL TO MPP2 BACKUPSET ‘/dm/dmbak/MPP2’”
4.2.2、备库上恢复EP2
拷贝备份文件到备库所在机器
[dmdba@mpp2 dmbak]$ scp -r MPP1 192.168.47.14:/dm/dmbak
备库初始化一个数据库作为还原使用
[dmdba@mpp2 standy]$ dminit PATH=/dmdata/standy DB_NAME=EP2STDY INSTANCE_NAME=EP2STDY PAGE_SIZE=16
备库执行脱机数据库还原与恢复
[dmdba@mpp1 ~]$ dmrman CTLSTMT=“RESTORE DATABASE ‘/dmdata/standy/EP2STDY/dm.ini’ FROM BACKUPSET ‘/dm/dmbak/MPP2’”
[dmdba@mpp2 ~]$ dmrman CTLSTMT=“RECOVER DATABASE ‘/dmdata/standy/EP2STDY/dm.ini’ UPDATE DB_MAGIC”
五、主备库配置文件配置
5.1、MPP1节点主备配置
5.1.1、dm.ini
在MPP1上配置实例EP1(主库),修改以下参数
INSTANCE_NAME = EP1
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
MPP_INI = 1 #
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息
在MPP2上配置实例EP1STDY(备库)
INSTANCE_NAME = EP1STDY
PORT_NUM = 5237 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
MPP_INI = 1 #
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息
5.1.2、dmarch.ini
在MPP1上配置实例EP1(主库)
[ARCHIVE_REALTIME]
ARCH_TYPE = TIMELYE #即时归档类型
ARCH_DEST = EP1STDY #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~2147483647M
在MPP2上配置实例EP1STDY(备库)
[ARCHIVE_REALTIME]
ARCH_TYPE = TIMELYE #即时归档类型
ARCH_DEST = EP1 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/arch1 #备库上使用此路径存放
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~2147483647M
5.1.3、dmmal.ini
配置 dmmal.ini 如下,四个实例配置完全一样,互相拷贝即可。
[MAL_INST1]
MAL_INST_NAME = EP1
MAL_HOST = 192.168.47.14
MAL_PORT = 5269
MAL_INST_HOST = 192.168.47.14
MAL_INST_PORT = 5236
MAL_DW_PORT = 8336
MAL_INST_DW_PORT = 7336
[MAL_INST2]
MAL_INST_NAME = EP1STDY
MAL_HOST = 192.168.47.16
MAL_PORT = 5270
MAL_INST_HOST = 192.168.47.16
MAL_INST_PORT = 5237
MAL_DW_PORT = 8337
MAL_INST_DW_PORT = 7337
[MAL_INST3]
MAL_INST_NAME = EP2
MAL_HOST = 192.168.47.16
MAL_PORT = 5269
MAL_INST_HOST = 192.168.47.16
MAL_INST_PORT = 5236
MAL_DW_PORT = 8336
MAL_INST_DW_PORT = 7336
[MAL_INST4]
MAL_INST_NAME = EP2STDY
MAL_HOST = 192.168.47.14
MAL_PORT = 5270
MAL_INST_HOST = 192.168.47.14
MAL_INST_PORT = 5237
MAL_DW_PORT = 8337
MAL_INST_DW_PORT = 7337
5.1.4、dmwacther.ini
一般来说,每个单独的实例都是使用一个单独的守护进程守护。本例中,由于同一台机器上有不同组的两个实例,我们可以只配置一个守护进程,同时守护两个实例。
MPP1(/dmdata/EP1/),MPP1机器上配置dmwatcher.ini,配置为全局守护类型,使用自动切换模式。
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45331#守护系统唯一 OGUID 值
INST_INI = /dmdata/EP1/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
[GRP2]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45332 #守护系统唯一 OGUID 值
INST_INI = /dmdata/standy/EP2STDY/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
5.1.6、dmmpp.ctl
dmmpp.ctl 是一个二进制文件,用户不能直接配置,需要先配置 dmmpp.ini,然后再用dmmppctl命令生成dmmpp.ctl文件,每个节点配置完全一样,EP间可互相拷贝。
配置 dmmpp.ini 如下:
[SERVICE_NAME1]
MPP_SEQ_NO = 0
MPP_INST_NAME = EP1
[SERVICE_NAME2]
MPP_SEQ_NO = 1
MPP_INST_NAME = EP2
生成dmmpp.ctl文件:
dmctlcvt TYPE=2 SRC=/dmdata/EP1/dmmpp.ini DEST=/dmdata/EP1/dmmpp.ctl
5.1.7、启动主备库
以mount方式启动数据库修改OGUID
./disql SYSDBA/SYSDBA*LOCAL@localhost:5236
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
sp_set_oguid(45332);
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
5.2、MPP2节点主备配置
5.2.1、dm.ini
5.2.2、dmarch.ini
在MPP2上配置实例EP2(主库)
[ARCHIVE_REALTIME]
ARCH_TYPE = TIMELYE #即时归档类型
ARCH_DEST = EP2STDY #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~2147483647M
在MPP1上配置实例EP2STDY(备库)
[ARCHIVE_REALTIME]
ARCH_TYPE = TIMELYE #即时归档类型
ARCH_DEST = EP2 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/arch1 #备库上使用此路径存放
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~2147483647M
5.2.3、dmmal.ini
拷贝5.1.3即可
5.2.4、dmwacther.ini
MPP2(/dmdata/EP2/),MPP2机器上配置dmwatcher.ini,配置为全局守护类型,使用自动切换模式。
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/standy/EP1STDY/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
[GRP2]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 45332#守护系统唯一 OGUID 值
INST_INI = /dmdata/EP2/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
5.2.5、dmmonitor.ini
5.2.6、dmmpp.ctl
5.1.6的拷贝到各个数据目录下即可
六、监视器配置
6.1、dmmonitor.ini
监视器配置在MPP2 /dmdata/DAMENG下,一个监视器监控两套主备。
MON_DW_CONFIRM = 1 #确认监视器模式,
MON_LOG_PATH = /dm/monlog #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1的唯一OGUID 值 #以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT对应dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.47.14:8336
MON_DW_IP = 192.168.47.16:8337
[GRP2]
MON_INST_OGUID = 453331 #组 GRP1的唯一OGUID 值 #以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT对应dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.47.14:8337
MON_DW_IP = 192.168.47.14:8336
七、注册服务
7.1 MPP1节点
注册MPP1主节点
./dm_service_installer.sh -t dmserver -p EP1 -dm_ini /dmdata/EP1/dm.ini -m mount
注册MPP2备节点
./dm_service_installer.sh -t dmserver -p EP2STDY -dm_ini /dmdata/standy/EP2STDY/dm.ini -m mount
注册守护进程
./dm_service_installer.sh -t dmwatcher -p DMWATCHER -watcher_ini /dmdata/EP1/dmwatcher.ini -y DmServiceEP1 -y DmServiceEP1STDY
启动服务
./DmWatcherServiceDMWATCHER start
./dm_service_installer.sh -t dmserver -p EP1STDY -dm_ini /dmdata/EP2STDY/dm.ini -m mount
./dm_service_installer.sh -t dmwatcher -p DMWATCHER -watcher_ini /dmdata/EP1/dmwatcher.ini -y DmServiceEP2STDY
启动服务
./DmWatcherServiceDMWATCHER start
7.2 MPP2节点
注册MPP2节点主库
./dm_service_installer.sh -t dmserver -p EP2 -dm_ini /dmdata/EP2/dm.ini -m mount
注册MPP1节点备库
./dm_service_installer.sh -t dmserver -p EP1STDY -dm_ini /dmdata/standy/EP1STDY/dm.ini -m mount
注册守护进程
./dm_service_installer.sh -t dmwatcher -p DMWATCHER -watcher_ini /dmdata/EP1/dmwatcher.ini -y DmServiceEP2 -y DmServiceEP1STDY
注册监视进程
./dm_service_installer.sh -t dmmonitor -p DMMONITOR -monitor_ini /dmdata/EP2/dmmonitor.ini
八、启动服务
8.1、MPP1
[dmdba@mpp1 ~]$ DmWatcherServiceDMWATCHER start
8.2、MPP2
[dmdba@mpp2 ~]$ DmWatcherServiceDMWATCHER start
8.3、增加普通监视器查看集群状态
[dmdba@mpp2 EP2]$ cp dmmonitor.ini dmmonitor1.ini
九、装载数据测试
dm_svc.conf配置
TIME_ZONE=(+8:00)
LANGUAGE=(en)
mppsvc=(192.168.47.14:5236,192.168.47.16:5236,192.168.47.14:5237,192.168.47.16:5237)
MPP全局登录创建表
create table hash_tab(a1 int,a2 char) distributed by hash(a1) ;
insert into hash_tab values(1,‘a’);
insert into hash_tab values(2,‘b’);
insert into hash_tab values(3,‘c’);
insert into hash_tab values(4,‘d’);
insert into hash_tab values(5,‘e’);
insert into hash_tab values(6,‘f’);
insert into hash_tab values(7,‘g’);
insert into hash_tab values(8,‘h’);
insert into hash_tab values(9,‘j’);
insert into hash_tab values(10,‘k’);
insert into hash_tab values(11,‘l’);
insert into hash_tab values(12,‘m’);
commit;
单独登录各个数据库查看数据按照条件分布存储
十、模拟故障
将MPP1关机重新全局连接查看MPP活动实例情况