达梦数据库双节点DSC共享存储集群搭建

一、什么是DMDSC?

DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件,这些文件保存在共享存储上。每个节点有自己独立的联机日志和归档日志,其中联机日志保存在共享存储上,归档日志可以保存在本地存储上也可以保存在共享存储上。

二、实现原理

DMDSC是一个共享存储的数据库集群系统。多个数据库实例同时访问、修改同一个数据库,因此必然带来了全局并发问题。DMDSC集群基于单节点数据库管理系统之上,改造了Buffer缓冲区、事务系统、封锁系统和日志系统等,来适应共享存储集群节点间的全局并发访问控制要求。同时,引入缓存交换技术,提升数据在节点间的传递效率。

三、配置说明(测试环境,生产环境根据实际情况来看)

两台配置相同的的机器,2G内存,20G硬盘,20G共享内存,操作系统(中标麒麟,centos7.8,操作一致)

node1:192.168.107.101

node2:   192.168.107.102

 

首先划分好磁盘分区,我的磁盘是sdb:

 

分完区之后需要写入系统:

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"            # dcr 注册信息,表
ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"            # vote 集群信息
ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N"     # log 日志
ACTION=="add", KERNEL=="sdb4", RUN+="/bin/raw /dev/raw/raw4 %N"             # data 数据
ACTION=="add", KERNEL=="raw[1-4]", OWNER="dmdba", GROUP="dinstall", MODE="660"

重启服务,执行命令:systemctl restart systemd-udev-trigger.service

随后即可查看磁盘大小和分区详情

 

 

 

 配置DMDCR_CFG.INI(配置一台即可)文件,其主要作用是:dmdcr_cfg.ini 是格式化DCR 和Voting Disk 的配置文件。配置信息包括三类:集群环境全局信息、集群组信息、以及组内节点信息。

vim dmdcr_cfg.ini(两台都要配置一样)

DCR_N_GRP = 3
DCR_VTD_PATH = /dev/raw/raw2
DCR_OGUID = 63635
[GRP]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP_CSS
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_CSS]
DCR_EP_NAME = CSS0
DCR_EP_HOST = 192.168.107.101
DCR_EP_PORT = 9341
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.107.102
DCR_EP_PORT = 9343
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_ASM]
DCR_EP_NAME = ASM0
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 192.168.107.101
DCR_EP_PORT = 9349
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 192.168.107.102
DCR_EP_PORT = 9351
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = GRP_DSC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_DSC]
DCR_EP_NAME = DSC0
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9741
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9742

配置文件修改了之后,进入数据库安装的bin目录

使用DMASMCMD 工具初始化

create dcrdisk '/dev/raw/raw1' 'dcr'
create votedisk '/dev/raw/raw2' 'vote'
create asmdisk '/dev/raw/raw3' 'LOG0'
create asmdisk '/dev/raw/raw4' 'DATA0'
init dcrdisk '/dev/raw/raw1' from '/dm8/config/dmdcr_cfg.ini' identified by 'abcd'
init votedisk '/dev/raw/raw2' from '/dm8/config/dmdcr_cfg.ini'

 

 

 直到目前为止,共享磁盘就已经创建完成了,然后启动node2,把共享磁盘加上去,两节点的详情如下

 

 

 

 做完初始化以及磁盘共享给node2之后,配置dmasvrmal.ini文件(两节点都需要配置),与dmdcr_cfg.ini文件路径相同。

[dmdba@node1 ~]$ pwd
/home/dmdba
[dmdba@node1 ~]$ vim dmasvrmal.ini

 

然后配置dmdcr.ini(dmdcr.ini 是dmcss、dmasmsvr、dmasmtool 等工具的输入参数。记录了当前节点序列号以及DCR 磁盘路径)

 

node1:

101:dmdcr.ini
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH =/dm8/config/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /dm8/bin/dmasmsvr dcr_ini=/dm8/config/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /dm8/bin/dmserver path=/dm8/config/dsc0_config/dm.ini dcr_ini=/dm8/config/dmdcr.ini

node2:

DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH =/dm8/config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /dm8/bin/dmasmsvr dcr_ini=/dm8/config/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /dm8/bin/dmserver path=/dm8/config/dsc1_config/dm.ini dcr_ini=/dm8/config/dmdcr.ini

 

