DMMPP安装

DM8 DMMPP安装

 

  1. 架构

 

实例名

MAL_INST_HOST

MAL_INST_PORT

MAL_HOST

MAL 端口

MPP_SEQNO

EP01

192.168.64.9

5236

192.168.1.9

5269

0

EP02

192.168.64.10

5236

192.168.1.10

5269

1

  1. 参数配置
    1. 前期准备

groupadd -g 12349 dinstall

useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba

./DMInstall.bin -i

dminit path=/opt/dmdbms/data

/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -p DAMENG

    1. 配置参数
      1. 配置dm.ini

修改 EP01 和 EP02 的 dm.ini 的以下几个参数如下:

INSTANCE_NAME = EP01/EP02

PORT_NUM = 5236

MAL_INI = 1

MPP_INI = 1

      1. 配置 dmmal.ini

[MAL_INST1]

MAL_INST_NAME = EP01

MAL_HOST = 192.168.1.9

MAL_PORT = 5269

MAL_INST_HOST = 192.168.64.9

MAL_INST_PORT = 5236

[MAL_INST2]

MAL_INST_NAME = EP02

MAL_HOST = 192.168.1.10

MAL_PORT = 5269

MAL_INST_HOST = 192.168.64.10

MAL_INST_PORT = 5236

      1. 配置 dmmpp.ini

[SERVICE_NAME1]

MPP_SEQ_NO = 0

MPP_INST_NAME = EP01

[SERVICE_NAME2]

MPP_SEQ_NO = 1

MPP_INST_NAME = EP02

生成dmmpp.ctl,复制一份到ep02

dmctlcvt t2c dmmpp.ini dmmpp.ctl

  1. 启动

分别启动 EP01 和 EP02 的 DM 数据库实例(顺序不分先后),DM MPP 系统即能正常运行,用户就可以登录任一 EP 进行数据库操作了。查看v$instance可以看到两个实例。

 

  1. 测试
    1. 数据分布

创建 LIST 分布表 T_LIST,分布列为 C1。

CREATE TABLE T_LIST(C1 INT, C2 CHAR(10))

DISTRIBUTED BY LIST (C1) (VALUES(3) ON EP01,VALUES(4) ON EP02);

插入数据

SQL> insert into t_list values(3,'ep01'),(4,'ep02');

affect rows 2

used time: 7.427(ms). Execute id is 42939.

SQL> select * from t_list;

LINEID     C1          C2

---------- ----------- ----------

1          4           ep02

2          3           ep01

used time: 8.626(ms). Execute id is 42941.

设置只查看本节点数据

SQL> SP_SET_SESSION_MPP_SELECT_LOCAL(1);

DMSQL executed successfully

used time: 5.410(ms). Execute id is 42942.

SQL> select sf_get_session_mpp_select_local();

LINEID     SF_GET_SESSION_MPP_SELECT_LOCAL()

---------- ---------------------------------

1          1

used time: 2.610(ms). Execute id is 42946.

SQL> select * from t_list;

LINEID     C1          C2

---------- ----------- ----------

1          3           ep01

used time: 1.727(ms). Execute id is 42944.

    1. 故障模拟

EP01启用防火墙模拟网络故障,导致两个节点不能通讯

EP01日志如下

 

EP02日志如下

 

此时不能进行全局登录

dmdba@demo2:/opt/dmdbms/log$ disql SYSDBA/SYSDBA@192.168.64.5:5236

[-6024]:Remote node global login failed.

只能进行本地登录

disql SYSDBA/SYSDBA@localhost:5236#{MPP_TYPE=local}

Server[localhost:5236]:mode is normal, state is open

login used time : 4.978(ms)

disql V8

插入数据时如果有别的节点的数据,会报错

SQL> insert into t_list values(3,'ep01'),(4,'ep02');

insert into t_list values(3,'ep01'),(4,'ep02');

[-9515]:Data is not belong to this site on mpp local login.

used time: 3.480(ms). Execute id is 0.

只有本地数据时,可以插入

SQL> insert into t_list values(3,'ep01');

affect rows 1

used time: 9.042(ms). Execute id is 1002.

SQL> commit;

  1. 相关过程和函数

1. 获取会话连接的 EP 的节点序号

SELECT SF_GET_SELF_EP_SEQNO();

2. 根据 ROWID 获取本行数据来自哪个 EP

SELECT SF_GET_EP_SEQNO(ROWID);

3. 获取 EP 节点配置信息

SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();

4. 获取当前会话连接的实例名

SELECT NAME FROM V$INSTANCE WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();

5. 获取 MPP 系统内所有 EP 的所有会话

SELECT * FROM V$SESSIONS;

6. 获取当前连接的实例上的所有会话

SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();

7. 获取实例 EP01 上的所有会话

SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = (SELECT DISTINCT EP_SEQNO FROM V$MPP_CFG_ITEM WHERE INST_NAME ='EP01');

8. 获取表 TEST 在每个实例上的数据行数

CALL SP_GET_EP_COUNT('SYSDBA','TEST');

9. 获取所接实例上的表 TEST 的使用空间

SELECT TABLE_USED_PAGES('SYSDBA','TEST');

10. 获取每个实例上的表 TEST 使用空间

SELECT TABLE_USED_PAGES('SYSDBA','TEST'), NAME FROM V$INSTANCE;

11. 获取所有实例上表 TEST 的总使用空间

SELECT SUM(TOTAL_SIZE) FROM

 (SELECT TABLE_USED_PAGES('SYSDBA','TEST') TOTAL_SIZE, NAME FROM V$INSTANCE);

  1. 动态扩容
    1. 环境准备

--哈希分布表 T1

DROP TABLE T1;

CREATE TABLE T1(C1 INT,C2 INT,C3 INT,C4 VARCHAR(10)) DISTRIBUTED BY HASH(C1);

DECLARE

i INT;

BEGIN

FOR i IN 1..1000 LOOP

INSERT INTO T1 VALUES (i,i+1,i+2,'adasf');

END LOOP;

END;

/

COMMIT;

--哈希分布表 T2

DROP TABLE T2;

CREATE HUGE TABLE T2(C1 INT,C2 INT,C3 INT,C4 VARCHAR(10)) DISTRIBUTED BY HASH(C1);

DECLARE

i INT;

BEGIN

FOR i IN 1..10 LOOP

INSERT INTO T2 VALUES (i,i+1,i+2,'adasf');

END LOOP;

END;

/

COMMIT;

--复制分布表 T3

DROP TABLE T3;

CREATE TABLE T3(C1 INT,C2 INT,C3 INT,C4 VARCHAR(10)) DISTRIBUTED FULLY;

DECLARE

i INT;

BEGIN

FOR i IN 1..1000 LOOP

INSERT INTO T3 VALUES (i,i+1,i+2,'adasf');

END LOOP;

END;

/

COMMIT;

--随机分布表 T4

DROP TABLE T4;

CREATE TABLE T4(C1 INT,C2 INT,C3 INT,C4 VARCHAR(10)) DISTRIBUTED RANDOMLY;

DECLARE

i INT;

BEGIN

FOR i IN 1..1000 LOOP

INSERT INTO T4 VALUES (i,i+1,i+2,'adasf');

END LOOP;

END;

/

COMMIT;

查看数据分布

SQL> sp_set_session_mpp_select_local(1);

DMSQL executed successfully

used time: 2.729(ms). Execute id is 97405.

SQL> select count(*) from t1;

LINEID     COUNT(*)

---------- --------------------

1          500

used time: 1.279(ms). Execute id is 97407.

SQL> select count(*) from t2;

LINEID     COUNT(*)

---------- --------------------

1          5

used time: 1.320(ms). Execute id is 97409.

SQL> select count(*) from t3;

LINEID     COUNT(*)

---------- --------------------

1          1000

used time: 1.775(ms). Execute id is 97411.

SQL> select count(*) from t4;

LINEID     COUNT(*)

---------- --------------------

1          504

used time: 1.547(ms). Execute id is 97413.

    1. 动态增加节点  --未测试

1. 禁止系统 DDL 操作

全局登录 MPP 系统任一节点,执行下面的语句禁止系统的 DDL 操作。

SP_DDL_FORBIDEN(1);

此时在任一节点执行DDL操作会提示只读事务

SQL> create table temp(c1 int);

create table temp(c1 int);

[-6506]:Readonly transaction.

2. 克隆数据库

数据库克隆的目的是把系统中的对象定义信息进行备份,用于恢复到新加的节点上,生成的备份集位于指定的目录备份集中。

l 若 MPP 系统处于运行状态,采用联机 DDL 克隆方式(需要配置本地归档)。

全局登录 MPP 系统任一节点,执行下面的语句。

BACKUP DATABASE DDL_CLONE BACKUPSET 'CLONE';

生成的备份集保存在当前登陆节点 bak 路径中的 clone 目录中。

l 若 MPP 系统处于退出状态,选择 MPP 系统任一节点使用 DMRMAN 工具进行脱机备份。

RMAN>backup database 'c:\dmdbms\data\dameng\dm.ini' ddl_clone backupset 'clone';

生成的备份集保存在当前备份节点 bak 路径中的 clone 目录中。

3. 脱机还原

在新增节点上执行脱机还原,手动拷贝克隆的备份集目录 clone 到新增节点EP03 的bak 目录中,使用 DMRMAN 工具进行脱机还原并更新数据库。(如果新节点没有创建过实例,还需要把dm.ini和dm.ctl复制过来并做相应修改)

RMAN>RESTORE DATABASE 'c:\dmdbms\data\dameng\dm.ini' FROM BACKUPSET 'c:\dmdbms\data\dameng\bak\clone';

RMAN>RECOVER DATABASE 'c:\dmdbms\data\DAMENG\dm.ini' FROM BACKUPSET '

c:\dmdbms\data\dameng\bak\clone';

RMAN>RECOVER DATABASE ' c:\dmdbms\data\DAMENG\dm.ini' UPDATE DB_MAGIC;

若要增加多个节点,则依次执行拷贝、脱机还原和更新数据库步骤。

4. 配置新增节点的 dmmal.ini

为新增的节点配置 dmmal.ini,其中包含扩容前 MPP 系统的节点,以及新增节点 EP03的信息。

[MAL_INST1]

MAL_INST_NAME = EP01

MAL_HOST = 192.168.1.3

MAL_PORT = 5269

MAL_INST_HOST = 192.168.64.3

MAL_INST_PORT = 5236

[MAL_INST2]

MAL_INST_NAME = EP02

MAL_HOST = 192.168.1.5

MAL_PORT = 5269

MAL_INST_HOST = 192.168.64.5

MAL_INST_PORT = 5236

[MAL_INST3]

MAL_INST_NAME = EP03

MAL_HOST = 192.168.1.6

MAL_PORT = 5269

MAL_INST_HOST = 192.168.64.6

MAL_INST_PORT = 5236

修改新增节点的 dm.ini 文件中的如下配置项:

INSTANCE_NAME = EP03

PORT_NUM = 5236

MAL_INI = 1

MPP_INI = 0

5. MOUNT 方式启动新增节点

以 MOUNT 方式启动新增节点 EP03,登录后执行如下命令。

SP_DDL_FORBIDEN(1);

ALTER DATABASE OPEN FORCE;

以 MOUNT 方式启动的目的是防止启动后有用户执行 DDL 操作,因此先禁止 DDL 后再OPEN。

6. 动态增加 MAL

分别本地登录 MPP 系统中原有的每个节点,执行下列语句为每个原有节点的 MAL 配置增加新增节点信息。

--设置本地 MAL 配置状态

SF_MAL_CONFIG(1,0);

--增加 MAL 配置

SF_MAL_INST_ADD('MAL_INST3','EP03','192.168.1.6',5269,'192.168.64.6',5236);

--应用 MAL 配置

SF_MAL_CONFIG_APPLY();

--重置本地 MAL 配置状态

SF_MAL_CONFIG(0,0);

7. 增加 MPP 节点,设置表的标记

全局登录 MPP 系统原有节点中的任一个,执行下列语句。

--广播方式设置 MAL 配置状态

SF_MAL_CONFIG(1,1);

--保存老的 HASHMAP

SF_MPP_SAVE_HASHMAP();

--增加 MPP 实例 EP03

SF_MPP_INST_ADD('service_name3', 'EP03');

增加节点配置后,之前的连接失效,需要断开连接,重新全局登录,然后执行下列语句。

--设置分布表的重分发状态

SF_MPP_REDIS_STATE_SET_ALL();

--广播方式重置 MAL 配置状态

SF_MAL_CONFIG(0,1);

--增加节点之后,可以放开 DDL 限制

SP_DDL_FORBIDEN(0);

至此,节点 EP03 已经顺利地加入 MPP 系统中。

欢迎访问达梦社区:http://eco.dameng.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值