DMDSC搭建手册

第一章 简介

DM DSC为DM共享存储集群,支持故障自动切换和故障自动重加入。特点为:高可用、高吞吐量、负载均衡

DMDSC集群得以实现的重要基础就是共享存储。DM支持的共享存储有两种:裸设备和DMASM。推荐使用后者 。

DMCSS是一款集群控制软件,专门负责监控集群中各个节点的运行状态。

  1. 裸设备:一种没有经过格式化,不被Unix/Linux通过文件系统来读取的特殊字符设备,允许直接访问磁盘而不经过操作系统的高速缓存和缓冲器。因为使用裸设备避免了经过操作系统这一层,数据直接从磁盘到数据库服务器进行传输,所以使用裸设备对于读写频繁的数据库应用来说,可以有效提高数据库系统的性能。但是裸设备的使用有很多限制。裸设备不需要挂载
  2. DMASM: 是一个专用的分布式文件系统。支持多个节点同时访问、修改数据文件,并减少直接使用裸设备存在的诸多限制。
  3. DMCSS: DM集群同步服务的简称,负责集群环境中节点的启动、故障处理、节点重加入等操作。每个集群节点都需要有一个DMCSS服务。这些DMCSS服务又共同构成一个DMCSS集群。单节点应用时,可以不配置CSS。
  4. MAL系统是达梦数据库基于TCP协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。

根据目前的硬件发展状况来看,网络的传输速度比磁盘的读、写速度更快,因此,DMDSC集群引入了缓存交换(Buffer Swap)    技术,节点间的数据页尽可能通过网络传递,避免通过磁盘的写入、再读出方式在节点间传递数据,从而减少数据库的IO等待时间,提升系统的响应速度。

DMDSC搭建手册_第1张图片

与同样使用共享存储的双机热备系统相比,DMDSC具有更快的故障处理速度。双机热备系统故障切换时,需要完整重做Redo日志,所有数据需要重新从磁盘加载;而DMDSC故障处理时,只需要重做故障节点的Redo日志,并且大部分数据页已经包含在处理节点的Buffer缓冲区中,不需要重新从磁盘加载。

DMDSC集群中包含多个数据库实例,与单节点数据库管理系统相比,DMDSC集群可以充分利用多台物理机器的处理能力,支撑更多的用户连接请求,提供更高的吞吐量。DMDSC集群不存在始终保持备用状态的节点,不会造成硬件资源的浪费。

重做日志管理:

Redo日志包含了所有物理数据页的修改内容,Insert/delete/updateDML操作、Create TableDDL操作,最终都会转化为对物理数据页的修改,这些修改都会反映到Redo日志中。一般说来一条SQL语句,在系统内部会转化为多个相互独立的物理事务来完成,物理事务提交时产生Redo日志,并最终写入联机Redo日志文件中。

一个物理事务包含一个或者多个Redo记录(Redo Record,简称RREC),每条Redo记录都对应一个修改物理数据页的动作。根据记录内容的不同,DMDSC集群中,各个节点拥有独立的日志文件,Redo日志的LSN(日志序号)值也是顺序递增的,Redo日志只会写入当前数据库实例的联机日志文件,与集群系统中的其他数据库实例没有关系。

第二章 准备工作

2.1环境要求

2.1.1 硬件环境

  1. 主机两台。用于部署数据库实例dmserver、DMCSS、DMASMSVR。内存大小要求:至少2GB。
  2. 共享存储。两台机器可以同时访问到的,可以划分为裸设备的磁盘。不少于20G
  3. 网卡。每台主机至少准备2块网卡。提供内部网络和外部网络服务。

2.1.2 软件环境

  1. 操作系统。Linux、Unix、Windows等。
  2. 达梦数据库软件。

2.2创建共享磁盘

#在虚拟机1中,新建硬盘

DMDSC搭建手册_第2张图片

***必须选择立即分配所有磁盘空间,虚拟磁盘存储为单个文件

DMDSC搭建手册_第3张图片

#在虚拟机2中,添加已经新建的磁盘

#修改两台虚拟机的XXX.vmx文件,添加 :

disk.locking="false"

scsi0:1.SharedBus="Virtual"
scsi1:1.SharedBus="Virtual"

#重启虚拟机,fdisk –l 查看是否添加上

DMDSC搭建手册_第4张图片

2.3共享磁盘上裸设备划分

