达梦分布式数据库DPC部署安装和使用

一、环境准备

1、硬件环境

主机一台或多台。用于部署 MP、SP 和 BP。内存大小要求:至少 2GB。测试环境

中可以将上述服务部署到同一主机,生产环境下推荐每个主机只部署一种类型服务器。

2、软件环境

操作系统。Linux、Unix、Windows 等。

达梦数据库软件。安装好 DM 数据库软件之后,将拥有配置和管理 DMDPC 所需的

所有软件:dmserver、dminit、DIsql 等。这些软件位于安装目录的 bin、tool 等子

目录中。

3、配置批量执行

上传script脚本文件到机器的/opt目录下

切换到1ssh目录下

cd /opt/scripts/1ssh

创建host_ip文件,文件内容如下,将iproot密码换成实际环境

 

测试批量执行

./execute.sh host_ip "date"

注意:执行脚本要替换成对应的x86或者arm架构脚本:/opt/scripts/1ssh/bin

 

4、配置操作系统环境

将/opt/scripts/1ssh/conf/0os目录复制到所有机器的/tmp/目录

./distribute.sh host_ip conf/0os /tmp/

执行0os下述的脚本

./execute.sh host_ip "cd /tmp/0os;sh rh7.sh"          

上述脚本完成了所有机器的以下配置:

1. 创建dmdba用户及dinstall用户组,设置dmdba密码为dmdba:hust4400

2. 禁用selinux

3. 设置CPU高性能模式

4. 设置所有硬盘为deadline调度算法

5. 设置dmdba用户的limit

6. 设置sysctl.conf内核参数,比如修改core文件的生成路径,就需要修改脚本conf/sysctl.conf中的kernel.core_pattern参数

5、配置本机YUM源

mount -o loop /opt/CentOS-7-x86_64-Everything-1810.iso /mnt/
rm -rf /etc/yum.repos.d/*.repo
vim /etc/yum.repos.d/x86_76.repo
[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt
gpgcheck=0
enabled=1
#各台机器分别执行
yum clean all #清除缓存
yum makecache #制作缓存

 

6、安装必备软件

批量执行安装

./execute.sh host_ip "yum -y install java numactl numad perf fio ntp iotop gdb ant net-tools vim"

安装nmon,以ARM为例

./distribute.sh host_ip conf/nmon_arm /usr/bin/nmon

(在/opt/scripts/1ssh/conf目录下,把nmon_arm这个文件复制到所有机器的/usr/bin/nmon

./execute.sh host_ip "chmod 777 /usr/bin/nmon"

(赋予777权限)

输入nmon检查是否安装成功,按q退出

 

7、配置时钟同步

用 192.168.104.15 做时钟服务器

cat /etc/ntp.conf

server 127.127.1.0 # local clock

fudge 127.127.1.0 stratum 10

各客户端

cat /etc/ntp.conf

server 192.168.104.15

restrict 192.168.104.15 nomodify notrap noquery

启动服务

systemctl start ntpd

./execute.sh host_ip "echo 'systemctl restart ntpd' >>/etc/rc.d/rc.local"

或者

./distribute.sh host_ip conf/ntp.conf /etc/

./execute.sh host_ip "echo 'systemctl restart ntpd' >>/etc/rc.d/rc.local"

systemctl enable ntpd 经常开机不管用,所以建议用 /etc/rc.local 来做开机启动。

8、禁用防火墙

./execute.sh host_ip "systemctl stop firewalld;systemctl disable firewalld"

9、设置时区

./execute.sh host_ip "cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime"

 

10、磁盘格式化及挂载

以所有磁盘的数据盘为 /dev/sdb 盘为例

#检查所有机器的磁盘是否为sdb

./execute.sh host_ip "fdisk -l|grep sdb"

#格式化磁盘,并创建挂载目录

./execute.sh host_ip "mkfs.xfs -f /dev/sdb;mkdir -p /dmdata;rm -rf /dmdata/*"

#挂载磁盘

./execute.sh host_ip "mount /dev/sdb /dmdata"

#检查磁盘挂载成功

./execute.sh host_ip "df -Th|grep dmdata"

#所有机器设置磁盘开机自动挂载

vi /etc/rc.local

mount /dev/sdb /dmdata

#重启机器,再次检查是否挂载

./execute.sh host_ip "df -Th|grep dmdata"

二、DEM 部署

1、部署dem

假设当前机器,存在完整的DM8安装目录 /home/dmdba/dm8_dpc ,下述脚本将会利用该目录下的 web/dem.war 来部署dem。

安装dm8软件在:/home/dmdba/dm8_dpc

--选择1台机器部署tomcat和dem依赖库,现在假设选机器A
1.将scripts目录拷贝到机器A的/opt目录下
2.在/home/dmdba目录下创建dm8_dpc目录
3.将x86版本的dm8单机安装至/home/dmdba/dm8_dpc下(安装软件)
创建/dmdata/dem
注意要有java环境
4.cd /opt/scripts/init_dem,然后执行:./1initDB.sh
#或者修改1initDB.sh中的相关路径比如
#dem_dir,dem的部署路径,如/dmdata/dem
#install_dm8,此机器上完整安装的DM8目录,会利用该目录下的web下的dem包来部署dem。
报错要注意:1、数据库BUFFER设置过大,脚本设置为20000
            2、数据库是否导入数据dem_ini.sql
            3、Tomcat中catalina.bat文件要修改参数值

2、部署dmagent

登录机器A,修改/opt/scripts/1ssh目录下的 host_ip 文件,将ip换成实际环境,意思是指会在下述机器上部署dmagent。
192.168.124.161:root:Dameng123
192.168.124.162:root:Dameng123
192.168.124.163:root:Dameng123
 
创建dmagent的目录

./execute.sh host_ip "mkdir -p /dmdata/dmagent"

 

修改/dmdata/dmagent/dmagent/agent.ini
center_url     =  http://192.168.124.161:8989/dem   
 
cd /opt/scripts/1ssh,执行

./distribute.sh host_ip /home/dmdba/dm8_dpc/tool/dmagent /dmdata/dmagent/

若工具执行有问题,则手动通过scp的方式将/home/dmdba/dm8_dpc/tool/dmagent拷贝到其他机器的/dmdata/dmagent目录下

3、启动DEM及dmagent

#启动DEM

sh /dmdata/dem/dm8/bin/DmService start

sh /dmdata/dem/dem_tomcat/apache-tomcat-8.5.58/bin/startup.sh

#启动dmagent
 
cd /opt/scripts/1ssh

sh execute.sh host_ip "cd /dmdata/dmagent/dmagent; sh start.sh -d agent.ini"

 

4、设置开机启动

注册agent服务

cd /dmdata/dmagent/dmagent

 

确认dem能够开机启动

chmod +x /etc/rc.local

vim /etc/rc.local

su - dmdba -c "sh /dmdata/dem/dm8/bin/DmService start"

su - dmdba -c "sh /dmdata/dem/dem_tomcat/apache-tomcat-8.5.58/bin/startup.sh" 

su - dmdba -c "sh /dmdata/dmagent/dmagent/service/DmAgentService start"

确认每台服务器上的dmagent能够开机启动

chmod +x /etc/rc.local

vim /etc/rc.local

su - dmdba -c "sh /dmdata/dmagent/dmagent/service/DmAgentService start"

三、DPC简介

1、组件

1.1 SP

计算节点, 可以多个,对外服务/用户交互,生成全局计划和子任务,函数调用/临时表

1.2 BP

存储节点,可以多个,后端,存储用户数据,接收计划并执行,执行子任务

1.3 MP

元数据节点,只有一个,提供元数据信息:字典对象信息、节点注册信息(MP/SP/BP)、处理DDL、广播信息(如字典信息/注册信息等)

2、性能指标

PB级存储

最大BP组数1024

最大RAFT组数1024(含MP/SP/BP)

最大节点数4096(含MP/SP/BP)

最大副本数9

其它指标和达梦普通单机数据库一样

四、DPC部署

1、dem监测到各服务器agment信息

旧DEM界面

 

新DEM界面

 

2、新建集群搭建

旧DEM界面

新DEM界面

3、搭建分布式集群

4、选取部署集群的服务器

5、选择部署集群的位置

端口号可自定义,也可以默认生成    (一般放在/dmdata,后续涉及自带脚本,方便直接使用)

6、添加实例

6.1 手动添加(方法一)

添加SP实例,SP比较消耗资源,不建议分配过多

 

 

6.2 快速添加(方法二)

 

生成快速添加实例的脚本,主要生成BP的脚本,SP、MP请手工添加。

#第1台机器上的实例实名

a=1

b=2

c=3

bp_num=3

#按次序部署在多台机器

for i in {161..163}

do

if [[ $b -gt $bp_num ]];then

b=$(expr $b - $bp_num)

fi

if [[ $c -gt $bp_num ]];then

c=$(expr $c - $bp_num)

fi

#echo "a:"$a

#echo "b:"$b

#echo "c:"$c

echo "[192.168.124.$i]"

#echo "MP MP_A"

echo "BP BP${a}_A RAFT_${a}"

echo "BP BP${b}_B RAFT_${b}"

echo "BP BP${c}_C RAFT_${c}"

let a+=1;

let b+=1;

let c+=1;

done

 

[192.168.124.161]

MP_C

BP BP1_A RAFT_1

BP BP2_B RAFT_2

BP BP3_C RAFT_3

[192.168.124.162]

MP_B

BP BP2_A RAFT_2

BP BP3_B RAFT_3

BP BP1_C RAFT_1

[192.168.124.163]

SP SP1 RAFT_SP1

MP_A

BP BP3_A RAFT_3

BP BP1_B RAFT_1

BP BP2_C RAFT_2

7、生成部署结构

 

实例规划

每台机器三实例

考虑到副本的高可用,同一RAFT组的不同副本要分布到不到的机柜中,提升容灾性。

原则是同台服务器出现三台不同BP副本,例如:192.168.124.161(BP1_A,BP2_B,BP3_C)

端口规划

1.实例端口与其对应的AP_PORT 端口,后2位要一致。

2. 每台机器内的端口不能重复。

3. 同一类型实例,在不同机器上其初始端口号要保持一致。如MP、SP的端口号。

4. 结合BP实例名的后缀,端口号从小到大依次给BPx_A、BPx_B、BPx_C.

5.端口说明:

MP_PORT 是mp 实例的监听端口号,仅MP实例上有。

AP_PORT 分布式环境下协同工作的监听端口号,每个实例有一个该端口。 所有端口的有效值范围为(1024~65534),但此处强烈建议端口用4位数,不要用5位数。 项目中申请端口时,按实际使用量的2倍申请,保留一定的冗余,以备不时之需。

6.独立执行码:每个实例将使用单独一套执行码,与实例数据文件在同一个目录

7.RAFT组:每个实例为一组

默认下一步

 

8、修改实例参数

 

 

RLOG_GEN_FOR_HUGE=1  修改参数后可用HUGE表

HUGE指是列存表(RLOG_GEN_FOR_HUGE=1开启使用huge表)

9、初始化参数应用到其他实例上

默认下一步

10、归档参数设置

 

1.XMAL_HB_INTERVAL:所有节点都修改,节点间通信检测间隔(改为100s)

MP节点故障测试需要调小至10s,不然检测不到,报错

2.RAFT_VOTE_INTERVAL:主库广播心跳消息的间隔时间(默认不动)

3. RAFT_VOTE_INTERVAL:

3.1实例名后缀 A B C,其RAFT_VOTE_INTERVAL 依次为5s,11s,18s,实现A B C 依次优先被 选举为主机。 实际使用:大部分设置7s,13s,21s(测试时可适当小点,故障测试需要及时新主机接管)

3.2默认情况下,实例名后缀A的为主机。假若A故障,B优先做为新的主机,依次类推。

修改BP1_A参数后,依次引用到xxx_A实例上,以此类推

RAFT_VOTE_INTERVAL=7000

 

RAFT_VOTE_INTERVAL=13000,其他一样

 

RAFT_VOTE_INTERVAL=21000,其他一样

  

 

 

11、选择数据库实例安装驱动包

此处是研发部单独提供bin包,新版可使用ISO

  

12、上传文件完成

  

 

 

13、部署前信息预览

 

 

14、完成部署

 

15、将部署好的DPC集群添加到监控

 

16、根据实际需要来确定是否勾选自动拉起功能

17、完成监控部署

18、至此部署DPC完成

五、DPC使用运维

1、新建表空间

每个BP上最少1个表空间,每个表空间只能存储在一个BP上。

考虑后面以表空间为单位进行数据重分布,那基本上决定了每个BP最少得有2个表空间,涉及到后续增加 BP后的数据重分布,那每个BP上的表空间建议偶数为好。

建议单个BP,表空间数量为2(内存小于512GB)或者4(内存大于等于512GB)。

CREATE TABLESPACE TS_1 DATAFILE 'TS_1.DBF' SIZE 128 STORAGE( ON RAFT_1);

混合表空间::一次创建两个同名的表空间,一个常规(非 HUGE)表空间和一个 HUGE 表空间,且既能存储 HUGE 表又能存储非 HUGE 表

CREATE TABLESPACE TS_2 DATAFILE 'TS_2.DBF' SIZE 128 WITH HUGE PATH 'e:\mpraft_data\hts' STORAGE( ON RAFT_2);

2、表空间组

表空间组是一组位于相同 RAFT 或者不同 RAFT 上的表空间集合,用于用户建表或者指定用户默认的存储位置

创建:

SP_TS_GROUP_CREATE('TSG_1', 'tablespace group1');

SP_TS_GROUP_ADD_TS(

ts_group_name varchar(128),

ts_name varchar(256)

)

向表空间组 TSG_1 中添加表空间 TS_1。

SP_TS_GROUP_ADD_TS('TSG_1', 'TS_1');

项目中没有明显的按用户分隔的需求,就是把DPC当成MPP来用,建议做1个表空间组即可,这个 表空间组包含所有的表空间

--创建表空间组

TSG_ALL SP_TS_GROUP_CREATE('TSG_ALL', 'tablespace group include all bp.');

--将所有表空间均增加到TSG_ALL表空间组中

select 'SP_TS_GROUP_ADD_TS(''TSG_ALL'','''||NAME||''');' from "SYS"."DPC_TABLESPACE";

3、用户

CREATE USER USER_1 IDENTIFIED BY 123456789 DEFAULT TABLESPACE GROUP TSG_1;

(指定用户的默认表空间或表空间组)

4、表

指定表空间

create table test2(c1 int, c2 int) PARTITION BY RANGE(c1)(

PARTITION p1 VALUES LESS THAN (10) storage (on TS_1),

PARTITION p2 VALUES LESS THAN (20) storage (on TSG_1),

PARTITION p3 VALUES EQU OR LESS THAN(MAXVALUE)

) storage (on TSG_2);

test2 中的 P1 分区存储在表空间 TS_1 上,P2 分区存储在表空间组 TSG_1 上。P3 未明确指定表空间或表空间组,缺省存储在表空间组 TSG_2 上

基于分区组建分区表

使用分区组创建表时,分区列的个数和数据类型必须和分区组中定义保持完全一致。

作用:1、简化用户创建水平分区表的操作、2、确保相同分区方式两张表的对应分区始终在同一 BP,减少跨机事务和连接时数据交 换开销,提升事务处理的性能。

分区类型有:

HASH分区

LIST分区

RANGE分区

二级分区如: LIST + HASH RANGE + HASH LIST + RANGE RANGE + LIST

LIST+HASH、RANGE+HASH是最常用的。

官方手册:8.6.2.2 分区组定义语句

HASH+RANGE

create partition group PG5

partition by hash(int)

subpartition by range(int)

 ( partition "part_1" (subpartition p11 values less than(1), subpartition p12 values less than(10)) ,

partition "part_2" (subpartition p21 values less than(0) , subpartition p22 values less than(10)) ,

partition "part_3" (subpartition p31 values less than(50) , subpartition p32 values less than(60)) ) storage (on TS_1,TS_2);

基于分区组 PG5 创建二级分区。

create table DPC_T3 (c int, c2 int, c3 int) using partition group PG5 by (c) SUBPARTITION by (c3);

5、数据分布

6、主备切换

切换主库的方式前提条件:

备库在执行切换前,会对自身否具有切换条件进行检查,下面列出了不具备切换的情况:

1. 不是多副本环境,不允许切换。

2. 备库选举角色不为 FOLLOWER,不允许切换。

3. 备库模式不为 STANDBY 或状态不为 OPEN,不允许切换。

4. 不存在有效的主库,不允许切换。

5. 备库自身归档无效,不允许切换。

6. 系统前一次节点变更还未完成(比如正在执行增删节点,尚未完成),不允许切换。

手动切换的前提条件和可能遇到问题的解决办法:

1. 所有操作是直连 MP 或 BP 节点执行切换。其中,对于 BS 主库节点需要 LOCAL 方 式登录执行。

2. 执行手动切换需要严格按照执行流程执行。

3. 若执行 SP_RAFT_SUSPEND_THREAD 时失败,可由用户根据返回值决定是否重试。

4. 若 执 行 SP_RAFT_SWITCHOVER 执 行 失 败 , 可 登 录 任 意 一 个 备 库 , 执 行 SP_RAFT_RESUME_THREAD 唤醒主库挂起的工作线程。若所有备库都故障,可以等到有活 动备库再执行此操作,或者将主库重启。

SP_RAFT_RESUME_THREAD('BP_1'); //唤醒 BP_1 工作线程

select * from dpc_instance;   #查看主备库分布

select * from v$rlog_raft_info  #查询当前节点的选举状态和日志提交信息 raft_shadow 当前节点是否是影子库,0RAFT 库;1:影子库

select * from v$arch_status #查询归档状态信息, 只在主库上查询有效

----查看DPC集群状态

select leader,ip_external,F_SEQ_ARR,F_LSN_ARR from(select * from v$rlog_raft_info a,DPC_INSTANCE b where a.leader=b.name) ORDER BY TO_NUMBER(TRANSLATE(leader,'0123456789'||leader,'0123456789'));

(MP BP)手动切换流程如下:

1.disql 登录主库(对于 BS 主库节点需要通过 LOCAL 方式登录),挂起主库工作线 程。 SP_RAFT_SUSPEND_THREAD();

2.Disql 登录备库,执行 SP_RAFT_SWITCHOVER(),将备库切换为主库 SP_RAFT_SWITCHOVER();

7、表数据存储位置节点信息

新建普通测试表      

 create table part_test1 (c1 int c2 int);

       insert into part_test1 select level level from dual connect by level<=100

commit;

查看表所在raft组情况

select SF_GET_EP_SEONO(ROWID),count t FRoM part_test1 GROUP BY SF_GET_EP_SEONO ROWID

select, raft_id,name,ip_external,INST_PORT,sys_mode from dpc_instance where raft_id=1

select * from dpc_instance

8、其他

7.1 知识点1

新增实例只能多实例到多实例,目前不能单实例到多实例

7.2 知识点2

只读表

ALTER TABLE table_name {READ ONLY | READ WRITE};

:一是将访问各个站点目标表的分布式访问变成对同构临时表的 本地访问,减少通讯代价,提高查询效率;二是减少事务涉及的 BP,减少分布式事务提交 时的交互。

复制表:不支持,有只读表,可以更改后重新分发(机制:改对数据影响,更改后立马分发到其他节点)

mpp  存在,dpc为了兼容ap和bp概念取消

临时表:MP、BP、SP 均支持对临时表 DML 操作(查询,插入,修改、删除、提交、回滚)。

7.3 知识点3

相关参数

DPC_MODE :0:无;1/MP:MP;2/BP:BP;3/SP:SP;4/BS:BS。

BP 节点有两种启动模式:BP 模式和 BS 模式。用户可直接登录 BP 进行操作,此时的 BP 同时具有

前端 SP 节点的功能也具有 BP 的功能,生成分布式计划,并和 MP/其他 BP 甚至辅助 SP 进行数据交互。

7.4 知识点4

RAFT 归档将主库产生的 Redo 日志通

过 XMAL 模块传递到备库,RAFT 归档是多副本系统的实现基础,RAFT 归档只在主库生效,

一个主库可以配置 2~8 个 RAFT 备库,归档目标个数必须是偶数(确保总的实例个数是奇

数)。

7.5 知识点5

业务sql优化:

主要优化方式是通过更改表的结构,增加二级分区HASH 走本地索引加快查询效率

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值