修改系统时间,保持一致
date -s 16:58:30
hwclock -w
1.MPP集群规划
本集群打算使用2台服务器
实例名 MAL_INST_HOST MAL_INST_PORT MAL_HOST MAL 端口 MPP_SEQNO
HNSI01 10.120.130.92 5236 192.168.130.92 5269 0
HNSI02 10.120.130.93 5237 192.168.130.93 5270 1
2.首先创建数据库用户:dmdba(两台服务器都执行)
groupadd dinstall
useradd -g dinstall dmdba -m
passwd dmdba
3.将软件包上传到dmdba用户下,解压进行安装(两台服务器都执行,安装时各选项保持默认即可)
--DM8
mount /tmp/dm8_setup_rh6_64_ent_8.1.1.88_20200629.iso /mnt/ -o loop
chmod 777 DMInstall.bin
字符安装:./DMInstall.bin -i
安装完成后,/home/dbdba目录下生成dmdbms文件夹
4.配置环境变量并生效(两台服务器都执行)
su - dmdba
cd ~
vim .bash_profile
PATH=$PATH:$HOME/bin:/home/dmdba/dmdbms/bin
source .bash_profile
5.创建达梦数据目录,这里使用:/home/dmdba/dmdata/(两台服务器都执行)
6.分别在两台服务器上创建六个实例
这里我们使用dminit命令手工创建,这个命令将创建一个名为 HNSI01的数据库实例,所在的文件路径在/home/dmdba/dmdata/HNSI01下,mal_flag和mpp_flag都设置为1表示将启用多节点间的网络通讯,port_num=5236,表示该节点(数据库实例)的对外服务端口为5236。
主机1:
[dmdba@ha2 ~]$ ./dminit path=/home/dmdba/dmdata/ db_name=HNSI01 instance_name=HNSI01 port_num=5236 mal_flag=1 mpp_flag=1
主机2:
[dmdba@linux1 ~]$ ./dminit path=/home/dmdba/dmdata/ db_name=HNSI02 instance_name=HNSI02 port_num=5237 mal_flag=1 mpp_flag=1
注:修改主机2端口为5237
7.配置集群邮件通信(两台服务器都执行)
前面我们已经创建好了2个集群实例,在启动它们前,还需要做一项配置工作。首先我们需要让这两个节点能互相通信,达梦数据库内部有一个通讯子系统,模仿真实世界的邮件网络,称为MAL。
分别在两台服务器编辑文件(内容相同):dmmal.ini,然后放入对应的三个实例目录下,例如:/home/dmdba/dmdbms/HNSI01
[dmdba@ha2 ~]$ cat dmmal.ini
[mal_inst1]
mal_inst_name = HNSI01
mal_host = 192.168.130.92
mal_port = 5269
mal_inst_host = 10.120.130.92
mal_inst_port = 5236
[mal_inst2]
mal_inst_name = HNSI02
mal_host = 192.168.130.93
mal_port = 5270
mal_inst_host = 10.120.130.93
mal_inst_port = 5237
将dmmal.ini分别复制到刚才新建的EP实例目录下:
[dmdba@ha2 ~]$ cp dmmal.ini dmdbms/HNSI01
[dmdba@linux1 ~]$ cp dmmal.ini dmdbms/HNSI02
8.配置集群之间协同工作
邮件模块是一个底层子系统,配置完成使得节点间可以通讯,至于是用于主/备还是读写分离等还需要上层决定,因此还需要配置多机协同工作模式。
首先配置dmmpp.ini,然后用工具生成ctl,另一个节点复制生成的ctl即可,最后把生成的dmmpp.ctl文件也放到那6个EP0X文件夹下面
[dmdba@ha2 ~]$ cat dmmpp.ini
[service_name1]
mpp_seq_no = 0
mpp_inst_name = HNSI01
[service_name2]
mpp_seq_no = 1
mpp_inst_name = HNSI02
su - dmdba
cd ~
vim .bash_profile
#PATH=$PATH:$HOME/bin:/home/dmdba/dmdbms/bin
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
source .bash_profile
备注:这里也有2项,分别表示有2个节点,其序号分别为0-1,其实例名分别为HNSI01-HNSI02, 注意这里的序号必须从0开始依次编号,实例名必须和dmmal.ini中对应。我们把这个文件命名为dmmpp.ini。
将ini文件转换为dmmpp.ctl文件:
dmctlcvt TYPE=2 SRC=/home/dmdba/dmdata/HNSI01/dmmpp.ini DEST=/home/dmdba/dmdata/HNSI01/dmmpp.ctl
--dmctlcvt t2c dmmpp.ini dmmpp.ctl
将文件分别复制到对应HNSI02目录下:
[dmdba@ha2 ~]$ cp dmmpp.ctl dmdata/HNSI01/
[dmdba@linux1 ~]$ cp dmmpp.ctl dmdata/HNSI02/
9.分别启动2个服务
[dmdba@ha2 ~]$ nohup dmserver /home/dmdba/dmdata/HNSI01/dm.ini &
[dmdba@linux1 ~]$ nohup dmserver /home/dmdba/dmdata/HNSI02/dm.ini &
10.检查集群是否启动
首先,可以通过ps命令查看进程是否正常启动:
[dmdba@ha2 ~]$ ps -ef | grep dmdba
dmdba 13326 11800 1 15:23 pts/0 00:00:03 dmserver /home/dmdba/dmdata/HNSI01/dm.ini
[dmdba@linux1 ~]$ ps -ef | grep dmdba
dmdba 15059 13824 2 15:26 pts/1 00:00:02 dmserver /home/dmdba/dmdata/HNSI02/dm.ini
另外,可以登录系统查看是否可以查询集群相关视图:
[dmdba@linux1 ~]$ disql SYSDBA/[email protected]:5236
disql SYSDBA/[email protected]:5237
SQL> SELECT ts.NAME, df.PATH FROM V$TABLESPACE AS ts, V$DATAFILE AS df WHERE ts.ID =df.GROUP_ID;
我这里正常返回了各个节点的文件目录。
11.本地查询模式
达梦提供了一个集群本地查询模式(登录时添加*LOCAL参数),可以用来查询本机的相关数据,在本地模式下,不能进行DML操作。
[dmdba@linux1 ~]$ disql SYSDBA/SYSDBA*[email protected]:5236
Server[linux1:5236]:mode is normal, state is open
login used time: 41.069(ms)
disql V7.1.5.186-Build(2017.05.23-81019)ENT
Connected to: DM 7.1.5.186
SQL> SELECT ts.NAME, df.PATH FROM V$TABLESPACE AS ts, V$DATAFILE AS df WHERE ts.ID =df.GROUP_ID;
LINEID NAME PATH
---------- ------ ----------------------------------
1 SYSTEM /home/dmdba/dmdata/HNSI01/SYSTEM.DBF
2 MAIN /home/dmdba/dmdata/HNSI01/MAIN.DBF
3 TEMP /home/dmdba/dmdata/HNSI01/TEMP.DBF
4 ROLL /home/dmdba/dmdata/HNSI01/ROLL.DBF
used time: 6.422(ms). Execute id is 796.
测试:
# 创建用户和表空间:
# 以下操作在任意EP节点执行,所有EP节点都可见:
create tablespace CCF datafile '/home/dmdba/dmdata/CCF/CCF01.DBF' size 100;
create user ccf identified by "ccf123456" default tablespace ccf;
grant RESOURCE,VTI to ccf;
conn ccf/ccf123456
# 创建哈希分布表 T_HASH,分布列为 C1。
SQL> create table t_hash(c1 int, c2 char(10)) distributed by hash (c1);
# 创建随机分布表 T_RANDOM。
SQL> create table t_random(c1 int, c2 char(10)) distributed randomly;
# 创建复制分布表 T_FULLY。
SQL> create table t_fully(c1 int, c2 char(10)) distributed fully;
# 创建范围分布表 T_RANGE,分布列为 C1。
SQL> create table t_range(c1 int, c2 char(10)) distributed by range (c1) (values equ or less than (100) on mevi01, values less than (maxvalue) on mevi02);
# 创建 LIST 分布表 T_LIST,分布列为 C1。
SQL> create table t_list(c1 int, c2 char(10)) distributed by list (c1) (values (6) on mevi01, values (8) on mevi02);
# 创建哈希分布表的范围水平分区表。
create table t_hash_range_partition
(c1 int, c2 char(10), c3 char(10))
partition by range (c1)
(
partition part_1 values less than(0) ,
partition part_2 values less than(10) ,
partition part_3 values less than(100) ,
partition part_4 values less than(maxvalue)
)
distributed by hash (c1);
在创建分布表时,用户应注意以下一些使用限制:
1) 单机模式下建的分布表和普通表一样,但是不能创建指定实例名的分布表(如范围分布表和LIST分布表);
2) 在MPP模式下创建分布表,如果未指定列则默认为RANDOMLY(随机)分布表;
3) 分布列类型不支持BLOB、CLOB、IMAGE、TEXT、LONGVARCHAR、BIT、BINARY、VARBINARY、LONGVARBINARY、BFILE、时间间隔类型、虚拟列和用户自定义类型;
4) HASH 分布、RANGE分布、LIST分布允许更新分布列,并支持包含大字段列的表的分布列更新,但包含INSTEAD OF触发器的表、堆表不允许更新分布列;
5) 对于FULLY(复制)分布表,只支持单表查询的更新和删除操作,并且查询项或者条件表达式中都不能包含ROWID伪列表达式;
6) RANGE (范围)分布表和LIST(列表)分布表,分布列与分布列值列表必须一致,并且指定的实例名不能重复;
7) 引用约束的引用列和被引用列都必需包含分布列,且分布情况完全相同;
8) 随机分布表不支持UNIQUE索引。
5. 快速数据装载
DM MPP 特别适合于海量数据的存储和处理,因此在应用中常常面临将大量数据从某个或某些历史数据库中装载到MPP系统的需求。为了满足海量数据的快速装载需求,DM提供了快速装载工具dmfldr,能够对DM单机版和MPP系统进行海量数据的快速装载。
dmfldr 为命令行工具,使用时必须指定必要的执行参数。
dmfldr 支持MPP环境下的两种数据加载模式:客户端分发模式和本地分发模式,通过参数MPP_CLIENT进行设置。使用客户端分发模式时,数据在dmfldr客户端进行分发然后直接向指定EP发送数据;使用本地分发模式时,每个EP对应一个dmfldr和一份数据,每个dmfldr只选择出对应本节点的数据并发送,不管其他节点的数据。默认使用客户端分发模式。
6. 停止 MPP 系统
需要停止DM MPP系统的运行时,只需要停止每个EP的DM实例即可,没有特别的顺序要求。
若在DM MPP系统的运行过程中,某一EP发生故障停机,则整个MPP系统将处于不能正常服务的状态。当前所有的用户会话会被系统断开,不能进行全局登录,只能进行本地登录。因此,为了保证MPP系统的高可用性,建议采用DM MPP与数据守护相结合的部署方案。
7. MPP 的使用限制
DM MPP 支持绝大多数单机版DM的功能,但在某些小的功能点使用上存在一些使用限制,具体如下:
1) MPP 环境下,不支持创建SET NULL或SET DEFAULT约束检查规则的引用约束;
2) MPP 环境下不支持创建外部表、间隔分区表;
3) MPP 环境下不支持修改表的ADD [COLUMN] <列名>[
4) MPP 环境下不支持创建位图索引、空间索引、数组索引;
5) MPP 环境下位图连接索引涉及的维度表需FULLY分布;
6) MPP 环境下不支持索引的ONLINE选项;
7) MPP 环境下不支持视图的WITH CHECK OPTION操作;
8) MPP 环境下不支持闪回查询;
9) MPP 环境下不支持物化视图日志;
10) MPP 各EP创建数据库时指定的编码格式应相同,否则可能造成乱码问题;
11) MPP 环境下INI参数MVCC_RETRY_TIMES无效,发生MVCC冲突时直接报错;
12) MPP 环境下不支持DBMS_JOB包;
13) MPP 环境下日志辅助表不支持FULLY分布。
--------------------------------------------------卸载-----------------------------------
1.卸载脚本服务
每个节点root用户
cd /home/dmdba/dmdbms/script/root/
./dm_service_uninstaller.sh -n DmServiceHNSI01
2.删除数据库实例
每个节点
rm -rf dmdata/HNSI01/
3.卸载数据库
每个节点
/home/dmdba/dmdbms/uninstall.sh -i
rm -rf /home/dmdba/*