#在其中一台虚拟机上进行:

  1. 输入 fdisk /dev/sdb
  2. 依次输入 n → p → 1 →回车→ +100M →回车,完成第一块磁盘划分
  3. 依次输入 n → p → 2 →回车→ +100M →回车,完成第二块磁盘划分
  4. 依次输入 n → p → 3 →回车→ +2048M →回车,完成第三块磁盘划分
  5. 依次输入 n → p → 4 →回车→回车→回车,完成第四块磁盘划分
  6. 按w保存退出

前两个分区大小为100M,第三个分区不少于2G(该分区过小可能会出现启动dmserver闪退、创建ASM磁盘组时连接失败等报错)

#查看磁盘划分 fdisk –l /dev/sdb

DMDSC搭建手册_第5张图片

#在所有虚拟机中,编辑/etc/udev/rules.d/XXXXXX.rules文件,添加以下语句:

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"

ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"

ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N"

ACTION=="add", KERNEL=="sdb4", RUN+="/bin/raw /dev/raw/raw4 %N"

ACTION=="add", KERNEL=="raw[1-4]", OWNER="dmdba", GROUP="dmdba", MODE="777"

#完成裸设备绑定:

Linux7:   udevadm trigger --action=add

Linux6:   start_udev 

#通知分区更改, 使kernel重新读取分区信息,从而避免重启系统

partprobe /dev/sdb    

或者使用下列语句:

systemctl restart systemd-udevd.service

systemctl restart systemd-udev-trigger.service

#查看裸设备大小

blockdev --getsize64 /dev/raw/raw1

#验证磁盘信息,能看到raw1-4
ll /dev/raw/raw*

第三章 DSC搭建

3.1配置文件

搭建目录为 /data/dsc

#切换dmdba用户

#配置dmdcr_cfg.ini1节点配置即可)

DCR_N_GRP = 3                  #集群环境包括多少个group,取值范围1~16

DCR_VTD_PATH = /dev/raw/raw2    # Voting Disk路径 第二个磁盘分区

DCR_OGUID = 63635              #消息标识,dmcssm登录dmcss消息校验用

[GRP]    #集群组信息

DCR_GRP_TYPE = CSS           #组类型(CSS\ASM\DB

DCR_GRP_NAME = GRP_CSS

DCR_GRP_N_EP = 2               #组内节点个数N,最大16

DCR_GRP_DSKCHK_CNT = 60       #磁盘心跳机制,容错时间,单位秒,缺省60S,取值范围5~600

[GRP_CSS]   #节点信息

DCR_EP_NAME = CSS0      #节点名,16 字节,配置文件内不可重复,同一类型节点的 EP_NAME 不能重复

DCR_EP_HOST = 192.168.17.129   #节点IP CSS中设置表示DMCSSM通过该IP连接CSS

DCR_EP_PORT = 9341  #节点TCP监听端口

[GRP_CSS]

DCR_EP_NAME = CSS1

DCR_EP_HOST = 192.168.17.130

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       # ASM的节点名必须和 dmmal.ini 里的 MAL_INST_NAME 一致

DCR_EP_SHM_KEY = 93360   #共享内存标识,数值类型(ASM有效,初始化共享内存的标识符),应为大于04字节整数

DCR_EP_SHM_SIZE = 10     #共享内存大小,单位M(ASM有效,初始化共享内存大小),取值范围10~1024

DCR_EP_HOST = 192.168.17.129  #节点IPASM中设置表示DB通过该IP连接ASM

DCR_EP_PORT = 9349

DCR_EP_ASM_LOAD_PATH = /dev/raw  # ASM磁盘扫描路径,Linux下一般为/dev/raw,文件模拟情况,必须是全路径,不能是相对路径

[GRP_ASM]

DCR_EP_NAME = ASM1

DCR_EP_SHM_KEY = 93361

DCR_EP_SHM_SIZE = 10

DCR_EP_HOST = 192.168.17.130

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  # DB的节点名必须和 dm.ini 里的 INSTANCE_NAME 保持一致

DCR_EP_SEQNO = 0 #组内序号,CSS/ASM不能配置,自动分配DB可以配置,0 ~ n_ep -1,组内不能重复,如不配置则自动分配

DCR_EP_PORT = 5236   #节点TCP监听端口, DBDCR_EP_PORTdm.ini中的PORT_NUM不一致时,DB端口以   #DCR_EP_PORT为准。若要使用VIP功能,则不同服务器上配置的DCR_EP_PORT要相同

DCR_CHECK_PORT = 9741

[GRP_DSC]

DCR_EP_NAME = DSC1

DCR_EP_SEQNO = 1

DCR_EP_PORT = 5236

DCR_CHECK_PORT = 9742

3.2初始化

使用 DMASMCMD 工具初始化,包含两种方法    1节点配置即可)

方法一:启动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 '/data/dsc/dmdcr_cfg.ini' identified by '123456'

init votedisk '/dev/raw/raw2' from '/data/dsc/dmdcr_cfg.ini'

方法二:编辑脚本文件 asmcmd.txt

#将脚本上传到/data/dmdbms/dsc目录下

#执行脚本

cd /data/dmdbms/dmdbms/bin

./dmasmcmd script_file=/data/dmdbms/dsc/04_1asmcmd.txt

#编辑dmasvrmal.ini(几个节点需相同)

cd /data/dmdbms/dsc/

编辑以下内容:

[MAL_INST1]

 MAL_INST_NAME = ASM0

 MAL_HOST = 192.168.17.129

 MAL_PORT = 7236

 [MAL_INST2]

 MAL_INST_NAME = ASM1

 MAL_HOST = 192.168.17.130

 MAL_PORT = 7237

#编辑 dmdcr.ini  (几个节点均需要编辑)

DMDCR_PATH = /dev/raw/raw1

DMDCR_MAL_PATH =/data/dsc/dmasvrmal.ini #dmasmsvr 使用的 MAL 配置文件路径

DMDCR_SEQNO = 0 #不同节点序号不同

#ASM 重启参数,命令行方式启动

DMDCR_ASM_RESTART_INTERVAL = 0

DMDCR_ASM_STARTUP_CMD = /opt/dmdbms/bin/dmasmsvr/dmasmsvr dcr_ini=/data/dsc/dmdcr.ini

#DB 重启参数,命令行方式启动

DMDCR_DB_RESTART_INTERVAL = 0

DMDCR_DB_STARTUP_CMD =  /opt/dmdbms/bin/dmserver path=/data/dsc/DSC01/dm.ini dcr_ini=/data/dsc/dmdcr.ini

#实例名注意

#编辑dminit.ini1节点配置即可)

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]

config_path =/data/dsc/DSC01

port_num = 5236

mal_host = 192.168.17.129

mal_port = 9340

log_path = +DMLOG/log/dsc0_log01.log

log_path = +DMLOG/log/dsc0_log02.log

[DSC1]

config_path =/data/dsc/DSC02

port_num = 5237

mal_host = 192.168.17.130

mal_port = 9341

log_path = +DMLOG/log/dsc1_log01.log

log_path = +DMLOG/log/dsc1_log02.log

3.3启动

#各个节点启动

cd /opt/dmdbms/bin

./dmcss DCR_INI=/data/dsc/dmdcr.ini

./dmasmsvr DCR_INI=/data/dsc/dmdcr.ini

#选择一个节点,启动 dmasmtool

./dmasmtool DCR_INI=/data/dsc/dmdcr.ini

create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'

create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'

#选择一个节点进行初始化

./dminit control=/data/dsc/dminit.ini

#将目录拷贝到另外一台服务器上

scp -r DSC02/ [email protected]:/data/dsc/.

#分别启动实例

./dmserver /data/dsc/DSC01/dm.ini dcr_ini=/data/dsc/dmdcr.ini

./dmserver /data/dsc/DSC02/dm.ini dcr_ini=/data/dsc/dmdcr.ini

#注册服务

./dm_service_installer.sh -t dmcss -p RAC0 -dcr_ini /data/dsc/dmdcr.ini

./dm_service_installer.sh -t dmasmsvr -p RAC0 -dcr_ini /data/dsc/dmdcr.ini -y DmCSSServiceRAC0

./dm_service_installer.sh -t dmserver -p RAC0 -dm_ini /data/dsc/DSC01/dm.ini -dcr_ini /data/dsc/dmdcr.ini -y DmASMSvrServiceRAC0

#启动服务(注意两边需要同时启动)

./DmCSSServiceRAC0 start

./DmASMSvrServiceRAC0 start

./DmServiceRAC0 start

你可能感兴趣的:(达梦数据库,数据库)