首页 > 数据库 > 国内数据库 > 达梦DMTDD透明分布式数据库部署测试
DM 透明分布式数据库(DM Transparent Distributed Database,简称DMTDD),由计算层、日志层、存储层和目录服务器构成。其中,日志层(DRS、DRAS)、存储层(DSS)和目录服务器(DCS)的各组件共同构成分布式文件系统DFS。本次以“DFS+DMDSC”架构为例进行部署测试。
通过本次实验,加深对主备守护集群(DCS日志服务器集群)和DMDSC(共享存储集群)的认识,了解DFS分布式文件系统架构。
说明:为节省系统资源,快速部署测试环境,使用Centos+docker进行部署。
系统环境:CentOS_7 + Docker
数据库版本:dm8_20210712_x86_rh6_64_ent_8.1.2.38_pack1
openjdk-8u265容器镜像在docker hub官网下载。
config.rar :
自行到达梦官网下载软件安装包,将解压后的
DMInstall.bin文件放到mkdocker目录下
集群架构如图:

网络规划:
172.18.0.10 DSC1 crm0 (实例)
172.18.0.11 DSC2 crm1 (实例)
172.18.0.20 DCS1
172.18.0.21 DCS1
172.18.0.30 DRS1
172.18.0.31 DRS2
172.18.0.32 DRAS
172.18.0.40 DSS1
172.18.0.41 DSS2
/DSC 系统路径规划
|
|
Linux 系统目录 |
映射Docker内路径 |
说明 |
|
1 |
/DSC/data1 |
dsc1 :/dm8/data |
dsc1 数据库文件目录 |
|
2 |
/DSC/data2 |
dsc2 :/dm8/data |
dsc2 数据库文件目录 |
|
3 |
/DSC/config |
共享:/dm8/config |
配置文件准备目录 |
/DCS 系统路径规划
|
|
Linux 系统目录 |
映射Docker内路径 |
说明 |
|
1 |
/DCS/dcs1/data |
dcs1 :/dm8/data |
dcs1 数据库文件目录 |
|
2 |
/DCS/dcs1/archlog |
dcs1 :/dm8/archlog |
归档目录 (好像未用到) |
|
3 |
/DCS/dcs1/data |
dcs2 :/dm8/data |
dcs2 数据库文件目录 |
|
4 |
/DCS/dcs1/archlog |
dcs2 :/dm8/archlog |
归档目录 |
|
5 |
/DCS/backup |
共享:/dm8/backup |
备份目录 |
|
6 |
/DCS/config |
共享:/dm8/config |
配置文件准备目录 |
/DRS 系统路径规划
|
|
Linux 系统目录 |
映射Docker内路径 |
说明 |
|
1 |
/DRS/drs1 |
drs1 :/dm8/data |
drs1 数据库文件目录 |
|
2 |
/DRS/drs1_archlog |
drs1 :/dm8/archlog |
本地归档目录 |
|
3 |
/DRS/drs2 |
drs2 :/dm8/data |
drs2 数据库文件目录 |
|
4 |
/DRS/drs2_archlog |
drs2 :/dm8/archlog |
本地归档目录 |
|
5 |
/DRS/dras |
dras :/dm8/data |
dras 数据库文件目录 |
|
6 |
/DRS/config |
共享:/dm8/config |
配置文件准备目录 |
/DSS 系统路径规划
|
|
Linux 系统目录 |
映射Docker内路径 |
说明 |
|
1 |
/DSS/dss1 |
dss1 :/dm8/data |
dss1 数据库文件目录 |
|
2 |
/DSS/dss2 |
dss1 :/dm8/archlog |
dss2 数据库文件目录 |
1 、启动两个DCS容器
|
# 创建内网网段 docker network ls docker network create --subnet=172.18.0.0/16 mynetwork
# 启动镜像 docker run -it --name dcs1 --hostname DCS1 --net mynetwork --ip 172.18.0.20 -v /DCS/config:/dm8/config -v /DCS/dcs1/data:/dm8/data -v /DCS/dcs1/archlog:/dm8/archlog -v /DCS/backup:/dm8/backup -d dem_dm8:v01 /bin/bash
docker run -it --name dcs2 --hostname DCS2 --net mynetwork --ip 172.18.0.21 -v /DCS/config:/dm8/config -v /DCS/dcs2/data:/dm8/data -v /DCS/dcs2/archlog:/dm8/archlog -v /DCS/backup:/dm8/backup -d dem_dm8:v01 /bin/bash
|
2 、数据库初始化
|
# 进入容器 docker exec -it dcs1/2 bash chown dmdba:dinstall -R /dm8/data /dm8/archlog /dm8/backup /dm8/config
# 分别运行初始化脚本(详见《DM8数据库主备集群测试记录》)(两节点) init_dcs1.sh init_dcs2.sh
# 启动监视器查看主备集群状态 ./dmmonitor /dm8/config/dmmonitor.ini
# 登录DCS1节点初始化dcs(主节点) ./disql SYSDBA/SYSDBA@172.18.0.20:5236 SP_DFS_DCS_INIT(1); -- 初始化DCS环境
#DCS1 节点配置: --1 、手动停止守护进程,修改dmwatcher.ini,添加DCS相关配置项 DCS_STARTUP_CMD = /dm8/bin/dmdcs DCS_INI = server=localhost:5236 path=/dm8/data/dcs1/dcs.ini DCS_PORT = 7778
--2 、配置dcs.ini,在dcs1节点的/dm8/data/dcs1目录配置dcs.ini INSTANCE_NAME = dcs1 DW_PORT_NUM = 7778
#DCS2 节点配置: --1 、手动停止守护进程,修改dmwatcher.ini,添加DCS相关配置项 DCS_STARTUP_CMD = /dm8/bin/dmdcs DCS_INI = server=localhost:5236 path=/dm8/data/dcs2/dcs.ini DCS_PORT = 7778 --2 、配置dcs.ini,在dcs2节点的/dm8/data/dcs2目录配置dcs.ini INSTANCE_NAME = dcs2 DW_PORT_NUM = 7778
# 分别创建主备DCS的dcs.key(两节点) su - dmdba ./dmdcs -init=1 USER=SYSDBA PASSWORD=SYSDBA PATH=dcs.key
# 最后启动守护进程(两节点) /etc/init.d/DmWatcherServiceDCS1 start /etc/init.d/DmWatcherServiceDCS2 start
|
创建存储层节点DSS1和DSS2
|
# 启动DSS1镜像 docker run -it --name dss1 --hostname DSS1 --net mynetwork --ip 172.18.0.40 -v /DSS/dss1:/dm8/data -d dem_dm8:v01 /bin/bash docker exec -it dss1 bash
# 在DSS1上初始化SS1并启动: chown dmdba:dinstall -R /dm8/data su - dmdba cd /dm8/bin ./dmdssinit path=/dm8/data inst=SS1 port=35300 REGION_SIZE=2 DBF_SIZE=10240 RLOG_SIZE=128 ./dmdss path=/dm8/data/SS1/dss.ini &
# 启动DSS2镜像 docker run -it --name dss2 --hostname DSS2 --net mynetwork --ip 172.18.0.41 -v /DSS/dss2:/dm8/data -d dem_dm8:v01 /bin/bash
# 在DSS1上初始化SS1并启动: docker exec -it dss2 bash chown dmdba:dinstall -R /dm8/data su - dmdba cd /dm8/bin ./dmdssinit path=/dm8/data inst=SS2 port=35300 REGION_SIZE=2 DBF_SIZE=10240 RLOG_SIZE=128 ./dmdss path=/dm8/data/SS2/dss.ini &
|
1 、在/DCS/config中提前准备DMDFS1.INI文件,DCS的连接信息保存在DMDFS1.INI中。当dcs1出现故障无法连接时,dcstool会尝试连接dcs2执行命令。
|
#dmdfs1.ini 文件 [dcs1] DFS_HOST = 172.18.0.20 DFS_PORT = 3333 [dcs2] DFS_HOST = 172.18.0.21 DFS_PORT = 3333 |
2 、使用DMDCSTOOL工具链接到DCS(主)上,添加创建容灾域,并将存储节点添加到新建的容灾域中。
|
docker exec -it dcs1 bash su - dmdba cd /dm8/bin ./dmdcstool dfs_ini=/dm8/config/dmdfs1.ini
add micro fault domain fd1 add micro storage server SS1 ('172.18.0.40' : 35300) in fd1 add micro fault domain fd2 add micro storage server SS2 ('172.18.0.41' : 35300) in fd2 alter storage server refresh size alter storage server open
|
“ 一主一备一DRAS”模式下,每个日志组包含一个主DRS、一个备DRS和一个DRAS。其中DRAS是可选模块。当主DRS发生故障时,备DRS可以接替主DRS继续提供服务。当备DRS出现异常时,DRAS接替备DRS继续接收来自主DRS的日志进行备份归档
|
1 、启动DRAS docker run -it --name dras --hostname DRAS --net mynetwork --ip 172.18.0.32 -v /DRS/config:/dm8/config -v /DRS/dras:/dm8/data -d dem_dm8:v01 /bin/bash docker exec -it dras bash chown dmdba:dinstall -R /dm8/data /dm8/config su - dmdba /dm8/bin/dmdras PATH=/dm8/config/dras1.ini & /dm8/bin/dmdras PATH=/dm8/config/dras2.ini &
2 、启动DRS docker run -it --name drs1 --hostname DRS1 --net mynetwork --ip 172.18.0.30 -v /DRS/config:/dm8/config -v /DRS/drs1:/dm8/data -v /DRS/drs1_archlog:/dm8/archlog -d dem_dm8:v01 /bin/bash docker exec -it drs1 bash chown dmdba:dinstall -R /dm8/data /dm8/archlog /dm8/config su - dmdba /dm8/bin/dmdrs path=/dm8/config/drs1_p.ini & /dm8/bin/dmdrs path=/dm8/config/drs2_p.ini &
docker run -it --name drs2 --hostname DRS2 --net mynetwork --ip 172.18.0.31 -v /DRS/config:/dm8/config -v /DRS/drs2:/dm8/data -v /DRS/drs2_archlog:/dm8/archlog -d dem_dm8:v01 /bin/bash docker exec -it drs2 bash chown dmdba:dinstall -R /dm8/data /dm8/archlog /dm8/config su - dmdba /dm8/bin/dmdrs path=/dm8/config/drs1_s.ini & /dm8/bin/dmdrs path=/dm8/config/drs2_s.ini &
|
使用DMDCSTOOL工具连接到DCS(主)上,创建rlog日志组,将刚创建的DRS和DRAS节点添加到日志组当中。
|
docker exec -it dcs1 bash su - dmdba cd /dm8/bin ./dmdcstool dfs_ini=/dm8/config/dmdfs1.ini -- 添加grp的数量与计算节点个数即数据库实例数对应 add group grp1 add rlog server DRS1_P ('172.18.0.30' : 3330) group grp1 primary add rlog server DRS1_S ('172.18.0.31' : 3330) group grp1 standby add rlog archivement server DRAS1 ('172.18.0.32' : 3330) group grp1
add group grp2 add rlog server DRS2_P ('172.18.0.30' : 3331) group grp2 primary add rlog server DRS2_S ('172.18.0.31' : 3331) group grp2 standby add rlog archivement server DRAS2 ('172.18.0.32' : 3331) group grp2
|
1 、启动DSC1和DSC2镜像
|
docker run -it -p 3526:35610 --name dsc1 --hostname DSC1 --net mynetwork --ip 172.18.0.10 -v /DSC/config:/dm8/config -v /DSC/data:/dm8/data -d dem_dm8:v01 /bin/bash
docker run -it -p 3527:35611 --name dsc2 --hostname DSC2 --net mynetwork --ip 172.18.0.11 -v /DSC/config:/dm8/config -v /DSC/data:/dm8/data -d dem_dm8:v01 /bin/bash
|
2 、使用dmasmcmd工具初始化dcr盘和vtd盘(单节点执行)
|
su - dmdba cd /dm8/bin ./dmasmcmd dfs_ini=/dm8/config/dmdfs.ini #DMTDD 中的emptyfile、dcrdisk和votedisk均限制为32M,不支持SIZE取其他值 create emptyfile '/dm8/data/dsc/asmdisks/dcr.asm' size 32 create emptyfile '/dm8/data/dsc/asmdisks/vtd.asm' size 32 create dcrdisk '/dm8/data/dsc/asmdisks/dcr.asm' 'dcr' 32 create votedisk '/dm8/data/dsc/asmdisks/vtd.asm' 'vtd' 32 init dcrdisk '/dm8/data/dsc/asmdisks/dcr.asm' from '/dm8/config/dmdcr_cfg.ini' identified by 'hust4400' init votedisk '/dm8/data/dsc/asmdisks/vtd.asm' from '/dm8/config/dmdcr_cfg.ini' # 将本地文件系统中的库共享文件dcr/vtd存入RS init ddfsdcr '$/asmdisks/dcr.asm' from '/dm8/data/dsc/asmdisks/dcr.asm' init ddfsvtd '$/asmdisks/vtd.asm' from '/dm8/data/dsc/asmdisks/vtd.asm'
|
3 、初始化DS库
|
docker exec -it dsc1 bash chown dmdba:dinstall -R /dm8/config /dm8/data su - dmdba cd /dm8/bin ./dminit control=/dm8/config/dminit.ini
#/dm8/data/dsc 路径下生成crm0和crm1目录,将crm1拷贝至dsc2节点
#1 、修改dmdfs.ini -- 成功初始化DS库后,在/dm/data/dsc/crm0和/dm/data/dsc/crm1路径下会自动生成dmdfs.ini,其中配置的日志服务器的连接信息就是dminit.ini中指定的主DRS的信息。这里需要手动修改/dm/data/dsc/crm0/dmdfs.ini和/dm/data/dsc/crm1/dmdfs.ini,将主DRS的连接信息调整为DS所在日志组的主备DRS的信息。
DFS_COPY_NUM = 3 DFS_HB_INTERVAL = 60 DFS_SWITCH_TIMES = 5 DFS_SWITCH_INTERVAL = 2000 [drs1_p] DFS_HOST = 172.18.0.30 DFS_PORT = 3330 [drs1_s] DFS_HOST = 172.18.0.31 DFS_PORT = 3330
DFS_COPY_NUM = 3 DFS_HB_INTERVAL = 60 DFS_SWITCH_TIMES = 5 DFS_SWITCH_INTERVAL = 2000 [drs2_p] DFS_HOST = 172.18.0.30 DFS_PORT = 3331 [drs2_s] DFS_HOST = 172.18.0.31 DFS_PORT = 3331
#2 、配置dmdcr.ini -- 在/dm8/data/dsc/下分crm0和crm1目录创建dmdcr.ini文件。
dmdcr0.ini : DMDCR_PATH = $/asmdisks/dcr.asm DMDCR_SEQNO = 0 #DB 重启参数,命令行方式启动 DMDCR_DB_RESTART_INTERVAL = 30 DMDCR_DB_STARTUP_CMD = /dm8/bin/dmserver path=/dm8/data/dsc/crm0/dm.ini dcr_ini=/dm8/data/dsc/crm0/dmdcr0.ini
dmdcr1.ini : DMDCR_PATH = $/asmdisks/dcr.asm DMDCR_SEQNO = 1 DMDCR_DB_RESTART_INTERVAL = 30 DMDCR_DB_STARTUP_CMD = /dm8/bin/dmserver path=/dm8/data/dsc/crm1/dm.ini dcr_ini=/dm8/data/dsc/crm1/dmdcr1.ini
|
4 、向DMTDD添加数据库服务器
|
# 启动dmdcstool,连接DCS: docker exec -it dcs1 bash su - dmdba cd /dm8/bin ./dmdcstool dfs_ini=/dm8/config/dmdfs1.ini
add data server crm0 group grp1 database db_dsc arch_dir '/dm8/data/dsc/arch_dsc0'
add data server crm1 group grp2 database db_dsc arch_dir '/dm8/data/dsc/arch_dsc1'
|
5 、启动DSC1和DSC2的css服务
|
# 启动CSS0 docker exec -it dsc1 bash su - dmdba cd /dm8/bin ./dmcss dcr_ini=/dm8/data/dsc/crm0/dmdcr0.ini dfs_ini=/dm8/data/dsc/crm0/dmdfs.ini &
# 启动CSS1 docker exec -it dsc2 bash su - dmdba cd /dm8/bin ./dmcss dcr_ini=/dm8/data/dsc/crm1/dmdcr1.ini dfs_ini=/dm8/data/dsc/crm1/dmdfs.ini &
|
1 、故障记录
启动DSC时发现DSC1和DSC2节点的dmserver进程异常退出,分别查看DSC和DRS节点日志。
|
# 登录dsc1节点查看日志 cat dm_CSS0_202204.log
# 在查看DRS节点日志 cat dm_DRS2_P_202204.log
确认是磁盘空间不足导致。添加虚拟机磁盘扩容LVM后消除故障。
|
2 、创建测试用户
|
#
创建表空间报错
create tablespace CRM_DATA datafile 'crm_data_01.dbf' size 64 autoextend on next 16;
查看官网资料,DMTDD存储文件的表空间。添加表空间的SQL语法进行了调整: CREATE TABLESPACE ts_name DATAFILE path SIZE size [COPY copy_num] [MICRO|GREAT] CREATE TABLESPACE CRM_DATA DATAFILE '$/crm/crm_data_01.dbf' size 1024 autoextend on next 32 copy 1 micro; CREATE TABLESPACE CRM_INDEX DATAFILE '$/crm/crm_index_01.dbf' size 128 autoextend on next 16 copy 1 micro; create user crm identified by "*" default TABLESPACE "CRM_DATA" default INDEX TABLESPACE "CRM_INDEX"; grant PUBLIC to crm; grant RESOURCE to crm;
|
3 、查看存储层目录和文件
|
# 使用dmdcstool工具链接DCS,查看DSS存储的目录及数据文件 docker exec -it dcs1 bash su - dmdba cd /dm8/bin ./dmdcstool dfs_ini=/dm8/config/dmdfs1.ini
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70015510/viewspace-2887170/ ,如需转载,请注明出处,否则将追究法律责任。