达梦 DSC 是共享存储型多实例集群,多节点共用一套存储,所有节点均可读写,依靠 MAL 高速网络做缓存同步、DMCSS 做集群仲裁,实现性能扩展和故障高可用。
在麒麟银河系统上搭建DSC,使用一台服务器+ 4块独立裸磁盘,实现DSC的部署。
# 配置limits.conf
cat >> /etc/security/limits.conf << 'EOF'
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft core unlimited
dmdba hard core unlimited
EOF
# 配置20-nproc.conf
cat > /etc/security/limits.d/20-nproc.conf << 'EOF'
* soft nproc 65536
EOF
# 追加内核参数
cat >> /etc/sysctl.conf << 'EOF'
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
vm.overcommit_memory = 0
EOF
# 立即生效
sysctl -p
# 确认dmdba已在disk组
id dmdba
# 如果不在disk组,加入
usermod -aG disk dmdba
# 验证
groups dmdba
配置 UDEV 绑定共享磁盘,是为了解决虚拟机磁盘设备名随开机识别顺序发生漂移的问题,避免 /dev/sdd、/dev/sde 这类设备名称错乱导致数据库找不到裸盘而启动失败;同时可通过 UDEV 规则永久固化裸磁盘的属主与权限为 dmdba:dinstall,无需每次开机手动修改权限,保障 dmdba 用户正常访问裸设备,也是达梦主备、DSC 集群环境下裸磁盘部署的标准配置方式。
# 创建asmdisk目录
mkdir -p /dev/asmdisk
# 创建规则文件(直接用KERNEL匹配)因为VMware虚拟磁盘默认不生成SCSI WWN
cat > /etc/udev/rules.d/99-dm-disk.rules << 'EOF'
# DSC集群共享磁盘绑定(直接使用设备名)
KERNEL=="sdb", SYMLINK+="asmdisk/asmdisk1", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sdc", SYMLINK+="asmdisk/asmdisk2", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sdd", SYMLINK+="asmdisk/asmdisk3", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="sde", SYMLINK+="asmdisk/asmdisk4", OWNER="dmdba", GROUP="dinstall", MODE="0660"
EOF
# 重载规则
udevadm control --reload-rules
# 触发生效
udevadm trigger
# 验证绑定结果
ls -l /dev/asmdisk/
su - dmdba
# 创建DSC相关目录
mkdir -p /home/dmdba/DSC/DSC0 /home/dmdba/DSC/DSC1
dmdcr_cfg.ini 是达梦 DSC 集群核心配置文件,用来定义集群全局架构信息,描述集群节点、磁盘、投票磁盘、ASM 磁盘组等资源配置,供 DMCSS、DMASM 服务读取,完成集群环境初始化,指定节点序号、节点类型、投票盘与 ASM 磁盘标识,控制集群节点数量、投票机制与磁盘资源分配,是搭建 DSC 集群必须预先编写的配置文件,仅用于集群初始化阶段,初始化完成后修改不再生效。
cat > /home/dmdba/DSC/dmdcr_cfg.ini << 'EOF'
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/asmdisk/asmdisk2
DCR_OGUID = 210715
[GRP]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP_CSS
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 65
[GRP_CSS]
DCR_EP_NAME = CSS0
DCR_EP_HOST = 192.168.140.140
DCR_EP_PORT = 11286
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.140.140
DCR_EP_PORT = 11287
[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
DCR_EP_SHM_KEY = 42424
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.140.140
DCR_EP_PORT = 11276
DCR_EP_ASM_LOAD_PATH = /dev/asmdisk
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 42425
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.140.140
DCR_EP_PORT = 11277
DCR_EP_ASM_LOAD_PATH = /dev/asmdisk
[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 = DSC0
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5238
DCR_CHECK_PORT = 11256
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5239
DCR_CHECK_PORT = 11257
EOF
dmasvrmal.ini 是达梦 DSC 集群 ASM 实例的 MAL 通信配置文件,专门用于各个 DMASM 服务之间的内部消息通信,配置 ASM 节点间 MAL 端口、IP 地址,实现多节点 ASM 实例的数据交互与消息同步,保障集群磁盘管理服务内部网络互通,是 DSC 环境 ASM 节点之间完成磁盘状态同步、资源协调必不可少的配置文件。
cat > /home/dmdba/DSC/dmasvrmal.ini << 'EOF'
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.140.140
MAL_PORT = 11266
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.140.140
MAL_PORT = 11267
EOF
dmdcr.ini 是每个节点本地的集群控制配置文件,供 DMCSS、DMASM、DMServer 读取。
它指定本节点机器的 MAL 通信地址、端口,指向全局配置dmdcr_cfg.ini文件路径,定义本地 CSS 服务、ASM 服务、数据库实例的各项本地运行参数;每个 DSC 节点都要有自己独立的 dmdcr.ini,记录当前节点编号、MAL 监听信息、日志路径等,集群启动时各个服务依靠该文件找到全局 dmdcr_cfg.ini,完成注册与启动。
区别:dmdcr_cfg.ini是全局集群架构(一套);dmdcr.ini是单节点本地配置(每节点一份)。
节点0
cat > /home/dmdba/DSC/dmdcr_DSC0.ini << 'EOF'
DMDCR_PATH = /dev/asmdisk/asmdisk1
DMDCR_MAL_PATH = /home/dmdba/DSC/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/DSC/dmdcr_DSC0.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver dcr_ini=/home/dmdba/DSC/dmdcr_DSC0.ini
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
EOF
节点1
cat > /home/dmdba/DSC/dmdcr_DSC1.ini << 'EOF'
DMDCR_PATH = /dev/asmdisk/asmdisk1
DMDCR_MAL_PATH = /home/dmdba/DSC/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/DSC/dmdcr_DSC1.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver dcr_ini=/home/dmdba/DSC/dmdcr_DSC1.ini
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
EOF
#在交互界面中依次执行
cd /home/dmdba/dmdbms/bin
# 启动dmasmcmd交互界面
./dmasmcmd
#在交互界面中依次执行
create dcrdisk /dev/asmdisk/asmdisk1 dcr
create votedisk /dev/asmdisk/asmdisk2 vote
init dcrdisk '/dev/asmdisk/asmdisk1' from '/home/dmdba/DSC/dmdcr_cfg.ini' identified by 'Zs010310'
init votedisk '/dev/asmdisk/asmdisk2' from '/home/dmdba/DSC/dmdcr_cfg.ini'
exit
(需要开启4个终端,按顺序启动)
# 每个命令单独在一个新终端执行,执行后前台阻塞保持运行,不要关闭终端
# 终端1:节点0 DMCSS服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcss DCR_INI=/home/dmdba/DSC/dmdcr_DSC0.ini
# 终端2:节点0 DMASM服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmasmsvr DCR_INI=/home/dmdba/DSC/dmdcr_DSC0.ini
# 终端3:节点1 DMCSS服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcss DCR_INI=/home/dmdba/DSC/dmdcr_DSC1.ini
# 终端4:节点1 DMASM服务
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmasmsvr DCR_INI=/home/dmdba/DSC/dmdcr_DSC1.ini
cd /home/dmdba/dmdbms/bin
./dmasmcmd
create asmdisk '/dev/asmdisk/asmdisk4' 'LOG0' 51200
create asmdisk '/dev/asmdisk/asmdisk3' 'DATA0' 20480
exit
./dmasmtool DCR_INI=/home/dmdba/DSC/dmdcr_DSC0.ini
create diskgroup 'DMLOG' asmdisk '/dev/asmdisk/asmdisk4'
create diskgroup 'DMDATA' asmdisk '/dev/asmdisk/asmdisk3'
exit
cat > /home/dmdba/DSC/dminit.ini << 'EOF'
DB_NAME = DSCDB
SYSDBA_PWD = Zs010310
SYSAUDITOR_PWD = Zs010310
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/asmdisk/asmdisk1
DCR_SEQNO = 0
AUTO_OVERWRITE = 2
PAGE_SIZE = 32
EXTENT_SIZE = 16
BLANK_PAD_MODE = 1
CHARSET = 1
[DSC0]
CONFIG_PATH = /home/dmdba/DSC/DSC0
PORT_NUM = 5238
MAL_HOST = 192.168.140.140
MAL_PORT = 8344
LOG_PATH = +DMLOG/DSC0_LOG01.log
LOG_PATH = +DMLOG/DSC0_LOG02.log
[DSC1]
CONFIG_PATH = /home/dmdba/DSC/DSC1
PORT_NUM = 5239
MAL_HOST = 192.168.140.140
MAL_PORT = 8346
LOG_PATH = +DMLOG/DSC1_LOG01.log
LOG_PATH = +DMLOG/DSC1_LOG02.log
EOF
cd /home/dmdba/dmdbms/bin
./dminit control=/home/dmdba/DSC/dminit.ini
# ==========节点0前台启动==========
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmserver /home/dmdba/DSC/DSC0/dm.ini dcr_ini=/home/dmdba/DSC/dmdcr_DSC0.ini
# ==========节点1前台启动==========
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmserver /home/dmdba/DSC/DSC1/dm.ini dcr_ini=/home/dmdba/DSC/dmdcr_DSC1.ini
节点0插入数据
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Zs010310@localhost:5238
CREATE TABLE TEST_DSC (ID INT, NAME VARCHAR(50));
INSERT INTO TEST_DSC VALUES (1, 'DSC_INSERT');
COMMIT;
SELECT * FROM TEST_DSC;
EXIT;
节点1查询验证
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/Zs010310@localhost:5239
SELECT * FROM TEST_DSC;
EXIT;
文章
阅读量
获赞
