注册
DMDSC集群部署
专栏/技术分享/ 文章详情 /

DMDSC集群部署

lhpaaaa 2025/08/22 71 0 0
摘要

1.概述

DMDSC即DM 共享存储数据库集群,多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件,这些文件保存在共享存储上。每个节点有自己独立的联机日志和归档日志,联机日志和归档日志都需要保存在共享存储上。主要由数据库和数据库实例、共享存储、DMASM 或 DMASM 镜像、本地存储、通信网络、集群控制软件 DMCSS、集群监视器 DMCSSM 组成。
我们可以把DSC集群(无论有多少个节点)看成一个整体,这个整体里面会有且只有一个控制节点,其他都是普通节点,当控制节点出现故障时,普通节点会通过选举推选出一个新的控制节点。
数据库实例:多个节点(如 DSC0、DSC1),每个节点有独立的进程和内存,共同操作共享存储上的数据库文件。
共享存储:存放数据文件、控制文件、联机日志等核心文件,所有节点平等访问(需通过 DMASM 或裸设备管理)。
本地存储:保存节点独立的配置文件(dm.ini、dmarch.ini)、归档日志等。
DMCSS(集群控制软件):监控集群节点状态,管理启动 / 关闭、故障处理及节点重加入。
DMASM(达梦自动存储管理):管理共享磁盘组,提供高效的共享存储访问(可选,也可使用裸设备)。
监视器(dmcssm):独立节点,查看集群状态,执行启停集群、故障处理等操作。

2.部署规划

以常用的2节点DSC集群为例
image.png

3.数据库软件安装

3.1.内核参数

修改内核参数

vi /etc/sysctl.conf
添加以下内容
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
kernel.core_pattern = /dmdata/core.%e_%p_%t
vm.swappiness=10
vm.dirty_background_ratio = 0
vm.min_free_kbytes = 512000
使参数生效,执行
sysctl -p

3.2.用户组和目录

为了系统安全,一般不使用root用户来安装数据库

#创建用户组,并指定其组ID为2001,可以防止系统分配重复的组ID

groupadd dinstall -g 2001

#创建用户
# 创建数据库管理用户 ‘dmdba’,指定用户ID ‘2001’,主目录 ‘/home/dmdba’,默认Shell ‘/bin/bash’,并加入 ‘dinstall’ 组,
# -m: 若主目录不存在则自动创建, -G: 指定附加组, -d: 指定主目录; -s: 指定Shell, -u: 指定用户ID。

useradd  -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba


#修改密码(刚创建的用户是没有密码的,要我们去加)

passwd dmdba
#密码:Dm@1357

#查看用户UID\GID\所属组
id dmdba
查看是否存在这个目录
ls -ld /home/dmdba
查看用户详情
grep dmdba /etc/passwd

#实例保存目录
mkdir -p /dmdata/data
#归档保存目录
mkdir -p /dmdata/arch
#备份保存目录
mkdir -p /dmdata/dmbak
#dmdba 用户可读写执行,同组用户可读执行,其他用户可读执行
chown -R dmdba:dinstall /dmdata/data
chown -R dmdba:dinstall /dmdata/arch
chown -R dmdba:dinstall /dmdata/dmbak
chmod -R 755 /dmdata/data
chmod -R 755 /dmdata/arch
chmod -R 755 /dmdata/dmbak

3.3.资源限制

修改用户资源限制
执行以下命令,修改 dmdba 用户资源限制。

文件末尾添加如下内容: dmdba soft nice 0 dmdba hard nice 0 dmdba soft as unlimited dmdba hard as unlimited dmdba soft fsize unlimited dmdba hard fsize unlimited dmdba soft nproc 65536 dmdba hard nproc 65536 dmdba soft nofile 65536 dmdba hard nofile 65536 dmdba soft core unlimited dmdba hard core unlimited dmdba soft data unlimited dmdba hard data unlimited

此外需要检查/etc/security/limits.d/目录下是否有其他限制资源的配置文件,如果有也需要修改。

3.4.防火墙

在root用户下,关闭防火墙

systemctl stop firewalld.service
systemctl status firewalld.service
systemctl disable firewalld.service

如果不关闭防火墙,一定要开放相关端口

3.5.关闭 selinux

查看selinux的模式,SELinux 有 3 种模式,分别是 Enforcing,Permissive 和 Disabled 状态。
Enforcing:强制模式。代表 SELinux 在运行中,且已经开始限制 domain/type 之间的验证关系;
Permissive:宽容模式。代表 SELinux 在运行中,不会限制 domain/type 之间的验证关系,即使验证不正确,进程仍可以对文件进行操作。如果验证不正确会发出警告。
Disabled:关闭模式。SELinux 并没有实际运行。
Enforcing 状态的值是 1,permissive 状态是 0

—— 查看selinux的模式
getenforce
—— 临时性关闭(立即生效,但是重启服务器后失效)
setenforce 0  #设置selinux为permissive模式(即关闭)
—— 开机不重启
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
—— 查看
cat /etc/selinux/config

3.6.关闭透明大页、numa

vi /etc/default/grub
#找到对应的地方进行补充 numa=off transparent_hugepage=never
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off transparent_hugepage=never"

执行这些检查
# 查看 NUMA 节点统计
numastat
#显示当前 shell 或进程的 NUMA 相关设置**
numactl --show
#显示系统的 NUMA 硬件拓扑(节点、CPU、内存等)
numactl --hardware
#立即重启系统,让配置永久生效
shutdown -r now

3.7.Io调度算法

cat /sys/block/sda/queue/scheduler 

#对于SAS或STAT磁盘(机械硬盘),建议修改为deadline调度算法
—— 修改对应磁盘调度算法为 deadline
echo 'deadline' > /sys/block/sda/queue/scheduler

#对于SSD(固态硬盘),建议修改为NOOP调度算法
# 修改对应磁盘调度算法为 NOOP
echo 'NOOP'>/sys/block/sda/queuelscheduler

Linux系统一般默认使用CFQ调度,修改磁盘调度方法:
查看调度:cat /sys/block/sda/queue/scheduler
临时修改:echo "deadline" > /sys/block/sda/queue/scheduler
永久修改: grubby --update-kernel=ALL --args="elevator=deadline"
#重启生效
reboot


3.8.关闭swap

vi /etc/fstab
#进入/etc/fsstab配置文件屏蔽掉swap一行
#UUID=b9a576fa-8a7d-4d5d-bfd9-4d196523fc81 swap      swap    defaults        0 0
#禁用 /proc/swaps 中的所有交换区
swapoff

注意:Swap 的关闭需要视情况而定,建议内存充裕时关闭,内存太小不关闭。

3.9.调整system.conf参数

DefaultLimitNOFILE:用户默认最大打开文件数。
DefaultLimitNPROC:用户默认最大进程数。
vi /etc/systemd/system.conf,调整如下内容:

DefaultLimitNOFILE=65536
DefaultLimitNPROC=65536

需要重启数据库服务器生效。
reboot

3.10.在VMWARE下创建共享磁盘

.\vmware-vdiskmanager.exe -c -s 50000Mb -a lsilogic -t 2 "E:\VMware-Linux\gongxiang\sharedisk.vmdk"

3.11.使用udev绑定裸设备

创建了共享磁盘后,由于我这里暂时无法实现多路径配置,所以直接给共享磁盘分区
选择其中一台虚拟机操作即可

fdisk /dev/sdb

#进入交互模式后,复制下面的命令进行分区
#sdb1 
n
p
1

+1G

n
p
2

+1G

n
p
3

+5G

n
p
4


w

这里可以看到已经分配了


#刷新分区表
partprobe /dev/sdb

#查看磁盘分区
lsblk /dev/sdb


获取每个分区的唯一标识(替代 DM_UUID),一定要在两台虚拟机的.vmx中加上disk.EnableUUID = "TRUE",否则看不到SCSI ID
ls -l /dev/disk/by-id/ | grep sdb

新建 udev 规则文件,目的是设备映射器设备 sd* 绑定到裸设备

/dev/raw/raw1
两台虚拟机都操作
#创建规则文件
vi /etc/udev/rules.d/60-raw.rules

KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_SCSI_SERIAL}=="60002ac00000000000000006700025c68", ENV{ID_PART_ENTRY_NUMBER}=="1", RUN+="/usr/bin/raw /dev/raw/raw1 $devnode"
KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_SCSI_SERIAL}=="60002ac00000000000000006700025c68", ENV{ID_PART_ENTRY_NUMBER}=="2", RUN+="/usr/bin/raw /dev/raw/raw2 $devnode"
KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_SCSI_SERIAL}=="60002ac00000000000000006700025c68", ENV{ID_PART_ENTRY_NUMBER}=="3", RUN+="/usr/bin/raw /dev/raw/raw3 $devnode"
KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_SCSI_SERIAL}=="60002ac00000000000000006700025c68", ENV{ID_PART_ENTRY_NUMBER}=="4", RUN+="/usr/bin/raw /dev/raw/raw4 $devnode"

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

命令解析:
1. ACTION=="add": 当设备被添加到系统时触发该规则。
KERNEL=="sdb*": 匹配内核名称为 sdb1, sdb2, sdb3, 或 sdb4 的设备。
RUN+="/bin/raw /dev/raw/rawX %N": 在匹配的设备上运行 /bin/raw 命令,将该设备绑定到 /dev/raw/rawX(其中 X 是1到4的数字)。%N 是一个 Udev 变量,代表当前设备的内核名称。
ENV{ID_SCSI_SERIAL}:要求设备的 SCSI 序列号必须精确匹配唯一标识该物理磁盘。
SUBSYSTEM=="block":限制匹配对象为 块设备
ENV{ID_PART_ENTRY_NUMBER}=="1":要求设备是磁盘的 第一个分区
作用:这条规则的作用是将分区(如 sdb1, sdb2, 等等)映射为原始设备(raw device)。原始设备允许直接访问磁盘而不经过文件系统层,这对于某些数据库应用或需要低级别磁盘访问的应用程序非常有用。
2. ACTION=="add", KERNEL=="raw[1-4]", OWNER="dmdba", GROUP="dinstall", MODE="660"
KERNEL=="raw[1-4]": 匹配内核名称为 raw1 到 raw4 的设备。
OWNER="dmdba", GROUP="dinstall", MODE="660": 设置这些设备的所有者为 dmdba,组为 dinstall,并赋予读写权限给所有者和组,其他用户无权限(MODE="660")。
作用:这条规则确保了新创建的原始设备文件具有正确的所有权和权限设置,使得只有指定的用户和组能够访问这些设备



# 内容如下:
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="dinstall", MODE="660"

应用udev规则
# 重新加载 udev 规则
/sbin/udevadm control --reload

udevadm control --reload-rules 

# 触发设备变更,让 udev 根据现有的规则重新处理这些设备
/sbin/udevadm trigger --type=devices --action=change

udevadm trigger --type=devices --action=change

# 可选:重新扫描分区
partprobe
验证裸设备绑定(集群的设备都要看)
# 查看 raw 设备
ll /dev/raw/

# 查看绑定情况
raw -qa

# 查看大小
blockdev --getsize64 /dev/raw/raw1  # 应 ≈ 1G = 1073741824
blockdev --getsize64 /dev/raw/raw2  # ≈ 1G
blockdev --getsize64 /dev/raw/raw3  # ≈ 18G = 19327352832
blockdev --getsize64 /dev/raw/raw4  # 剩余空间

如果看不到分区情况,就手动绑定
# 绑定sdb1到raw1
raw /dev/raw/raw1 /dev/sdb1
# 绑定sdb2到raw2
raw /dev/raw/raw2 /dev/sdb2
# 绑定sdb3到raw3
raw /dev/raw/raw3 /dev/sdb3
# 绑定sdb4到raw4
raw /dev/raw/raw4 /dev/sdb4

# 设置权限
chown dmdba:dinstall /dev/raw/raw1 /dev/raw/raw2 /dev/raw/raw3 /dev/raw/raw4
chmod 660 /dev/raw/raw1 /dev/raw/raw2 /dev/raw/raw3 /dev/raw/raw4

重启两台虚拟机,再次验证一遍持久性
# 重启
reboot

# 查看绑定情况
raw -qa
ll /dev/raw/

3.12.信号量相关设置(麒麟 v10 操作)

麒麟 v10 操作系统需要检查 systemd 的配置,避免共享信号量被移除的问题。设置 RemoveIPC=no,防止关闭asm服务时,进程还在,导致重新起来报错:
检查 RemoveIPC 参数设置,要求为 no:

systemctl show systemd-logind | grep -i removeipc 
如果不是 no,用以下方法调整:

#修改/etc/systemd/logind.conf 配置文件中的 RemoveIPC 参数,将#注释去
掉,并修改 yes 为 no,
vim /etc/systemd/logind.conf
RemoveIPC=no




#重启服务
systemctl daemon-reload;
systemctl restart systemd-logind

#验证
grep RemoveIPC /etc/systemd/logind.conf
loginctl show-session|grep RemoveIPC
systemctl show systemd-logind|grep RemoveIPC

3.13.环境变量

在dmdba用户下,调整dmdba用户的环境变量

vi /home/dmdba/.bash_profile
#文件末尾添加如下内容:
#设置了 `DM_HOME` 变量,指定了达梦数据库的安装目录
export DM_HOME=/home/dmdba/dmdbms 
#通过追加 `$DM_HOME/bin` 到 `PATH`,允许用户直接调用位于该目录下的所有命令,而不必输入完整路径
export PATH=$PATH:$DM_HOME/bin  
#让系统知道去哪里寻找达梦数据库的共享库
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin

#添加完成后让它生效
source ~/.bash_profile


这是会影响后面的启动实例操作,配置完必须要source让它生效

3.14.安装数据库

使用root用户挂载数据库软件的iso文件

--进入安装包目录
cd /opt/dm
mount -o loop dm8_20250528_x86_rh6_64.iso /dmiso

\#切换dmdba用户
su - dmdba
\#进入挂载目录

cd /dmiso

\#执行安装命令

./DMInstall.bin -i


su root
/home/dmdba/dmdbms/script/root/root_installer.sh

4.DSC集群部署配置

4.1.配置 DCR 初始化配置文件

dmdcr_cfg.ini 是格式化 DCR 磁盘和 Voting 磁盘的配置文件,但有故障时:节点A失联 → DMCSS检测心跳超时 → 通知存活节点接管服务 → 踢出故障节点。
创建配置文件存放目录,2 个节点都要执行mkdir -p /home/dmdba/config,使用 dmdba 用户,执行以下命令:
就是安装数据库的目录的前一个/home/dmdba

# 创建配置目录(两个节点都要创建这个目录)
mkdir -p /home/dmdba/config
# 新建 dmdcr_cfg.ini 文件,节点 1 使用 dmdba 用户(选择其中一个节点即可)
vim /home/dmdba/config/dmdcr_cfg.ini
添加以下内容:
#全局设置
DCR_N_GRP = 3 # 定义组的数量(表示有三个组需要配置:CSS, ASM 和 DB)
DCR_VTD_PATH = /dev/raw/raw2  # 投票磁盘路径(存储集群成员状态、心跳信息和控制指令)
DCR_OGUID = 63635  # 集群对象的全局唯一标识符

#CSS组(集群同步服务)负责实例间心跳检测和状态同步,每个节点都有自己的名称、IP 地址和端口号
[GRP]
DCR_GRP_TYPE = CSS  # 组类型为CSS
DCR_GRP_NAME = GRP_CSS  # 组名称
DCR_GRP_N_EP = 2  # 组内节点数量(就是配置的节点有几个)
 DCR_GRP_DSKCHK_CNT = 60  # 磁盘检查计数(若某节点在 DCR_GRP_DSKCHK_CNT(默认60秒)内未更新心跳,DMCSS标记其为故障节点,触发故障转移)
[GRP_CSS]
 DCR_EP_NAME = CSS0  ## 节点1名称
 DCR_EP_HOST = 192.168.100.115  # 节点IP地址(心跳地址)
 DCR_EP_PORT = 9341 # 节点端口号
[GRP_CSS]
 DCR_EP_NAME = CSS1  # 节点2名称
 DCR_EP_HOST = 192.168.100.116
 DCR_EP_PORT = 9343

#ASM组(存储管理组)管理共享存储设备,DCR_EP_SHM_KEY两个节点不能一样,DCR_EP_PORT不同节点可以用一样的
[GRP]
 DCR_GRP_TYPE = ASM   # 组类型为ASM 
 DCR_GRP_NAME = GRP_ASM  # 组名称
 DCR_GRP_N_EP = 2    # 组内节点数量
 DCR_GRP_DSKCHK_CNT = 60  # 磁盘检查计数
[GRP_ASM]
 DCR_EP_NAME = ASM0  # 节点名称(跟dmasvrmal.ini配置的实例名称一定要相同)
 DCR_EP_SHM_KEY = 93360  # 节点间共享内存通信的系统标识符
 DCR_EP_SHM_SIZE = 1000   # 共享内存大小(MB)
 DCR_EP_HOST = 192.168.100.115  # 节点IP地址(心跳ip)
 DCR_EP_PORT = 9349   # 节点端口号
 DCR_EP_ASM_LOAD_PATH = /dev/raw  # ASM加载路径
[GRP_ASM]
 DCR_EP_NAME = ASM1  #第二个节点
DCR_EP_SHM_KEY = 93361
 DCR_EP_SHM_SIZE = 1000
 DCR_EP_HOST = 192.168.100.116
 DCR_EP_PORT = 9351
 DCR_EP_ASM_LOAD_PATH = /dev/raw

#DB (Database Instance) 数据库实例组
[GRP]
 DCR_GRP_TYPE = DB   ## 组类型为DB
 DCR_GRP_NAME = GRP_DSC  # 组名称
 DCR_GRP_N_EP = 2  # 组内节点数量
 DCR_GRP_DSKCHK_CNT = 60  # 磁盘检查计数
[GRP_DSC]
 DCR_EP_NAME = DSC0  # 节点名称
 DCR_EP_SEQNO = 0  # 序列号
 DCR_EP_PORT = 5236  # 节点端口号(这里是数据库实例组,所以端口号就是数据库的)
 DCR_CHECK_PORT = 9741  # 检查端口
[GRP_DSC]
 DCR_EP_NAME = DSC1  #第二个节点
 DCR_EP_SEQNO = 1
 DCR_EP_PORT = 5236
 DCR_CHECK_PORT = 9742

4.2.创建 ASM 磁盘

先清理以下磁盘,避免有错误

dd if=/dev/zero of=/dev/raw/raw1 bs=8192 count=500
dd if=/dev/zero of=/dev/raw/raw2 bs=8192 count=500
dd if=/dev/zero of=/dev/raw/raw3 bs=8192 count=500
dd if=/dev/zero of=/dev/raw/raw4 bs=8192 count=500

在进行初始化之前对dmdba用户进行授权/dev/raw文件,两个节点都需要授权

su root
chown -R dmdba:dinstall /dev/raw
ll /dev/raw

两个节点都一定要看到raw下面的文件所有者是dmdba

使用 dmdba 用户,执行以下命令(只需在一个节点执行)。

su - dmdba
cd /home/dmdba/dmdbms/bin
./dmasmcmd

image.png

进入 ASM 提示符后执行以下命令:data>log>vote=dcr

#创建一个专用的 DCR 磁盘(用于保存集群元数据)
create dcrdisk '/dev/raw/raw1' 'dcr'
#投票磁盘(Voting Disk),用于集群成员仲裁
create votedisk '/dev/raw/raw2' 'vote' 
#普通 ASM 数据磁盘
create asmdisk '/dev/raw/raw3' 'LOG0'
create asmdisk '/dev/raw/raw4' 'DATA0'

#将 dcr 磁盘格式化为集群注册表磁盘,使用 dmdcr_cfg.ini 文件中的配置初始化
#注意配置文件的路径/home/dmdba/config/dmdcr_cfg.ini,密码要有大小写和特殊符号且>=8位
init dcrdisk '/dev/raw/raw1' from '/home/dmdba/config/dmdcr_cfg.ini' identified by 'Dm@12345'

#将投票磁盘初始化,用于集群心跳仲裁;
init votedisk '/dev/raw/raw2' from '/home/dmdba/config/dmdcr_cfg.ini'

两个节点都去检查验证是否设置成功

su - dmdba
cd $DM_HOME/bin
./dmasmcmd
listdisks /dev/raw
exit

image.png

4.3.配置ASM的MAL系统配置文件

2 个节点都需要配置,且文件内容相同,这里是配置mal系统通信用的,用于dmasm节点之间的通信,执行以下命令:

vi /home/dmdba/config/dmasvrmal.ini
添加以下内容:
[MAL_INST1] # MAL 名称,同一个配置文件中 MAL 名称需保持唯一性
 MAL_INST_NAME = ASM0  # ASM服务实例的名称
 MAL_HOST = 192.168.100.115  # MAL IP 地址(心跳地址)
 MAL_PORT = 7236  # MAL 监听端口,用于数据守护、DSC、MPP 等环境中各节点实例之间 MAL 链路配置
[MAL_INST2]
 MAL_INST_NAME = ASM1
 MAL_HOST = 192.168.100.116 
 MAL_PORT = 7236

4.4.配置 DCR 启动配置文件

DMASM 的两个节点分别配置dmdcr.ini,dmdcr_path 相同,dmasvrmal.ini 文件内容也相同,dmdcr_seqo 分别为 0 和 1。

su - dmdba
vi /home/dmdba/config/dmdcr.ini
节点 1(DSC0) 添加以下内容:
DMDCR_PATH = /dev/raw/raw1 #DCR 磁盘的路径,用于存储集群的元数据信息
DMDCR_MAL_PATH = /home/dmdba/config/dmasvrmal.ini #指定 MAL配置文件的路径
DMDCR_SEQNO = 0  #当前节点在集群中的序列号,每个节点唯一
DMDCR_AUTO_OPEN_CHECK = 30  #集群在启动时自动尝试重新打开数据库实例的时间间隔

------------在没有注册ASM和数据库实例服务之前不要加下面的参数-------------
#ASM 重启参数,命令行方式启动
DMDCR_ASM_TRACE_LEVEL = 2  #指定日志级别(1:TRACE; 2 WARN; 3 ERROR; 4 FATAL),值越小,记录日志越详细,默认为1
DMDCR_ASM_RESTART_INTERVAL = 0 #ASM 服务故障后自动重启的间隔,0表示不重启
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmASMSvrService_DSC0 start #启动 ASM 服务
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0 #数据库实例故障后自动重启的间隔,0为不重启
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmService_DSC0 start 启动数据库实例
节点 2(DSC1) 添加以下内容:
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH = /home/dmdba/config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_AUTO_OPEN_CHECK = 30

------------在没有注册ASM和数据库实例服务之前不要加下面的参数-------------
DMDCR_ASM_TRACE_LEVEL = 2
DMDCR_ASM_RESTART_INTERVAL = 0DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmASMSvrService_DSC1 start
DMDCR_AUTO_OPEN_CHECK = 30
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmService_DSC1 start

4.5.启动 DMCSS、DMASM 服务

两个节点都分别执行这个,

su dmdba
./dmcss DCR_INI=/home/dmdba/config/dmdcr.ini

image.png
image.png

在达梦集群(DSC)启动过程中,启动dmcss服务后不需要执行exit退出,而是需要保持dmcss服务在后台运行,然后新开一个终端窗口按顺序执行dmasmsvr命令。

su dmdba
./dmasmsvr DCR_INI=/home/dmdba/config/dmdcr.ini

image.png

4.6.创建 ASM 磁盘组

只在集群的主节点,再开新的终端使用 dmasmtool 工具创建 DMASM 磁盘组,

su - dmdba
cd $DM_HOME/bin
./dmasmtool dcr_ini=/home/dmdba/config/dmdcr.ini
create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'

image.png
这条命令是在 达梦数据库 DM8 的 dmasmcmd 工具中执行的,用于创建一个名为 DMLOG 的 ASM 磁盘组(Disk Group)。磁盘组是 ASM 管理的基本单位,可以包含一个或多个磁盘。磁盘组 DMLOG 使用 /dev/raw/raw4 这个裸设备作为其存储介质,DMDATA 的 ASM 磁盘组。这个磁盘组使用 /dev/raw/raw3 裸设备作为其存储介质。
0

加了后会在asm进程这里显示
image.png

4.7.初始化DSC集群数据库实例dminit.ini

使用 DMASM 文件系统,必须使用 DMINIT 工具的 control 参数指定 DMINIT.INI 文件。dminit.ini 是设置数据库初始化参数的文件,要根据实际情况设置,尤其是页大小、字符集、大小写是否敏感的参数要和应用确认,在集群的主节点配置即可。
在生产环境下,初始化数据库的参数要根据实际情况去调整

su - dmdba
cd $DM_HOME/bin

# 新建 dminit.ini 文件,节点 1 使用 dmdba 用户(选择其中一个节点即可)
vim /home/dmdba/config/dminit.ini

#添加以下内容
db_name = dsc # 初始化数据库名称
system_path = +DMDATA/data # 初始化数据库存放的路径
system = +DMDATA/data/dsc/system.dbf # SYSTEM表空间路径
system_size = 128 # SYSTEM表空间大小
roll = +DMDATA/data/dsc/roll.dbf  # ROLL表空间路径
roll_size = 128  # ROLL表空间大小
main = +DMDATA/data/dsc/main.dbf # MAIN表空间路径
main_size = 128 # MAIN表空间大小
ctl_path = +DMDATA/data/dsc/dm.ctl # DM.CTL控制文件路径
ctl_size = 8  # DM.CTL控制文件大小
log_size = 256   # 日志文件大小
dcr_path = /dev/raw/raw1 # DCR磁盘路径
dcr_seqno = 0  # 连接DMASM节点节点号
auto_overwrite = 0 # 文件存在时的处理方式,否自动覆盖日志文件,1表示覆盖
PAGE_SIZE = 32  #页大小
EXTENT_SIZE =32 #簇大小
CASE_SENSITIVE = 0 #大小写敏感
CHARSET = 1 # 字符集:0 是 gbk18030 1 是 UTF8
------------------------------------ 必须添加的密码配置 ----------------------------
SYSDBA_PWD = Dameng123      # 有效密码示例
SYSAUDITOR_PWD =Dameng123  # 建议同时设置审计员密码

[DSC0]  # 具体节点都是以[XXX]开始,节点实例名就是XXX
config_path = /home/dmdba/config/dsc0_config # 配置文件存放路径
port_num = 5236 # 节点服务器监听通讯端口号,数据库实例的端口号。
mal_host = 192.168.100.115  # 节点MAL系统使用IP
mal_port = 9340 # MAL监听端口,用于数据守护、DSC、MPP等环境中各节点实例之间MAL链路配置,监听端端口配置此参数。
log_path = +DMLOG/log/dsc0_log01.log # 日志文件路径。
log_path = +DMLOG/log/dsc0_log02.log
[DSC1]
config_path = /home/dmdba/config/dsc1_config
port_num = 5236
mal_host = 192.168.100.116
mal_port = 9341
log_path = +DMLOG/log/dsc1_log01.log  #不要和dsc0一样
log_path = +DMLOG/log/dsc1_log02.log   #
没有配置sysdba密码初始化会报错,所以要配置密码!!!

配置完成后,就在这个主节点上初始化实例:
su - dmdba
cd $DM_HOME/bin
./dminit control=/home/dmdba/config/dminit.ini

初始化数据库实例成功:
image.png
初始化完成后会在 init 控制文件配置的目录(config_path参数配置的目录)下生成 2 个实例的配置文件

需要手动将节点2的配置文件,从节点1复制到节点2对应目录

su - dmdba
cd /home/dmdba/config
#下面是一整句复制命令,不要分开
scp -r /home/dmdba/config/dsc1_config dmdba@192.168.100.116:/home/dmdba/config/

在另一个节点的指定目录下可以看到文件已经复制过来了
image.png

4.8.启动数据库服务

下面是手动前台方式启动集群各节点的数据库服务
两个节点一定要同时启动,否则会报错的!!!
节点1

su - dmdba
cd $DM_HOME/bin
./dmserver /home/dmdba/config/dsc0_config/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini

节点2

su - dmdba
cd $DM_HOME/bin
./dmserver /home/dmdba/config/dsc1_config/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini

注意:当看到数据库SYSTEM IS READY后,表明数据库是open了。
然后,可以正常退出数据库服务,asm服务,css服务。

DMDSC集群部署完毕,可以使用dmdba用户启动disql工具,查看视图v$dsc_ep_info来查看集群信息,两节点均可以执行:
su - dmdba
cd /home/dmdba/dmdbms/bin
./disql

执行下面sql,查看集群信息:

select * from v$dsc_ep_info;
image.png

4.9.配置监视器

用两节点之外的主机安装达梦的客户端,配置监视器。
DMCSSM.INI 是 DMCSSM 监视器的配置文件。DMDSC 集群的运行情况可以通过 DMCSSM 监视器进行查看。
DMCSSM 监视器支持一些控制命令,可以用来启动、关闭 DMDSC 集群,还可以进行手动控制节点故障处理和节点重加入。

su - dmdba
cd /home/dmdba/dmdbms/bin
#编辑配置文件
vim /home/dmdba/dmdbms/dmcssm.ini

#内容如下:
CSSM_OGUID = 63635    #和 dmdcr_cfg.ini 中的 DCR_OGUID 保持一致
#配置所有 CSS 的连接信息和 dmdcr_cfg.ini 中 CSS 配置项的 DCR_EP_HOST 和 DCR_EP_PORT 保持一致
CSSM_CSS_IP = 192.168.100.115:9343
CSSM_CSS_IP = 192.168.100.116:9343
CSSM_LOG_PATH =/home/dmdba/dmdbms/log    #监视器日志文件存放路径
CSSM_LOG_FILE_SIZE = 1024    #每个日志文件最大 1024 MB
CSSM_LOG_SPACE_LIMIT = 0    #不限定日志文件总占用空间

启动监视器
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcssm ini_path=/home/dmdba/dmdbms/dmcssm.ini
show

image.png

4.10.注册服务

以上启动方式为前台启动,仅用于验证集群配置过程。配置成功后需要注册为系统服务,方便启动和关闭集群,以及实现开机自动启动。
在每一个终端这里,根据服务退出
关闭顺序:DMDSC–>DMASM–>DMCSS
#用exit命令回车即可
exit

2 个节点都需要注册,使用 root 用户执行,到数据库安装目录的 script/root 目录。

su - root
cd /home/dmdba/dmdbms/script/root
按顺序执行下面的安装服务命令
节点 0 执行以下命令:
# 1. 先安装CSS服务
./dm_service_installer.sh -t dmcss -dcr_ini /home/dmdba/config/dmdcr.ini -p CSS0
# 2. 安装ASM服务并指定依赖CSS服务
./dm_service_installer.sh -t dmasmsvr -dcr_ini /home/dmdba/config/dmdcr.ini -p ASM0 -y DmCSSServiceCSS0


image.png
关键参数 -y 指定了:
ASM服务 必须 在CSS服务之后启动
当CSS服务停止时,ASM服务会自动停止
启动ASM服务时,系统会自动先启动CSS服务

# 3. 安装数据库服务并指定依赖ASM服务
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/config/dsc0_config/dm.ini -dcr_ini /home/dmdba/config/dmdcr.ini -p DSC0 -y DmASMSvrServiceASM0.service

通过 -y 参数指定了该数据库实例服务依赖于 DmASMSvrServiceASM0.service(即ASM存储管理服务)。这意味着:

  • 启动数据库服务前会自动启动ASM服务
  • 停止ASM服务时,数据库服务也会被停止

节点 1 执行以下命令:

# 1. 先安装CSS服务
./dm_service_installer.sh -t dmcss -dcr_ini /home/dmdba/config/dmdcr.ini -p CSS1
# 2. 安装ASM服务并指定依赖CSS服务
./dm_service_installer.sh -t dmasmsvr -dcr_ini /home/dmdba/config/dmdcr.ini -p ASM1 -y DmCSSServiceCSS1
# 3. 安装数据库服务并指定依赖ASM服务
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/config/dsc1_config/dm.ini -dcr_ini /home/dmdba/config/dmdcr.ini -p DSC1 -y DmASMSvrServiceASM1.service

服务依赖链:DmCSSServiceXXX.service (CSS集群服务)–>DmASMSvrServiceXXX.service (ASM存储服务)–>DmServiceXXX.service (数据库实例服务)
在达梦DSC集群中,数据库实例启动的前提条件:

  1. CSS服务必须已正常运行(集群同步)
  2. ASM服务必须已正常运行(管理共享存储)
  3. 数据库实例才能挂载共享存储并启动

4.11.优化数据库参数

重新以服务的方式启动 DSC 集群:各节点分别先启动 DMCSS 服务、再启
动 DMASM 服务,最后启动 DMSERVER 服务,注意:是两个节点同步按照顺序启动这些服务,两个节点操作时间间隔不要太长。

su dmdba
cd /home/dmdba/dmdbms/bin
./DmCSSServiceCSS0 start
./DmASMSvrServiceASM0 start
./DmServiceDSC0 start


用DM或者disql工具执行优化脚本

su dmdba

./disql SYSDBA/Dameng123

sp_set_para_value(2,'TRX_DICT_LOCK_NUM','1024'); 
sp_set_para_value(2,'DSC_N_CTLS','50000'); 
sp_set_para_value(2,'DSC_N_POOLS','101'); 
sp_set_para_value(2,'DSC_TRX_CMT_LSN_SYNC','0'); 
sp_set_para_value(2,'DSC_ENABLE_MONITOR','0');




编辑 dm.ini ,没看到这两个参数,末尾加
节点1

su dmdba
vi /home/dmdba/config/dsc0_config/dm.ini
#控制 DSC 集群中数据文件初始化的方式(同步 / 异步)。
DSC_FILE_INIT_ASYNC = 0 
#设置为1(优化模式)时,事务提交会优先保证本地节点日志写入成功,同时异步同步至其他节点,在不影响一致性的前提下提升事务提交效率(平衡性能与可靠性)。
DSC_TRX_CMT_OPT = 1
节点2
su dmdba
vi /home/dmdba/config/dsc1_config/dm.ini

DSC_FILE_INIT_ASYNC = 0 
DSC_TRX_CMT_OPT = 1

注意:执行完毕后,需要重启数据库服务生效。这里暂不重启,待下一步配
置完归档,再重启。

4.12.开启归档

集群所有节点,dm.ini 里面将 ARCH_INI 的值都改为 1。

节点 1:
su dmdba
vi /home/dmdba/config/dsc0_config/dm.ini

ARCH_INI = 1
节点 2:
su dmdba
vi /home/dmdba/config/dsc1_config/dm.ini

ARCH_INI = 1
 
配置归档文件
节点 1:
su dmdba
vi /home/dmdba/config/dsc0_config/dmarch.ini

#内容如下
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/dmarch/arch_dsc0
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 1024
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = +DMDATA/dmarch/arch_dsc1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 1024
节点 2:
su dmdba
vi /home/dmdba/config/dsc1_config/dmarch.ini

#内容如下
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/dmarch/arch_dsc1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 1024
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH = +DMDATA/dmarch/arch_dsc0
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 1024
注意:归档开启后,需要重启数据库服务。归档路径需要提前建好,权限要 
是 dmdba。归档最大空间限制要根据实际环境来灵活设置。

还可以根据实际需求,在原来的dmdcr.ini文件这里配置上ASM服务和实例服务当节点发生故障时是否重启
su - dmdba
vi /home/dmdba/config/dmdcr.ini
节点 1(DSC0) 加上以下内容:
#ASM 重启参数,命令行方式启动
DMDCR_ASM_TRACE_LEVEL = 2  #指定日志级别(1:TRACE; 2 WARN; 3 ERROR; 4 FATAL),值越小,记录日志越详细,默认为1
DMDCR_ASM_RESTART_INTERVAL = 0 #ASM 服务故障后自动重启的间隔,0表示不重启
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmASMSvrService_DSC0 start #启动 ASM 服务
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0 #数据库实例故障后自动重启的间隔,0为不重启
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmService_DSC0 start 启动数据库实例
节点 2(DSC1) 添加以下内容:
DMDCR_ASM_TRACE_LEVEL = 2 
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmASMSvrServiceASM1 start
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServiceDSC1 start 

DMDSC启动、关闭流程:
启动顺序:DMCSS–>DMASM–>DMDSC
关闭顺序:DMDSC–>DMASM–>DMCSS

su dmdba
#先关闭集群
#节点1
./DmServiceDSC0 stop
#节点2
./DmServiceDSC1 stop
#节点1
./DmASMSvrServiceASM0 stop
#节点2
./DmASMSvrServiceASM1 stop
#节点1
./DmCSSServiceCSS0 stop
#节点2
./DmCSSServiceCSS1 stop
#再开启集群
#节点1
./DmCSSServiceCSS0 start
#节点2
./DmCSSServiceCSS1 start
#节点1
./DmASMSvrServiceASM0 start
#节点2
./DmASMSvrServiceASM1 start
#节点1
./DmServiceDSC0 start
#节点2
./DmServiceDSC1 start


监视器用show命令查看
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmcssm ini_path=/home/dmdba/dmdbms/dmcssm.ini
show


image.png

4.13.配置服务名访问 DSC 集群

在应用及中间件服务上创建 dm_svc.conf 文件:
LINUX 操作系统上创建在/etc/目录下,如/etc/dm_svc.conf。
文件中添加以下内容:

su - dmdba
vi /etc/dm_svc.conf

DMDSC=(192.168.10.100:5236,192.168.10.101:5236) 
TIME_ZONE=(+480) #表示+8:00 时区 
LOGIN_ENCRYPT=(0) 
DIRECT=(Y) 
# 服务配置区 
[DMDSC] 
CLUSTER=(DSC) #表示集群为 DSC 集群 
EP_SELECTOR=(1) #表示第一节点正常时只连第一个节点 
AUTO_RECONNECT=(2) #第一个节点故障恢复后自动重连第一个节点 

保存后
chmod 777 /etc/dm_svc.conf

WINDOWS
客户端主机上需要配置 dm_svc.conf 文件(未安装 DM 数据库的机器新建即可),文件路径:
32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;

DMDSC=(192.168.10.100:5236,192.168.10.101:5236) 
TIME_ZONE=(+480) #表示+8:00 时区 
LOGIN_ENCRYPT=(0) 
DIRECT=(Y) 
# 服务配置区 
[DMDSC] 
CLUSTER=(DSC) #表示集群为 DSC 集群 
EP_SELECTOR=(1) #表示第一节点正常时只连第一个节点 
AUTO_RECONNECT=(2) #第一个节点故障恢复后自动重连第一个节点

注:DMDSC 为服务名,可以自定义,如果数据库用的是默认端口 5236,则
上面文件的端口号也可以省略。
应用的 JDBC 连接串修改为:jdbc:dm://DMDSC

5.部署过程中遇到的错误

5.1.备库启动报错,提示控制文件出错,要格式化共享磁盘

image.png
①共享磁盘的rawctl这个目录没有授权给dmdba,清理磁盘(dd命令),重新创建ASM磁盘开始走流程。
②磁盘已损坏,要更换。
5.2.两个节点没有同时启动报错
image.png
数据库实例启动时检测到集群中存在故障节点(broken EP),导致无法正常加入集群。
这是因为节点们没有同时启动数据库,一定要同时启动数据库

社区地址:https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服