注意参数的修改(可参考达梦官方的集群手册文档)

配置完了之后,可在安装目录启动DMCSS、DMASM服务程序:

启动命令:

 

 

 注意关闭两边机器的防火墙:

正常状态是这样的,如下图:

 选择一个节点(以node1为例),使用dmasmtool创建磁盘组:

首先启动ASM
./dmasmtool DCR_INI=/dm8/config/dmdcr.ini
创建磁盘组:
create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'

 磁盘组创建完毕之后,准备dminit.ini(任意一台即可)文件。也保存到/dm8/config文件夹下。

[root@node1 config]# pwd
/dm8/config
[root@node1 config]# vim dminit.ini

db_name = dsc
system_path = +DMDATA/data
system = +DMDATA/data/dsc/system.dbf
system_size = 128
roll = +DMDATA/data/dsc/roll.dbf
roll_size = 128
main = +DMDATA/data/dsc/main.dbf
main_size = 128
ctl_path = +DMDATA/data/dsc/dm.ctl
ctl_size = 8
log_size = 256
dcr_path = /dev/raw/raw1 #dcr 磁盘路径,目前不支持asm,只能是裸设备
dcr_seqno = 0
auto_overwrite = 1
[DSC0] #inst_name 跟dmdcr_cfg.ini 中DB 类型group 中DCR_EP_NAME 对应
config_path = /dm8/config/dsc0_config
port_num = 5236
mal_host = 192.168.107.11
mal_port = 9340
log_path = +DMLOG/log/dsc0_log01.log
log_path = +DMLOG/log/dsc0_log02.log
[DSC1] #inst_name 跟dmdcr_cfg.ini 中DB 类型group 中DCR_EP_NAME 对应
config_path = /dm8/config/dsc1_config
port_num = 5237
mal_host = 192.168.107.12
mal_port = 9341
log_path = +DMLOG/log/dsc1_log01.log
log_path = +DMLOG/log/dsc1_log02.log

改文件配置完毕之后,既可以执行初始化(由于我已经执行过初始化命令,该处就不做展示)了。

初始化成功之后屏幕会与如下显示:

[root@node]# ./dminit control=/home/data/dminit.ini
initdb V7.1.5.90-Build(2016.06.08-69758-debug)ENT
db version: 0x70009
file dm.key not found, use default license!
License will expire on 2020-012-23
log file path: +DMLOG/log/dsc0_log01.log
log file path: +DMLOG/log/dsc0_log02.log
log file path: +DMLOG/log/dsc1_log01.log
log file path: +DMLOG/log/dsc1_log02.log
write to dir [+DMDATA/data/dsc].
create dm database success. 2020-12-23 15:23:13

 初始化完毕之后,会产生两个文件,然后将node1节点的dsc1_config 通过scp 发送给node2。

 

 

 

 

 

到了这一步之后,就可以启动数据库服务器了:

node1在安装目录的bin目录下面启动:

./dmserver /dm8/config/dsc0_config/dm.ini dcr_ini=/dm8/config/dmdcr.ini

node2在安装目录的bin目录下面启动:

./dmserver /dm8/config/dsc1_config/dm.ini dcr_ini=/dm8/config/dmdcr.ini

 

 

 

 

正常的集群的屏幕显示

 

 

当然,集群是否成功最关键的一步就是测试。

用disql登陆上去。

[dmdba@node1 bin]$ ./disql
disql V8
用户名:
密码:

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 10.718(毫秒)

SQL> select * from v$dsc_ep_info;

行号 EP_NAME EP_SEQNO EP_GUID EP_TIMESTAMP EP_MODE EP_STATUS
---------- ------- ----------- -------------------- -------------------- ------------ ---------
1 DSC0 0 643863321 643868139 Control Node OK
2 DSC1 1 643838732 643843634 Normal Node OK

已用时间: 0.592(毫秒). 执行号:13.

 

随后也可以创建数据表或者插入数据进行测试:

 

 

上图即可看到,共享集群的测试环境搭建成功。

 

posted on 2020-12-28 18:02  寒江孤影!  阅读(1372)  评论(0编辑  收藏  举报