达梦大规模并行处理 MPP(DM Massively Parallel Processing,缩写 DM MPP)是基于达梦数据库管理系统研发的完全对等无共享式集群组件,支持将多个 DM 数据库实例组织为一个并行计算网络,对外提供统一的数据库服务。
本实验通过搭建无主备的MPP集群,来熟悉MPP原理和搭建过程。
完成MPP集群的搭建,要求如下:
(1)完成MPP集群(不带主备)的部署,并测试建表和插入数据是否会根据分布列进行自动分发。
(2)测试通过服务名连接MPP,连接可自动负载到不同节点。
每个节点需要配置两块网卡,一块对外提供服务,另外一块作为内部通信
实例名 | MAL_INST_HOST | MAL_INST_PORT | MAL_HOST | MAL_PORT | MPP_SEQNO |
---|---|---|---|---|---|
EP01 | 192.168.75.151 | 5230 | 1.1.1.21 | 5231 | 0 |
EP02 | 192.168.75.152 | 5230 | 1.1.1.22 | 5231 | 1 |
EP01配置:
INSTANCE_NAME = EP01 PORT_NUM = 5230 MAL_INI = 1 MPP_INI = 1
EP02配置:
INSTANCE_NAME = EP02 PORT_NUM = 5230 MAL_INI = 1 MPP_INI = 1
两个MPP节点的dmmal.ini文件保持一致:
[MAL_INST1] MAL_INST_NAME = EP01 MAL_HOST = 1.1.1.21 MAL_PORT = 5231 MAL_INST_HOST = 192.168.75.151 MAL_INST_PORT = 5230 [MAL_INST2] MAL_INST_NAME = EP02 MAL_HOST = 1.1.1.22 MAL_PORT = 5231 MAL_INST_HOST = 192.168.75.152 MAL_INST_PORT = 5230
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
将dmmpp.ini文件转换为dmmpp.ctl文件,命令中的“TYPE=2”参数表示将文本文件转换成控制文件,也可以使用“TYPE=1”参数进行逆向转换:
./dmctlcvt TYPE=2 SRC=/dm8/data/EP01/dmmpp.ini DEST=/dm8/data/EP01/dmmpp.ctl
将生成后的dmmpp.ctl文件拷贝到另一个MPP节点,确保所有的MPP节点的dmmpp.ctl文件一致
直接启动两个MPP节点的dmserver进程,即完成服务启动。
CREATE TABLE T_HASH(C1 INT, C2 CHAR(10))DISTRIBUTED BY HASH (C1);
创建脚本如下:
[dmdba@mpp1 ~]$ cat test.sql
begin
for i in 1..1000 loop
insert into T_HASH values(i,'aaa');
end loop;
end;
/
执行脚本:
全局数据查看,其中#"{mpp_type=global}"可不加,默认为全局查看:
/dm8/bin/disql SYSDBA/SYSDBA@192.168.75.151:5230#"{mpp_type=global}"
sql语句如下:
SQL>select count(*) from t_hash;
SQL>select * from t_hash limit 10;
MPP1上查看数据:
/dm8/bin/disql SYSDBA/SYSDBA@192.168.75.151:5230#"{mpp_type=local}"
sql语句如下:
SQL>select count(*) from t_hash;
SQL>select * from t_hash limit 10;
MPP2上数据查看
/dm8/bin/disql SYSDBA/SYSDBA@192.168.75.152:5230#"{mpp_type=local}"
SQL语句:
SQL>select count(*) from t_hash;
SQL>select * from t_hash limit 10;
可以观察到,数据根据C1列的hash值,把数据分布在了两个MPP数据库上。
数据插入:
INSERT INTO T_HASH VALUES(11,'DADADAMENG');
INSERT INTO T_HASH VALUES(1,'HAPPY');
INSERT INTO T_HASH VALUES(12,'苏卡不列');
INSERT INTO T_HASH VALUES(2,'5555555');
commit;
以local的方式登录MPP1查询:
select * from t_hash;
以local的方式登录MPP2查询:
select * from t_hash;
查询:
select * from t_hash;
select *,rowid from t_hash;
select sf_get_ep_seqno('AAABAAAAAAAAAAAAAB'),
sf_get_ep_seqno('AAABAAAAAAAAAAAAAC'),
sf_get_ep_seqno('AAAAAAAAAAAAAAAAAB'),
sf_get_ep_seqno('AAAAAAAAAAAAAAAAAC');
(1)MPP集群可以实现无共享的集群模式,实现计算和存储资源的横向扩展。
(2)MPP集群可以通过列自动分发,提升存储效率和查询效率。
文章
阅读量
获赞