目录
1 MPP搭建
1.1 集群规划
实例名 | MAL_INST_HOST | MAL_INST_PORT | MAL_HOST | MAL端口 | MPP_SEQNO |
EP0 | 192.168.61.198 | 5236 | 192.168.61.198 | 5269 | 0 |
EP1 | 192.168.61.199 | 5237 | 192.168.61.199 | 5270 | 1 |
1.2 配置dm.ini
利用dminit对两个数据库进行初始化。
1) EP0
./dminit path=/dm8/data instance_name=EP0 port_num=5236
MAL_INI = 1
MPP_INI = 1
2)EP1
./dminit path=/dm8/data instance_name=EP0 port_num=5237
MAL_INI = 1
MPP_INI = 1
1.3 配置dmmal.ini
配置远程配置文件,两个节点配置相同。
[MAL_INST1]
MAL_INST_NAME = EP0
MAL_HOST = 192.168.61.198
MAL_PORT = 5269
MAL_INST_HOST = 192.168.61.198
MAL_INST_PORT = 5236
[MAL_INST2]
MAL_INST_NAME = EP1
MAL_HOST = 192.168.61.199
MAL_PORT = 5270
MAL_INST_HOST = 192.168.61.199
MAL_INST_PORT = 5237
1.4 配置dmmpp.ctl
dmmpp.ctl是一个二进制文件,用户不能直接配置,需要先配置dmmpp.ini。两个节点配置相同。
#dmmpp.ini的配置如下
[SERVICE_NAME1]
MPP_SEQ_NO = 0
MPP_INST_NAME = EP01
[SERVICE_NAME2]
MPP_SEQ_NO = 1
MPP_INST_NAME = EP02
#利用dmctlcvt将dmmpp.ini装换为dmmpp.ctl。Type=2为文本文件装换为控制文件,type=1为控制文件装换为文本文件。
./dmctlcvt type=2 SRC=/dm8/data/DAMENG/dmmpp.ini DEST=/dm8/data/DAMENG/dmmpp.ctl
1.5 验证是否搭建成功
查看两节点状态是否为ok:
SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
节点1创建表t1:
节点2查询表数据:
至此说明,已经搭建成功。
2 MPP动态扩容
2.1 禁止系统DDL操作
全局登录MPP系统任一节点,执行下面的语句禁止系统的DDL操作。
SP_DDL_FORBIDEN(1);
2.2 克隆数据库
关闭MPP节点,进行脱机备份数据。
1)脱机备份
RMAN>backup database '/dm8/data/DAMENG/dm.ini' ddl_clone backupset 'clone';
2)脱机还原
将备份数据拷贝到EP2节点。
RMAN>RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET ‘/dm8/data/DAMENG/bak/clone’;
RMAN>RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/DAMENG/bak/clone';
RMAN>RECOVER DATABASE ‘/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
3)配置dmmal.ini
#配置第三节点dmmal.ini
[MAL_INST1]
MAL_INST_NAME = EP0
MAL_HOST = 192.168.61.198
MAL_PORT = 5269
MAL_INST_HOST = 192.168.61.198
MAL_INST_PORT = 5236
[MAL_INST2]
MAL_INST_NAME = EP1
MAL_HOST = 192.168.61.199
MAL_PORT = 5270
MAL_INST_HOST = 192.168.61.199
MAL_INST_PORT = 5237
[MAL_INST3]
MAL_INST_NAME = EP2
MAL_HOST = 192.168.61.200
MAL_PORT = 5271
MAL_INST_HOST = 192.168.61.200
MAL_INST_PORT = 5236
2.3 以mount打开EP2节点
登录之后执行如下命令:
#紧张DDL操作
SP_DDL_FORBIDEN(1);
ALTER DATABASE OPEN FORCE;
2.4 动态增加MAL
分别本地登录MPP系统中原有的每个节点,执行下列语句为每个原有节点的MAL配置增加新增节点信息。
--设置本地MAL配置状态
SF_MAL_CONFIG(1,0);
--增加MAL配置
SF_MAL_INST_ADD('MAL_INST3','EP2','192.168.61.200',5271, '192.168.61.200',5236);
--应用MAL配置
SF_MAL_CONFIG_APPLY();
--重置本地MAL配置状态
SF_MAL_CONFIG(0,0);
2.5 增加MPP节点,设置表标记
全局登录MPP系统原有节点中的任一个,执行下列语句。
--广播方式设置MAL配置状态
SF_MAL_CONFIG(1,1);
--保存老的HASHMAP
SF_MPP_SAVE_HASHMAP();
--增加MPP实例EP2
SF_MPP_INST_ADD('service_name3', 'EP2');
增加节点配置后,之前的连接失效,需要断开连接,重新全局登录,然后执行下列语句。
--设置分布表的重分发状态
SF_MPP_REDIS_STATE_SET_ALL();
--广播方式重置MAL配置状态
SF_MAL_CONFIG(0,1);
--增加节点之后,可以放开DDL限制
SP_DDL_FORBIDEN(0);
3 数据重分发
3.1 哈希分布表数据重分发
创建的T1都是哈希分布表,其中T1为普通表,下面以这个表为例进行哈希分布表的数据重分发。
1)新增节点
2)置本 session 可对表进行重分发(插入和删除),执行如下语句:
SET_SESSION_MPP_REDIS(1);
3)设置重分发状态,执行如下语句:
SF_MPP_REDIS_STATE_SET('SYSDBA','T1',2);
4)进行查询插入,执行如下语句:
INSERT INTO T1 SELECT * FROM T1 WHERE EP_SEQNO('T1')= 2; --2为本节点SEQNO COMMIT;
5)设置待删除数据状态,执行如下语句:
SF_MPP_REDIS_STATE_SET('SYSDBA','T1',3);
6)本地登录每个MPP系统的原有节点,删除分发出去的数据。
SET_SESSION_MPP_REDIS(1);
DELETE FROM T1 WHERE EP_SEQNO('T1')=2;
7)所有新增节点执行完上述步骤后,重置表的分发状态为普通状态。
SF_MPP_REDIS_STATE_SET('SYSDBA','T1',0);
对原有MPP的哈希分布表、复制分布表和随机分布表都已进行了数据重分发,但是还需要更新扩容后的MPP系统的控制文件中的数据分布控制结构。
SF_MAL_CONFIG(1,1);
SF_MPP_SAVE_HASHMAP();
SF_MAL_CONFIG(0,1);
自此,MPP的两节点搭建、动态扩容完成。
想要了解更多关于MPP集群信息,可以到达梦官网查看相应的手册: