注册
共享存储集群(DMDSC)单机安装部署流程
专栏/技术分享/ 文章详情 /

共享存储集群(DMDSC)单机安装部署流程

JcRapunzel 2026/07/23 100 0 0
摘要

生产环境信息

一键采集指令:

LOG_FILE="/tmp/dmdsc_env_$(hostname)_$(date +%Y%m%d_%H%M%S).log" { echo "========== DMDSC 环境信息采集 ==========" echo "采集时间: $(date)" echo "主机名: $(hostname)" echo "日志路径: $LOG_FILE" echo "" echo "--- 1. 操作系统版本 ---" cat /etc/os-release uname -a echo "" echo "--- 2. CPU信息 ---" lscpu | grep -E "Model name|Socket|Core|Thread|CPU\(s\)" echo "" echo "--- 3. 内存信息 ---" free -h echo "" echo "--- 4. 磁盘分区(lsblk) ---" lsblk echo "" echo "--- 5. 磁盘UUID(blkid) ---" sudo blkid echo "" echo "--- 6. 磁盘by-id(用于udev绑定) ---" ls -l /dev/disk/by-id/ echo "" echo "--- 7. 网卡IP地址 ---" ip addr echo "" echo "--- 8. 路由信息 ---" ip route echo "" echo "--- 9. 当前主机名 ---" hostname echo "" echo "--- 10. /etc/hosts内容 ---" cat /etc/hosts echo "" echo "--- 11. 资源限制(ulimit) ---" ulimit -a echo "" echo "--- 12. 系统最大打开文件数 ---" cat /proc/sys/fs/file-max echo "" echo "--- 13. 透明大页状态 ---" cat /sys/kernel/mm/transparent_hugepage/enabled cat /sys/kernel/mm/transparent_hugepage/defrag echo "" echo "--- 14. 共享内存内核参数 ---" sysctl kernel.shmall kernel.shmmax kernel.sem echo "" echo "--- 15. fs.aio-max-nr ---" sysctl fs.aio-max-nr echo "" echo "--- 16. 磁盘I/O调度器 ---" cat /sys/block/vd*/queue/scheduler 2>/dev/null || echo "未找到vd*设备" echo "" echo "--- 17. glibc版本 ---" ldd --version | head -1 echo "" echo "--- 18. SELinux状态 ---" getenforce 2>/dev/null || echo "SELinux未安装" echo "" echo "--- 19. 防火墙状态 ---" systemctl status firewalld 2>/dev/null | head -3 || echo "防火墙未安装" echo "" echo "--- 20. 当前用户 ---" whoami echo "" echo "========== 采集完成 ==========" } 2>&1 | tee "$LOG_FILE"
cat /tmp/dmdsc_env_yangke_20260721_133414.log		#展示日志信息
========== DMDSC 环境信息采集 ==========
采集时间: Tue Jul 21 13:34:16 CST 2026
主机名: ******
日志路径: /tmp/dmdsc_env_yangke_20260721_133414.log

--- 1. 操作系统版本 ---
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

Linux yangke 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

--- 2. CPU信息 ---
CPU(s):                6
On-line CPU(s) list:   0-5
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             6
Model name:            Intel(R) Xeon(R) 6966P-C
NUMA node0 CPU(s):     0-5

--- 3. 内存信息 ---
              total        used        free      shared  buff/cache   available
Mem:            13G        2.3G        6.5G         32M        4.7G         10G
Swap:          2.0G          0B        2.0G

--- 4. 磁盘分区(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
loop0    7:0    0 956.9M  0 loop /mnt

--- 5. 磁盘UUID(blkid) ---
/dev/vda3: UUID="618abf2e-0839-4a89-80d4-4c08110b9d95" TYPE="ext4"
/dev/vda1: UUID="c83c2f43-b6f5-4bab-a059-b50c8c7b3d06" TYPE="ext4"
/dev/vda2: UUID="467a068b-e4b1-4384-9bc3-d422e0bf3b6a" TYPE="swap"
/dev/loop0: UUID="2026-04-27-10-22-17-00" LABEL="dameng" TYPE="iso9660"

--- 6. 磁盘by-id(用于udev绑定) ---
ls: cannot access /dev/disk/by-id/: No such file or directory

--- 7. 网卡IP地址 ---
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:32:da:17 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.31/24 brd 192.168.200.255 scope global noprefixroute dynamic eth0
       valid_lft 3568sec preferred_lft 3568sec
    inet6 fe80::5054:ff:fe32:da17/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:ce:c6:80 brd ff:ff:ff:ff:ff:ff
    inet 192.168.201.94/24 brd 192.168.201.255 scope global noprefixroute dynamic eth1
       valid_lft 3161sec preferred_lft 3161sec
    inet6 fe80::3cff:c8dd:5e56:bdb0/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

--- 8. 路由信息 ---
default via 192.168.200.1 dev eth0 proto dhcp metric 100
default via 192.168.201.1 dev eth1 proto dhcp metric 101
192.168.200.0/24 dev eth0 proto kernel scope link src 192.168.200.31 metric 100
192.168.201.0/24 dev eth1 proto kernel scope link src 192.168.201.94 metric 101

--- 9. 当前主机名 ---
******

--- 10. /etc/hosts内容 ---
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

--- 11. 资源限制(ulimit) ---
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 55393
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 65536
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

--- 12. 系统最大打开文件数 ---
1357627

--- 13. 透明大页状态 ---
[always] madvise never
[always] madvise never

--- 14. 共享内存内核参数 ---
kernel.shmall = 18446744073692774399
kernel.shmmax = 18446744073692774399
kernel.sem = 250        32000   32      128

--- 15. fs.aio-max-nr ---
fs.aio-max-nr = 65536

--- 16. 磁盘I/O调度器 ---
[none] mq-deadline kyber
[none] mq-deadline kyber
[none] mq-deadline kyber
[none] mq-deadline kyber
[none] mq-deadline kyber

--- 17. glibc版本 ---
ldd (GNU libc) 2.17

--- 18. SELinux状态 ---
Disabled

--- 19. 防火墙状态 ---
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

--- 20. 当前用户 ---
root

DMDSC

核心适配策略

  1. 网络适配:环境为单机双网卡(eth0: 192.168.200.31, eth1: 192.168.201.94),为简单起见,集群两个节点的所有心跳和业务 IP 均直接绑定到 192.168.201.94,仅通过端口号错开来模拟双节点。
  2. 存储适配:环境未配置多路径,且虚拟磁盘无 scsi_id。我们将直接使用 udev 的 KERNEL 规则将裸盘 vdbvdcvddvde 绑定为 ASM 裸设备,供 DMASM 使用。
  3. 磁盘规划
    • vdb (500M) -> DCR 磁盘
    • vdc (500M) -> VOTE 磁盘
    • vdd (20G) -> REDO 日志盘
    • vde (50G) -> 数据+归档盘
  4. 内存适配:单机内存 13G,ASM 共享内存适当调小至 512M。

详细部署流程

1. 配置裸设备绑定 (root 用户执行)

创建 udev 规则文件,将虚拟磁盘绑定为 ASM 可识别的设备:

cat > /etc/udev/rules.d/88-dm-asmdevices.rules <<EOF KERNEL=="vdb", SYMLINK+="dm/asm-dmdcr", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="vdc", SYMLINK+="dm/asm-dmvote", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="vdd", SYMLINK+="dm/asm-dmlog", OWNER="dmdba", GROUP="dinstall", MODE="0660" KERNEL=="vde", SYMLINK+="dm/asm-dmdata", OWNER="dmdba", GROUP="dinstall", MODE="0660" EOF # 刷新 udev 规则并验证 udevadm control --reload-rules udevadm trigger --type=devices --action=change # 验证绑定是否生效 ll /dev/dm/asm-* # 预期输出应显示 /dev/dm/asm-dmdcr, /dev/dm/asm-dmvote 等软链接指向对应的 vdb, vdc 等盘

image20260721161913162.png

2. 创建配置目录 (dmdba 用户执行)

su - dmdba mkdir -p /home/dmdba/dsc_config/DSC0 mkdir -p /home/dmdba/dsc_config/DSC1 #-p一次性创建

3. 配置集群核心文件 (dmdba 用户执行)

3.1 配置 dmdcr_cfg.ini
两节点共用一份配置文件。

vi /home/dmdba/dsc_config/dmdcr_cfg.ini

写入以下内容(注意端口已错开):

DCR_N_GRP = 3 DCR_VTD_PATH = /dev/dm/asm-dmvote 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.201.94 # 使用 eth1 网卡 DCR_EP_PORT = 11286 [GRP_CSS] DCR_EP_NAME = CSS1 DCR_EP_HOST = 192.168.201.94 # 使用 eth1 网卡 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 = 512 DCR_EP_HOST = 192.168.201.94 # 使用 eth1 网卡 DCR_EP_PORT = 11276 DCR_EP_ASM_LOAD_PATH = /dev/dm [GRP_ASM] DCR_EP_NAME = ASM1 DCR_EP_SHM_KEY = 42425 DCR_EP_SHM_SIZE = 512 DCR_EP_HOST = 192.168.201.94 # 使用 eth1 网卡 DCR_EP_PORT = 11277 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 = DSC0 DCR_EP_SEQNO = 0 DCR_EP_PORT = 5236 # 业务端口,外部用 eth0 IP 连接 [GRP_DSC] DCR_EP_NAME = DSC1 DCR_EP_SEQNO = 1 DCR_EP_PORT = 5237 # 业务端口,外部用 eth0 IP 连接

3.2 配置 dmasvrmal.ini
两节点共用,需拷贝至各自目录:

vi /home/dmdba/dsc_config/dmasvrmal.ini

写入内容:

[MAL_INST0] MAL_INST_NAME = ASM0 MAL_HOST = 192.168.201.94 # 使用 eth1 网卡 MAL_PORT = 11266 [MAL_INST1] MAL_INST_NAME = ASM1 MAL_HOST = 192.168.201.94 # 使用 eth1 网卡 MAL_PORT = 11267

分发到两个节点目录:

cp /home/dmdba/dsc_config/dmasvrmal.ini /home/dmdba/dsc_config/DSC0/ cp /home/dmdba/dsc_config/dmasvrmal.ini /home/dmdba/dsc_config/DSC1/

3.3 配置 dmdcr.ini
节点 0 配置:

vi /home/dmdba/dsc_config/DSC0/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-dmdcr DMDCR_MAL_PATH = /home/dmdba/dsc_config/DSC0/dmasvrmal.ini DMDCR_SEQNO = 0 DMDCR_AUTO_OPEN_CHECK = 111 DMDCR_ASM_TRACE_LEVEL = 2

节点 1 配置:

vi /home/dmdba/dsc_config/DSC1/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-dmdcr DMDCR_MAL_PATH = /home/dmdba/dsc_config/DSC1/dmasvrmal.ini DMDCR_SEQNO = 1 DMDCR_AUTO_OPEN_CHECK = 111 DMDCR_ASM_TRACE_LEVEL = 2

4. 初始化磁盘组 (dmdba 用户执行)

/home/dmdba/dmdbms/bin/dmasmcmd

ASM> 提示符下依次执行:

create dcrdisk '/dev/dm/asm-dmdcr' 'dcr'
create votedisk '/dev/dm/asm-dmvote' 'vote'
init dcrdisk '/dev/dm/asm-dmdcr' from '/home/dmdba/dsc_config/dmdcr_cfg.ini' identified by 'DMdsc_123'
init votedisk '/dev/dm/asm-dmvote' from '/home/dmdba/dsc_config/dmdcr_cfg.ini'
create asmdisk '/dev/dm/asm-dmdata' 'DATA0'
create asmdisk '/dev/dm/asm-dmlog' 'LOG0'
exit

image20260721164458186.png

5. 启动 CSS 与 ASM 服务 (dmdba 用户执行)

为了实验方便,我们使用后台 nohup 方式启动。开启两个终端窗口分别执行,或在单终端后台执行:
启动节点0服务:

nohup /home/dmdba/dmdbms/bin/dmcss DCR_INI=/home/dmdba/dsc_config/DSC0/dmdcr.ini > /home/dmdba/dsc_config/DSC0/dmcss.log 2>&1 & nohup /home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/home/dmdba/dsc_config/DSC0/dmdcr.ini > /home/dmdba/dsc_config/DSC0/dmasmsvr.log 2>&1 &

启动节点1服务:

nohup /home/dmdba/dmdbms/bin/dmcss DCR_INI=/home/dmdba/dsc_config/DSC1/dmdcr.ini > /home/dmdba/dsc_config/DSC1/dmcss.log 2>&1 & nohup /home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/home/dmdba/dsc_config/DSC1/dmdcr.ini > /home/dmdba/dsc_config/DSC1/dmasmsvr.log 2>&1 &

检查进程:ps -ef | grep dm 应该能看到 2 个 dmcss 和 2 个 dmasmsvr 进程。

image20260721165421243.png

6. 创建 DMASM 磁盘组 (dmdba 用户执行)

/home/dmdba/dmdbms/bin/dmasmtool DCR_INI=/home/dmdba/dsc_config/DSC0/dmdcr.ini

ASM> 提示符下执行:

create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata'
create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-dmlog'
exit

7. 初始化数据库实例 (dmdba 用户执行)

创建 dminit.ini

vi /home/dmdba/dsc_config/dminit.ini

写入内容:

DB_NAME = DSC SYSDBA_PWD = SYSDBA001 SYSAUDITOR_PWD = SYDAUDITOR001 SYSTEM_PATH = +DMDATA/data SYSTEM = +DMDATA/data/SYSTEM.dbf SYSTEM_SIZE = 256 ROLL = +DMDATA/data/ROLL.dbf ROLL_SIZE = 256 MAIN = +DMDATA/data/MAIN.dbf MAIN_SIZE = 256 CTL_PATH = +DMDATA/data/dm.ctl CTL_SIZE = 8 LOG_SIZE = 1024 DCR_PATH = /dev/dm/asm-dmdcr DCR_SEQNO = 0 AUTO_OVERWRITE = 1 PAGE_SIZE = 32 EXTENT_SIZE = 16 BLANK_PAD_MODE = 1 [DSC0] CONFIG_PATH = /home/dmdba/dsc_config/DSC0 PORT_NUM = 5236 MAL_HOST = 192.168.201.94 # 使用 eth1 网卡 MAL_PORT = 11246 LOG_PATH = +DMLOG/DSC0_LOG01.log LOG_PATH = +DMLOG/DSC0_LOG02.log [DSC1] CONFIG_PATH = /home/dmdba/dsc_config/DSC1 PORT_NUM = 5237 MAL_HOST = 192.168.201.94 # 使用 eth1 网卡 MAL_PORT = 11247 LOG_PATH = +DMLOG/DSC1_LOG01.log LOG_PATH = +DMLOG/DSC1_LOG02.log

执行初始化命令:

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

image20260721170340801.png

注:因为是单机,dminit 会自动在 /home/dmdba/dsc_config/ 下生成 DSC0 和 DSC1 目录的相关配置文件,无需再 scp 拷贝。

8. 配置归档文件 (dmdba 用户执行)

修改 DSC0DSC1dm.ini 开启归档:

sed -i 's/^ARCH_INI.*/ARCH_INI = 1/g' /home/dmdba/dsc_config/DSC0/dm.ini sed -i 's/^ARCH_INI.*/ARCH_INI = 1/g' /home/dmdba/dsc_config/DSC1/dm.ini

创建 DSC0 的归档配置:

vi /home/dmdba/dsc_config/DSC0/dmarch.ini
ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = +DMDATA/arch/DSC0 ARCH_FILE_SIZE = 512 ARCH_SPACE_LIMIT = 0 [ARCHIVE_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DSC1 ARCH_INCOMING_PATH = +DMDATA/arch/DSC1 ARCH_FILE_SIZE = 512 ARCH_SPACE_LIMIT = 0

创建 DSC1 的归档配置:

vi /home/dmdba/dsc_config/DSC1/dmarch.ini
ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = +DMDATA/arch/DSC1 ARCH_FILE_SIZE = 512 ARCH_SPACE_LIMIT = 0 [ARCHIVE_REMOTE1] ARCH_TYPE = REMOTE ARCH_DEST = DSC0 ARCH_INCOMING_PATH = +DMDATA/arch/DSC0 ARCH_FILE_SIZE = 512 ARCH_SPACE_LIMIT = 0

9. 启动 DMSERVER 服务 (dmdba 用户执行)

nohup /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dsc_config/DSC0/dm.ini dcr_ini=/home/dmdba/dsc_config/DSC0/dmdcr.ini > /home/dmdba/dsc_config/DSC0/dmserver.log 2>&1 & #请完整输入 #这条指令在后台异步启动了 DSC 集群节点 0 的数据库服务进程,指定了该节点的配置文件和集群注册文件,并将所有运行日志输出重定向到指定的日志文件中。 nohup /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dsc_config/DSC1/dm.ini dcr_ini=/home/dmdba/dsc_config/DSC1/dmdcr.ini > /home/dmdba/dsc_config/DSC1/dmserver.log 2>&1 & #请完整输入
我们将指令拆分为五个部分来理解:
1. nohup (No Hang Up)
作用:忽略挂断信号。
解释:它允许程序在您关闭终端窗口或退出登录后,依然继续在后台运行。如果不加这个,一旦您关闭 SecureCRT 或 Xshell 窗口,数据库进程就会随之关闭。
2. /home/dmdba/dmdbms/bin/dmserver
作用:达梦数据库服务端的主程序。
解释:这是数据库实例的可执行文件本身。
3. /home/dmdba/dsc_config/DSC0/dm.ini
作用:指定数据库实例的主配置文件。
解释:
dmserver 启动时必须知道它“是谁”(实例名)、“数据在哪”(控制文件路径)、“内存开多大”等参数。
这里的路径表明,您正在启动的是 DSC0 节点的配置。
4. dcr_ini=/home/dmdba/dsc_config/DSC0/dmdcr.ini
作用:指定集群注册表(DCR)配置文件。
关键点:这是 DSC 集群特有的参数。
解释:
单机数据库启动不需要这个参数。
在 DSC 集群中,数据库进程需要通过 dmdcr.ini 找到 DCR 磁盘(之前提到的 asm-dmdcr)和 VOTE 磁盘。
通过读取这个文件,节点才能找到集群的“大脑”,从而与其他节点通信并加入集群。
5. > /home/dmdba/dsc_config/DSC0/dmserver.log 2>&1
作用:重定向日志输出。
解释:
>:将标准输出(正常日志)写入指定的 log 文件。
2>&1:将标准错误输出(报错信息)也重定向到标准输出的文件中。
合起来的效果就是:把启动过程中所有打印在屏幕上的信息,全部存到 dmserver.log 文件里,方便后续排查故障。
6. & (Ampersand)
作用:放入后台执行。
解释:让命令在后台运行,立刻释放当前终端的控制权,您可以继续输入其他命令。

此时可以通过 disql 分别连接两个节点验证:
disql SYSDBA/DMdsc_123@127.0.0.1:5236disql SYSDBA/DMdsc_123@127.0.0.1:5237

10. 配置与启动监视器 (dmdba 用户执行)

vi /home/dmdba/dmdbms/bin/dmcssm.ini
CSSM_OGUID = 210715 CSSM_CSS_IP = 192.168.201.94:11286 # 使用 eth1 网卡 CSSM_CSS_IP = 192.168.201.94:11287 # 使用 eth1 网卡 CSSM_LOG_PATH = ../log CSSM_LOG_FILE_SIZE = 512 CSSM_LOG_SPACE_LIMIT = 2048

启动监视器:

/home/dmdba/dmdbms/bin/dmcssm INI_PATH=/home/dmdba/dmdbms/bin/dmcssm.ini

输入 show 命令,如果能看到 GRP_CSS, GRP_ASM, GRP_DSC 的状态均为 OPENis_okTRUE,即代表单机版 DMDSC 部署圆满成功!

image20260721225131599.png

问题解答:

关于单机上的网卡的配置

这正是单机部署导致的根本差异。在原指南的标准双机场景中,CSS0 和 CSS1 分别运行在物理上两台不同的服务器(db0、db1)上,每台服务器各自有独立的心跳网卡,因此两节点的 DCR_EP_HOST 必然不同(10.10.10.1 vs 10.10.10.2),而端口可以相同(都用 11286),因为"IP + 端口"组合本身就能唯一定位进程。
在你的单机环境里,两个 CSS 进程跑在同一台机器上,绑定在同一块 eth1 网卡上,只有一个可用 IP(192.168.201.94)。既然 IP 没法区分,就只能靠端口不同(11286 / 11287)来让操作系统区分这两个监听进程。

部署形态 节点 心跳 IP CSS 端口 区分依据
原指南·双机 CSS0 (db0) 10.10.10.1 11286 IP 不同
原指南·双机 CSS1 (db1) 10.10.10.2 11286 IP 不同
单机·本方案 CSS0 192.168.201.94 11286 端口不同
单机·本方案 CSS1 192.168.201.94 11287 端口不同
判断原则其实只有一条:同一台物理机上,"IP + 端口"必须能唯一确定一个监听进程
  • 双机时:两进程在不同机器上,IP 已经不同,端口可以复用。
  • 单机时:两进程在同一机器上,IP 相同,端口必须错开。
    所以同一个 dmdcr_cfg.ini 配置项,到了单机场景就需要把第二个节点的端口 +1(ASM、DB 的 MAL 端口同理,都是这个逻辑)。本质还是为了满足操作系统对网络监听唯一性的要求,而非达梦集群本身的特殊限制。

根据您提供的共享存储映射信息,这四个磁盘设备在达梦数据共享集群(DMDSC)的搭建中各自扮演着核心角色。它们是集群高可用性和数据共享的基础。

DMDSC 集群核心存储组件概览

首先,通过一个表格快速了解这四个磁盘的定位和关键职责:

磁盘别名 映射设备 核心作用 关键特性
asm-dmdcr /dev/dm/asm-dmdcr 集群注册表 存储整个集群的配置信息,是集群的“大脑”
asm-dmvote /dev/dm/asm-dmvote 表决磁盘 用于节点心跳检测和故障仲裁,是集群的“法官”
asm-dmlog /dev/dm/asm-dmlog Redo日志盘 存储联机重做日志,保障事务的持久性和故障恢复能力
asm-dmdata /dev/dm/asm-dmdata 数据盘 存放所有业务数据文件,是数据的“仓库”

各磁盘的详细作用

下面详细解释每个磁盘在DMDSC集群中的具体作用和重要性。

1. DCR磁盘(asm-dmdcr)——集群的“大脑”

DCR(DM Clusterware Registry)是达梦集群注册表的简称,用于存储、维护集群配置的详细信息。整个集群环境共享DCR配置信息,包括DMDSC、DMASM、DMCSS资源,实例名、监听端口,以及集群中故障节点信息等。

  • 核心功能:集中存储集群的元数据,所有节点在启动时都需要访问它以获取配置信息,从而实现协同工作。
  • 重要性:一个集群环境中只能配置一个DCR磁盘,且必须存储在所有节点都可以访问的共享存储中。如果DCR损坏,集群将无法启动或正常协调。

2. VOTE磁盘(asm-dmvote)——集群的“法官”

VOTE磁盘是表决磁盘,记录了集群成员信息。DM集群通过VOTE磁盘进行心跳检测,确定集群中节点的状态,判断节点是否出现故障。

  • 核心功能
    • 心跳检测与状态判断:各节点和DMCSS服务定期向VOTE磁盘写入心跳信息,并从VOTE磁盘读取其他节点的状态。
    • 故障仲裁:当集群中出现网络故障时,使用VOTE磁盘来确定哪些DMDSC节点应该被踢出集群,防止“脑裂”发生。
    • 命令传递:DMCSS通过VOTE磁盘传递控制命令,通知节点执行启动、故障处理、节点重加入等操作。
  • 重要性:一个集群环境只能配置一个表决磁盘,且同样必须存储在共享存储中。它的可靠性直接关系到集群的稳定性和故障切换的正确性。

3. Redo日志盘(asm-dmlog)——事务的“安全日记”

这个磁盘用于存储数据库集群的Redo Log(联机重做日志)。Redo日志记录了对数据库数据页的所有修改操作,是保障数据一致性和故障恢复能力的关键。

  • 核心功能
    • 事务持久性:确保已提交事务的数据在系统故障后可以通过重演日志恢复。
    • 数据恢复:在节点故障或集群重启时,通过Redo日志将数据恢复到一致状态。
  • 规划建议:Redo日志盘的空间大小建议最小不少于4GB,否则可能引起数据库启动失败等问题。其I/O性能直接影响事务提交速度。

4. 数据盘(asm-dmdata)——数据的“仓库”

数据盘用于存放所有业务数据文件(如系统表空间SYSTEM.DBF、用户表空间等)。在DMDSC架构中,多个数据库实例共同访问和修改同一份数据库文件,这些文件就存放在共享存储的数据盘上。

  • 核心功能:提供共享数据存储,实现“多实例、一份数据”的核心架构。
  • 重要性:这是业务数据的唯一物理存放点,其可靠性和性能至关重要。通常根据数据量规划多个数据盘或使用DMASM磁盘组进行管理。

如何支撑DMDSC集群工作?

这些磁盘共同支撑了DMDSC集群的运行逻辑,其协作关系如下图所示:

flowchart LR
    A[启动集群] --> B[节点1 & 节点2]
    B --> C[DMCSS服务]
    C --> D[读取/写入<br>DCR & VOTE磁盘]
    D --> E[获取集群配置<br>协调节点状态]
    E --> F[DMASM服务]
    F --> G[管理数据盘 & 日志盘]
    G --> H[数据库实例]
    H --> I[并发访问<br>共享数据]
  1. 集群启动与协调:每个节点的DMCSS服务在启动时,首先访问DCR磁盘读取集群配置,并访问VOTE磁盘进行心跳注册和状态同步。
  2. 共享存储管理:DMASM服务负责管理格式化后的磁盘(包括数据盘和日志盘),为数据库实例提供共享的文件系统服务。
  3. 并发访问:多个数据库实例(DMSERVER)通过DMASM访问数据盘日志盘,实现对同一份数据的并发读写,并通过日志盘保证事务一致性。

核心要点:DMDSC的核心思想是“多个数据库实例共同访问同一份数据库文件”。这四个磁盘正是实现这一思想的物理基础:DCR和VOTE盘确保多个实例能够协调一致地工作,而数据和日志盘则提供了共享的数据载体和事务保障。

生产环境规划建议

在生产环境中,这些磁盘的规划和可靠性至关重要:

  • 冗余与高可用:强烈建议为所有这些共享磁盘配置冗余(如使用RAID),避免单点故障。DCR和VOTE盘的损坏将导致集群瘫痪。
  • 性能分离:将Redo日志盘、数据盘和归档盘(如果配置)物理分离,避免I/O竞争,提升性能。
  • 空间规划:数据盘根据业务数据量规划;Redo日志盘至少4GB,建议更大;DCR和VOTE盘通常5GB左右即可。
    总结来说,这四个磁盘分别承担了DMDSC集群的配置管理、协调仲裁、事务保障和数据存储四大核心职能,它们共同构成了一个高可用、高性能的共享存储数据库集群的基石。

disql SYSDBA/DMdsc_123@127.0.0.1:5236disql SYSDBA/DMdsc_123@127.0.0.1:5237的网卡设置和正常在两个服务器上部署的区别:

不需要修改网卡(eth0),也不需要修改 IP 地址。
这里使用 127.0.0.1(本地回环地址)是完全正确且推荐的做法,这跟网卡配置没有关系。

详细解释

1. 为什么用 127.0.0.1?

127.0.0.1 代表“本机”。既然您是在数据库服务器本机上执行 disql 客户端去连接本地的数据库实例,那么使用 127.0.0.1 是最高效、最稳定的方式。

  • 数据流向:数据直接在操作系统内部协议栈流转,不经过物理网卡(eth0),速度最快。
  • 安全性:不需要依赖外部网络是否连通,只要进程活着就能连上。

2. 这里的 IP 代表什么?

在命令 disql SYSDBA/DMdsc_123@127.0.0.1:5236 中:

  • 127.0.0.1:表示连接本机
  • 5236:表示连接本机上监听 5236 端口的数据库实例。

3. 什么时候需要改 IP?

只有当您从另一台服务器(例如您的 Windows 电脑,或者其他 Linux 服务器)远程连接数据库时,才需要把 127.0.0.1 改为达梦服务器真实的物理 IP(例如 192.168.200.31)。
例如:
如果您的 Windows 电脑想连接达梦服务器(IP 为 192.168.200.31),命令如下:

disql SYSDBA/DMdsc_123@192.168.200.31:5236
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服