注册
共享存储集群DSC的搭建
技术分享/ 文章详情 /

共享存储集群DSC的搭建

zxw 2026/07/31 230 1 0

共享存储集群DSC的搭建

[TOC]

1.DSC的结构

1.1什么是DSC?

​ 下图为DSC的结构:

屏幕截图 2026-07-23 135752

图中不同区域划分了三种网络:

  • 对外服务网络(最上层):业务应用链接数据库的入口,用户通过这个网络向DSC集群发送SQL请求,集群处理完成后返回结果。

  • MAL高速内网(中间层):节点间专用的高速通信通道,两个节点间的 数据库实例 通过它进行缓存融合(交换数据页)、传递全局锁信息,确保各节点数据一致性。

  • 共享存储网络(最下层):两个节点通过这个网络(通常是FC-SAN或iSCSI)同时连接底层的共享存储。这是实现一份数据,多个实例的物理基础。

Note.1

[!NOTE]

MAL主要是什么组件用?端口都分别是什么?

​ MAL主要服务于DM数据库实例之间的通信。

​ 守护进程、监视器、DSC节点通信 也会依赖MAL通道,但不是MAL的主体。

  • 主备集群

    ​ 1.dmserver<---->dmserver:redo日志、各个实例节点间MAL心跳

    实例间的通信端口叫mal_port

    mal_inst_port也是,是数据库实例在MAL网络中的身份证地址对外部客户端提供服务是这个。

    ​ 2.dmserver<---->dmwatcher:实例状态、启停控制命令

    实例监听守护进程mal_inst_dw_port

    ​ 3.dmwatcher<---->dmwatcher:各个守护节点间MAL心跳、实例运行状态和自动切换

    守护进程间的通信接口叫mal_dw_port

    ​ 4.dmmonitor ↔ dmwatcher :获取集群状态

    守护进程来监听mal_dw_port

  • DSC集群

    ​ 1.dmserver <----> dmserver:数据页请求、全局锁信息、集群事务信息

    ​ 2.css <----> css:心跳检测、防止脑裂

    ​ 3.asm<----> asm:同步磁盘组信息

1.2DSC中的组件

1.2.1 dmserver(数据库实例)

​ 是对外提供服务的主要进程,负责处理SQL、管理事务和缓冲池。

1.2.2 dmasmsvr(自动存储管理系统)

​ 这是一个文件系统管理进程。它的作用是管理底层的共享存储(RAW设备或SAN磁盘),将其虚拟化为一个统一的、便于扩展的存储池,供上层的DMSERVER读写数据文件。

1.2.3 dmcss(集群控制服务)

​ 是集群的心跳监视器,它通过MAL内网互相通信,监听所有节点的健康状态,一旦某个节点宕机,dmcss会立即通知另一个节点接管其任务

1.2.4 dmcssm(集群监视器)

​ 管理员的控制台,不参与集群核心工作,DBA可以通过它链接到dmcss,查看整个集群的运行日志、状态和锁信息。

Note.2

[!NOTE]

RAW设备、SAN磁盘和RAID磁盘阵列是什么关系?

RAW(Raw Device):原始设备,指一种不经过文件系统格式化、由应用程序直接读写的块设备。解决应用程序如何绕过操作系统缓存,直接读写硬盘的问题

SAN(Storage Area Network):存储区域网络,指一种通过专用网络连接服务器和存储设备的架构。解决如何把存储设备链接到多台服务器的问题。

RAID(Redundant Array of Independent Disks):磁盘冗余阵列,是一种硬盘管理技术,它把多块物理硬盘组合成一个逻辑单元(虚拟盘)。

关系:在磁盘阵列(存储柜)中,将几十块物理硬盘配置成RAID组,形成一个大的虚拟硬盘池,将这个虚拟硬盘池通过SAN网络挂载给多个数据库服务器,数据库服务器看到这些通过SAN网络挂载来的、已经做了RAID保护的虚拟硬盘,再进一步配置为RAW设备供达梦DSC使用。

2.DSC的搭建

2.1共享存储规划

最终目的:给达梦DSC的ASM磁盘创建固定名字,让DM集群启动时永远找到正确的共享磁盘。

2.1.1确定每块盘的用途

​ 首先lsblk查看裸磁盘信息:有四块裸磁盘(RAW)

[root@zhaoxingwang ~]# lsblk -o NAME,SIZE,TYPE,MOUNTPOINT

NAME    SIZE TYPE MOUNTPOINT
vda      50G disk
├─vda1    1G part /boot
├─vda2    2G part [SWAP]
└─vda3   47G part /
vdb     500M disk
vdc     500M disk
vdd      20G disk
vde      50G disk

​ 由于Linux给磁盘命名是动态分配的,可能明天重启vdb就自动变成vdc了。所以需要一个固定的名字。udev 是 Linux 的设备管理机制,当 Linux 发现一个硬盘时,udev 可以根据硬盘身份证给它取一个固定别名,比如/dev/dm/asm-dmdcr 这就是udev的作用。

​ 确定每块盘的用途:

实际磁盘 ASM 别名 用途
/dev/vdb /dev/dm/asm-dmdcr DCR(500M)
/dev/vdc /dev/dm/asm-dmvote Vote(500M)
/dev/vdd /dev/dm/asm-dmdata 数据盘(20G)
/dev/vde /dev/dm/asm-dmarch 归档盘(50G)
2.1.2写udev规则(两种方法)
2.1.2.1方法一:

查看Linux磁盘的udev属性信息:

udevadm info --query=all --name=/dev/vdc
命令行会有下列输出:

P: /devices/pci0000:00/0000:00:01.7/0000:08:00.0/virtio6/block/vdc
N: vdc
S: disk/by-path/pci-0000:08:00.0
S: disk/by-path/virtio-pci-0000:08:00.0
E: DEVLINKS=/dev/disk/by-path/pci-0000:08:00.0 /dev/disk/by-path/virtio-pci-0000:08:00.0
E: DEVNAME=/dev/vdc
E: DEVPATH=/devices/pci0000:00/0000:00:01.7/0000:08:00.0/virtio6/block/vdc
E: DEVTYPE=disk
E: ID_PATH=pci-0000:08:00.0
E: ID_PATH_TAG=pci-0000_08_00_0
E: MAJOR=253
E: MINOR=32
E: SUBSYSTEM=block
E: TAGS=:systemd:
E: USEC_INITIALIZED=30605


# DEVTYPE是disk
# ID_PATH是pci-0000:07:00.0



udevadm info --query=all --name=/dev/vdd
udevadm info --query=all --name=/dev/vde
vi 88-dm-asmdevices.rules
SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="pci-0000:07:00.0", SYMLINK+="dm/asm-dmdcr", OWNER="dmdba", GROUP="dinstall", MODE="0660"

SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="pci-0000:08:00.0", SYMLINK+="dm/asm-dmvote", OWNER="dmdba", GROUP="dinstall", MODE="0660"

SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="pci-0000:09:00.0", SYMLINK+="dm/asm-dmdata", OWNER="dmdba", GROUP="dinstall", MODE="0660"

SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="pci-0000:0a:00.0", SYMLINK+="dm/asm-dmarch", OWNER="dmdba", GROUP="dinstall", MODE="0660"

配置部署文件。生成配置文件后,把 88-dm-asmdevices.rules 配置文件 cp 到 DSC 的每个节点上

cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules 

​ 上述办法使用的用 ID_PATH ,可以满足当前单机测试环境的需求,但它不如 WWID 稳定。如果以后删除虚拟磁盘再重新添加,PCI 地址(如 07:00.0)可能发生变化,规则就需要重新修改。

2.1.2.2方法二:

​ 下面这个脚本是自动生成达梦 DSC/ASM 使用的 udev 规则文件,把指定的磁盘设备绑定成固定名称,并设置权限。

vim uuid.sh 
# 获取当前脚本所在目录
curr=$(cd "$(dirname "$0")"; pwd)

# 删除旧的 udev 规则文件
rm -f "$curr/88-dm-asmdevices.rules"


# 为 vd[b-e] 设备生成 ASM 磁盘 udev 规则,GROUP和OWNER可能需要改一下
for i in b c d e
do

case $i in
b)
name="asm-dmdcr"
;;

c)
name="asm-dmvote"
;;

d)
name="asm-dmdata"
;;

e)
name="asm-dmarch"
;;

esac


echo "KERNEL==\"vd?\",\
SUBSYSTEM==\"block\",\
PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\",\
RESULT==\"$(/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/vd$i)\",\
SYMLINK+=\"dm/$name\",\
OWNER=\"dmdba\",\
GROUP=\"dinstall\",\
MODE=\"0660\"" \
>> "$curr/88-dm-asmdevices.rules"

done
chmod +x uuid.sh
./uuid.sh

配置部署文件。生成配置文件后,把 88-dm-asmdevices.rules 配置文件 cp 到 DSC 的每个节点上

cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules 

这个是获取wwid是稳定的。

统一授权并检查是否生效

chown dmdba:dinstall /dev/dm/asm-* -R
reboot
blockdev --getsize64 /dev/dm/asm-dmdcr
2.1.3ASM介绍

​ ASM(Automatic Storage Management,自动管理系统 ),就是数据库自己的文件系统。它不是 Linux 的文件系统,而是数据库直接管理磁盘的一种方式

我的目前四块裸磁盘状态:

/dev/vdb   500M
/dev/vdc   500M
/dev/vdd    20G
/dev/vde    50G

目前它们是:

  • ✅ 没有分区
  • ✅ 没有格式化
  • ✅ 没有挂载

这正是 ASM 希望看到的状态,ASM(包括达梦 ASM、Oracle ASM)就是要直接管理磁盘

实际磁盘 ASM 别名 用途
/dev/vdb /dev/dm/asm-dmdcr DCR(500M)
/dev/vdc /dev/dm/asm-dmvote Vote(500M)
/dev/vdd /dev/dm/asm-dmdata 数据盘(20G)
/dev/vde /dev/dm/asm-dmarch 归档盘(50G)

DCR:保存 ASM 的配置信息,记录有哪些磁盘组、磁盘成员等元数据,相当于 ASM 的配置中心

Vote:心跳盘,主要用于集群(DSC)判断节点是否存活,防止脑裂

数据盘:数据库真正的数据都会放这里

归档盘:归档日志的存放地点

虚拟机只有四块裸磁盘,所以/dev/dm/asm-dmlog日志存放地点缺一块该分配磁盘,计划日志和数据都放到数据盘。

Note.3

[!NOTE]

为什么df -h看不到这些实际磁盘,而是需要lsblk命令(list block devices),才能看到这些磁盘?

​ df -h命令是查看已经创建了文件系统(如 ext4、xfs)并且已经挂载(mount)的文件系统的磁盘空间使用情况。经历了下面几个步骤:裸磁盘(/dev/vda)-------->分区(vda3)-------->mkfs.xfs 建立 xfs 文件系统-------->mount /-------->成为根目录 /

fdisk /dev/vda  创建分区
mkfs.xfs /dev/vda3  格式化为xfs,创建文件系统
mount /dev/vda3 /data  挂载
vi /etc/fstab 修改文件设置开机自启

​ lsblk命令是查看系统里有哪些裸磁盘。

