[TOC]
下图为DSC的结构:

图中不同区域划分了三种网络:
对外服务网络(最上层):业务应用链接数据库的入口,用户通过这个网络向DSC集群发送SQL请求,集群处理完成后返回结果。
MAL高速内网(中间层):节点间专用的高速通信通道,两个节点间的 数据库实例 通过它进行缓存融合(交换数据页)、传递全局锁信息,确保各节点数据一致性。
共享存储网络(最下层):两个节点通过这个网络(通常是FC-SAN或iSCSI)同时连接底层的共享存储。这是实现一份数据,多个实例的物理基础。
[!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:同步磁盘组信息
是对外提供服务的主要进程,负责处理SQL、管理事务和缓冲池。
这是一个文件系统管理进程。它的作用是管理底层的共享存储(RAW设备或SAN磁盘),将其虚拟化为一个统一的、便于扩展的存储池,供上层的DMSERVER读写数据文件。
是集群的心跳监视器,它通过MAL内网互相通信,监听所有节点的健康状态,一旦某个节点宕机,dmcss会立即通知另一个节点接管其任务
管理员的控制台,不参与集群核心工作,DBA可以通过它链接到dmcss,查看整个集群的运行日志、状态和锁信息。
[!NOTE]
RAW设备、SAN磁盘和RAID磁盘阵列是什么关系?
RAW(Raw Device):原始设备,指一种不经过文件系统格式化、由应用程序直接读写的块设备。解决应用程序如何绕过操作系统缓存,直接读写硬盘的问题
SAN(Storage Area Network):存储区域网络,指一种通过专用网络连接服务器和存储设备的架构。解决如何把存储设备链接到多台服务器的问题。
RAID(Redundant Array of Independent Disks):磁盘冗余阵列,是一种硬盘管理技术,它把多块物理硬盘组合成一个逻辑单元(虚拟盘)。
关系:在磁盘阵列(存储柜)中,将几十块物理硬盘配置成RAID组,形成一个大的虚拟硬盘池,将这个虚拟硬盘池通过SAN网络挂载给多个数据库服务器,数据库服务器看到这些通过SAN网络挂载来的、已经做了RAID保护的虚拟硬盘,再进一步配置为RAW设备供达梦DSC使用。
最终目的:给达梦DSC的ASM磁盘创建固定名字,让DM集群启动时永远找到正确的共享磁盘。
首先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) |
查看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)可能发生变化,规则就需要重新修改。
下面这个脚本是自动生成达梦 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
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]
为什么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只读) 挂载点
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
./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'
目的为:实现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 目录下。
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通信配置在哪里、自己在集群中的编号是多少。
./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
把裸磁盘交给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'
在 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/
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 中找文件。
启动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
创建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
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:指目标程序文件。
文章
阅读量
获赞