[root@zhaoxingwang ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0   50G  0 disk
├─vda1 253:1    0    1G  0 part /boot
├─vda2 253:2    0    2G  0 part [SWAP]
└─vda3 253:3    0   47G  0 part /
vdb    253:16   0  500M  0 disk
vdc    253:32   0  500M  0 disk
vdd    253:48   0   20G  0 disk
vde    253:64   0   50G  0 disk
设备名称 设备号  是否可移动 容量 是否只读 设备类型(0可读写 1只读) 挂载点

2.2DSC搭建

2.2.1创建用户、目录,安装DM8

2.2.2配置dmdcr_cfg.ini

​ Dm Cluster Registry 达梦集群注册表,定义整个DSC集群的拓扑结构:有几个组、每个组有哪些节点、节点叫什么、地址和端口是什么。各个节点的注册表都要相同

vi /dm/dmdbms/dsc_config/dmdcr_cfg.ini

​ 最基本的情况下有三个组:

DCR_N_GRP = 3
        |
        |
        +----------------+----------------+
        |                |				  |
      CSS组            ASM组             DB组
        |                |                |
     GRP_CSS          GRP_ASM          GRP_DSC
        |                |                |
    CSS0 CSS1        ASM0 ASM1   DSC_YQ_01 DSC_YQ_02
DCR_N_GRP                	= 3     				# 集群环境有多少个GROUP,范围:1~16
DCR_VTD_PATH               = /dev/dm/asm-dmvote   	# 规划为 vote 的磁盘
DCR_OGUID      		= 210715   						# 集群唯一编号

[GRP]  #新建一个 GROUP
  DCR_GRP_TYPE             = CSS  					# 组类型(CSS/ASM/DB)
  DCR_GRP_NAME             = GRP_CSS  				# 组名
  DCR_GRP_N_EP             = 2  					# 组内节点个数
  DCR_GRP_DSKCHK_CNT       = 65  					# 磁盘心跳容错时间,单位:秒
[GRP_CSS]
  DCR_EP_NAME              = CSS0   				# CSS 节点名
  DCR_EP_HOST              = 192.168.200.90   		# 心跳地址
  DCR_EP_PORT              = 22201   				# CSS 端口
[GRP_CSS]
  DCR_EP_NAME             = CSS1
  DCR_EP_HOST             = 192.168.200.90
  DCR_EP_PORT             = 22202

[GRP]
  DCR_GRP_TYPE              = ASM
  DCR_GRP_NAME              = GRP_ASM
  DCR_GRP_N_EP              = 2
  DCR_GRP_DSKCHK_CNT        = 61
[GRP_ASM]
  DCR_EP_NAME   = ASM0  						# ASM 节点名,需要和dmasvrmal中的MAL_INST_NAME一致
  DCR_EP_SHM_KEY         = 42424 		 		# 共享内存标识
  DCR_EP_SHM_SIZE        = 1024  				# 共享内存大小
  DCR_EP_HOST               = 192.168.200.90  	# 心跳地址
  DCR_EP_PORT               = 22211  			# ASM 端口
  DCR_EP_ASM_LOAD_PATH   = /dev/dm
[GRP_ASM]
  DCR_EP_NAME              = ASM1
  DCR_EP_SHM_KEY         = 42425
  DCR_EP_SHM_SIZE        = 1024
  DCR_EP_HOST               = 192.168.200.90
  DCR_EP_PORT               = 22212
  DCR_EP_ASM_LOAD_PATH   = /dev/dm
[GRP]
  DCR_GRP_TYPE              = DB
  DCR_GRP_NAME              = GRP_DSC
  DCR_GRP_N_EP              = 2
  DCR_GRP_DSKCHK_CNT        = 57
[GRP_DSC]
  DCR_EP_NAME              = DSC_YQ_01  		# 实例名,和dm.ini中的INSTANCE_NAME一致
  DCR_EP_SEQNO             = 0  				# 组内序号,不能重复
  DCR_EP_PORT              = 2221  				# 实例对外提供服务端口,和dm.ini中的PORT_NUM一致
[GRP_DSC]
  DCR_EP_NAME             	= DSC_YQ_02
  DCR_EP_SEQNO           	= 1
  DCR_EP_PORT               = 2222

2.2.3裸磁盘交给ASM管理

./dmasmcmd
ASM>create dcrdisk '/dev/dm/asm-dmdcr' 'dcr'
ASM>create votedisk '/dev/dm/asm-dmvote' 'vote'

ASM>init dcrdisk '/dev/dm/asm-dmdcr' from '/home/dmdba/dmdbms/dsc_config/init/dmdcr_cfg.ini' identified by '123ABCabc'
ASM>init votedisk '/dev/dm/asm-dmvote' from '/home/dmbda/dmdbms/dsc_config/init/dmdcr_cfg.ini'

ASM>create asmdisk '/dev/dm/asm-dmdata' 'DATA0'
ASM>create asmdisk '/dev/dm/asm-dmlog' 'LOG0'
ASM>create asmdisk '/dev/dm/asm-dmarch' 'ARCH0'

2.2.4 配置 dmasvrmal.ini

目的为:实现ASM节点间的相互通信

vi /dm/dmdbms/dsc_config/dmasvrmal.ini

各个节点的都要相同

[MAL_INST0]
MAL_INST_NAME             = ASM0
MAL_HOST                  = 192.168.200.90  #心跳地址
MAL_PORT                  = 22251  			#MAL 监听端口
[MAL_INST1]
MAL_INST_NAME             = ASM1
MAL_HOST                  = 192.168.200.90
MAL_PORT                  = 22252

将该文件分别拷贝至 db0 和 db1 机器下的 /home/dmbda/dmdbms/dsc_config/DSC_YQ_01和/home/dmbda/dmdbms/dsc_config/DSC_YQ_02 目录下。

2.2.5 配置 dmdcr.ini

vi /home/dmbda/dmdbms/dsc_config/DSC_YQ_01/dmdcr.ini
DMDCR_PATH                   = /dev/dm/asm-dmdcr			# 我的集群注册信息(DCR)存在哪里。
DMDCR_MAL_PATH               = /home/dmbda/dmdbms/dsc_config/DSC_YQ_01/dmasvrmal.ini	
															# ASM通信配置文件在哪里
DMDCR_SEQNO                  = 0							# 给节点编号
DMDCR_AUTO_OPEN_CHECK        = 111					
													# DCR启动时自动检查哪些组件 111代表 CSS ASM DM全部检查
DMDCR_ASM_TRACE_LEVEL        = 2					# ASM相关日志级别。
					
vi /home/dmbda/dmdbms/dsc_config/DSC_YQ_02/dmdcr.ini
DMDCR_PATH                   = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH               = /home/dmbda/dmdbms/dsc_config/DSC_YQ_02/dmasvrmal.ini
DMDCR_SEQNO                  = 1
DMDCR_AUTO_OPEN_CHECK        = 111
DMDCR_ASM_TRACE_LEVEL        = 2

​ 前面dmdcr_cfg.ini是国家户籍系统,登记有哪些人。现在dmdcr.ini是每个人拿自己的身份证,告诉系统我是哪个人,我的户籍在哪里。dmdcr.ini 是每个 DSC 节点自己的 DCR 运行配置文件,它告诉当前节点 DCR 共享盘在哪里、ASM通信配置在哪里、自己在集群中的编号是多少。

2.2.6启动DMCSS和DMASM服务

./dmcss DCR_INI=/home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dmdcr.ini
./dmcss DCR_INI=/home/dmdba/dmdbms/dsc_config/DSC_YQ_02/dmdcr.ini
./dmasmsvr DCR_INI=/home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dmdcr.ini
./dmasmsvr DCR_INI=/home/dmdba/dmdbms/dsc_config/DSC_YQ_02/dmdcr.ini

2.2.7ASM磁盘组

​ 把裸磁盘交给ASM后还不能直接使用,需要把多个ASM Disk组成磁盘组ASM Group。创建磁盘组的作用是把一块或多块 ASM 磁盘组织成一个逻辑存储池,让达梦数据库实例可以通过名字来使用共享存储,而不用直接操作裸磁盘。

./dmasmtool DCR_INI=/home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dmdcr.ini		# 启动DMASM管理工具
##输入下列语句创建 DMASM 磁盘组
##创建日志磁盘组
ASM> create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-dmlog'
##创建数据磁盘组
ASM> create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata'
##创建归档磁盘组
ASM> create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-dmarch'

2.2.8初始化数据库实例

​ 在 ASM 磁盘组上创建真正的 DM 数据库文件,并生成每个 DSC 节点运行需要的配置文件。

vi /dm/dmdbms/dsc_config/dminit.ini
DB_NAME                  = DSC
SYSDBA_PWD            	 = 123ABCabc 
SYSAUDITOR_PWD    		 = 123ABCabc
SYSTEM_PATH              = +DMDATA/data
SYSTEM                   = +DMDATA/data/SYSTEM.dbf
SYSTEM_SIZE              = 1024
ROLL                     = +DMDATA/data/ROLL.dbf
ROLL_SIZE                = 10000
MAIN                     = +DMDATA/data/MAIN.dbf
MAIN_SIZE                = 1024
CTL_PATH                 = +DMDATA/data/dm.ctl
CTL_SIZE                 = 8
LOG_SIZE                 = 2048
DCR_PATH                 = /dev/dm/asm-dmdcr
DCR_SEQNO                = 0
AUTO_OVERWRITE           = 1
PAGE_SIZE                = 32
EXTENT_SIZE              = 16
BLANK_PAD_MODE           = 1

[DSC_YQ_01]
CONFIG_PATH              = /home/dmdba/dmdbms/dsc_config/DSC_YQ_01
PORT_NUM                 = 2221
MAL_HOST                 = 192.168.200.90
MAL_PORT                 = 22251
LOG_PATH                 = +DMARCH/DSC_YQ_01_LOG01.log
LOG_PATH                 = +DMARCH/DSC_YQ_01_LOG02.log
[DSC_YQ_01]
CONFIG_PATH              = /home/dmdba/dsc_config/DSC_YQ_02
PORT_NUM                 = 2222
MAL_HOST                 = 192.168.200.90
MAL_PORT                 = 22252
LOG_PATH                 = +DMARCH/DSC_YQ_02_LOG01.log
LOG_PATH                 = +DMARCH/DSC_YQ_02_LOG02.log

在节点0执行初始化 db 命令

./dminit control=/home/dmdba/dmdbms/dsc_config/init/dminit.ini  

拷贝文件到 db1 节点

scp -r /dm/dmdbms/dsc_config/DSC1 dmdba@10.10.10.2:/dm/dmdbms/dsc_config/

2.2.9配置dmarch.ini

vi /home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dm.ini

ARCH_INI                 = 1


vi /home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dmarch.ini

ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC_YQ_01/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC_YQ_02
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC_YQ_02/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
vi /home/dmdba/dmdbms/dsc_config/DSC_YQ_02/dm.ini

ARCH_INI                 = 1

vi /home/dmdba/dmdbms/dsc_config/DSC_YQ_02/dmarch.ini

ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC_YQ_02/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC_YQ_01
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC_YQ_01/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400

​ +DMARCH是达梦 ASM(DMASM)中的磁盘组名称,在数据库中引用它时,加一个+表示从 ASM 磁盘组 DMARCH 中找文件。

2.2.10注册 CSS、ASM、DMSERVER 后台服务

​ 启动dmserver服务:

/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dm.ini dcr_ini=/home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dmdcr.ini

/home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/dsc_config/DSC_YQ_02/dm.ini dcr_ini=/home/dmdba/dmdbms/dsc_config/DSC_YQ_02/dmdcr.ini

​ 注册服务:

./dm_service_installer.sh -t dmcss -dcr_ini /home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dmdcr.ini -p DSC_CSS_01

./dm_service_installer.sh -t dmasmsvr -dcr_ini /home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dmdcr.ini -y DmCSSServiceDSC_CSS_01.service -p DSC_ASM01

./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dm.ini -dcr_ini /home/dmdba/dmdbms/dsc_config/DSC_YQ_01/dmdcr.ini -y DmASMSvrServiceDSC_ASM01.service  -p DSC_01


./dm_service_installer.sh -t dmcss -dcr_ini /home/dmdba/dmdbms/dsc_config/DSC_YQ_02/dmdcr.ini -p DSC_CSS_02

./dm_service_installer.sh -t dmasmsvr -dcr_ini /home/dmdba/dmdbms/dsc_config/DSC_YQ_02/dmdcr.ini -y DmCSSServiceDSC_CSS_02.service -p DSC_ASM02

./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/dsc_config/DSC_YQ_02/dm.ini -dcr_ini /home/dmdba/dmdbms/dsc_config/DSC_YQ_02/dmdcr.ini -y DmASMSvrServiceDSC_ASM02.service  -p DSC_02

2.2.11配置监视器

​ 创建dmcssm.ini

vi /home/dmdba/dmdbms/bin/dmcssm1.ini

​ A机器、B机器配置相同

CSSM_OGUID                 = 210715							#CSS 集群唯一标识号
CSSM_CSS_IP                = 192.168.200.90:22201			#CSS 管理哪些 CSS 节点
CSSM_CSS_IP                = 192.168.200.90:22202
CSSM_LOG_PATH              = ../log							# 日志位置
CSSM_LOG_FILE_SIZE         = 512							# 日志文件大小
CSSM_LOG_SPACE_LIMIT       = 2048							# 日志总空间限制。
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmcssm -cssm_ini /dm/dmdbms/bin/dmcssm.ini -p Monitor
./home/dmdba/dmdbms/bin/dmcssm INI_PATH=/dm/dmdbms/bin/dmcssm.ini

2.2.12授权setcap

​ setcap 是Linux系统上设置进程能力的命令。它允许给一个程序文件授予特定的、细粒度的系统权限,而不用赋予它完整的root权限。

​ 在DSC集群中,节点间的心跳检测是判断节点存活的核心机制。默认情况是dmserver 进程是普通用户(如dmdba)运行的,没有权限发送底层网络探测包(如ICMP)。当操作系统压力过大、网络短暂拥堵时,可能会出现心跳包发送超时,导致集群误以为节点宕机,触发不必要的节点踢出(脑裂预防机制)。

# root用户执行:

sudo setcap cap_net_raw,cap_net_admin=eip  /home/dmdba/dmdbms/bin/dmserver
sudo setcap cap_net_raw,cap_net_admin=eip  /home/dmdba/dmdbms/bin/dmasmsvr

#验证 setcap,有输出则授权成功:
getcap /dm/dmdbms/bin/dmserver
getcap /dm/dmdbms/bin/dmasmsvr

​ cap_net_raw:允许进程使用原始套接字,可以发送和接收底层网络数据包(如ICMP Ping)。

​ cap_net_admin:允许进程执行网络管理操作,比如操作路由表、绑定到特权端口等。

​ eip:表示将上述权限设置为 e(Effective,生效)、i(Inheritable,可继承)、p(Permitted,允许) 三种状态,确保进程运行时该权限可用。

​ /home/dmdba/dmdbms/bin/dmserver:指目标程序文件。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服