一、概述
1.1 DSC 集群架构
1.2 架构说明
1、DMDSC 集群是一个多实例、单数据库的系统。 多个数据库实例可以同时访问、修改同一个数据库的数据。
2、数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件, 这些文件保存在共享存储上。
3、每个节点有自己独立的联机日志和归档日志,其中联机日志保存在共享存储上,归档日志可以保存在本地存储上也可以保存在共享存储上。
4、DMDSC 支持的共享存储有两种:裸设备和DMASM。 使用 DMASM 文件系统可以方便对裸设备上的磁盘或文件进行管理,推荐用户使用。
5、DMDSC 集群主要由数据库和数据库实例、 共享存储、 本地存储、 通信网络、以及集群控制软件 DMCSS 组成。
1.3 服务说明
达梦DSC集群主要依靠以下几个服务的协作来实现
DMCSS(DM Cluster Synchronization Services)
DMCSS 是 DM 集群同步服务的简称,是 DMDSC 集群应用的基础, DMCSS 负责集群环境中节点的启动、 故障处理、 节点重加入等操作。每个集群节点都需要有一个 DMCSS 服务。这些 DMCSS 服务又共同构成一个 DMCSS 集群。
DMCSSM(DM Cluster Synchronization Services Monitor)
DMCSSM是 DM 集群监视器的简称。 DMCSSM 与 DMCSS 相互通信,获取并监控整个集群系统的状态信息。 DMCSSM还提供了一系列的命令来管理、维护集群。
DMASMSVR
DMASMSVR 是提供 DMASM 服务的主要载体,每个提供 DMASM 服务的节点都必须启动一个 DMASMSVR 服务器,这些 DMASMSVR 一起组成共享文件集群系统,提供共享文件的全局并发控制。 DMASMSVR 启动时描/dev/raw/路径下的所有裸设备,加载 DMASM 磁盘,构建 DMASM 磁盘组和 DMASM 文件系统。 DMASMSVR 实例之间使用 MAL 系统进行信息和数据的传递。
1.4 运行机制
除了必要的服务以外DSC集群内部还有一些组件来为整个集群提供运行基础
DCR(DM Clusterware Registry)
DCR 是 DM 集群注册表的简称,用于存储、维护集群配置的详细信息,整个集群环境共享 DCR 配置信息,包括 DMDSC、 DMASM、 DMCSS 资源,包括实例名、 监听端口、 集群中故障节点信息等。 DCR 必须存储在集群中所有节点都可以访问到的共享存储中, 并且只支持裸设备。 在一个集群环境中只能配置一个 DCR 磁盘。
表决磁盘(Voting Disk)
表决磁盘记录了集群成员信息, DM 集群通过 Voting Disk 进行心跳检测,确定集群中节点的状态,判断节点是否出现故障。 当集群中出现网络故障时,使用 Voting Disk来确定哪些 DMDSC 节点应该被踢出集群。表决磁盘还用来传递命令,在集群的不同状态(启动、节点故障、节点重加入等) DMCSS 通过 Voting Disk 传递控制命令,通知节点执行相应命令。 Voting Disk 必须存储在集群中所有节点都可以访问到的共享存储中, 并且只支持裸设备。 在一个集群环境中只能配置一个表决磁盘。
HeartBeat(心跳机制)
DMCSS 的心跳机制是通过 Voting Disk 的 Disk Heartbeat。这种机制有最大时延,只有超过最大时延,才认为监测对象故障。
MAL 链路
MAL 系统是达梦数据库基于 TCP 协议实现的一种内部通信机制,使用 DMASM 文件系统的 DMDSC 集群中存在两套 MAL 系统, DMASM 服务器之间配置一套 MAL 系统, dmserver 服务器之间配置一套 MAL 系统。一旦 MAL 链路出现异常,DMCSS 会进行裁定,并从集群中踢出一个节点,保证集群环境正常运行。
共享内存
共享内存是一种快速、高效的进程间通信手段。所谓共享内存,就是同一块物理内存被映射到多个进程的地址空间,进程 A 可以即时看到进程 B 对共享内存的修改,反之亦然。DMASM 服务器进程和 DMASM 客户端进程之间通过共享内存方式共享 DMASM 文件到实际磁盘的映射关系。
VIP
VIP(虚拟IP地址),是一个不与特定计算机或者计算机中的网络接口相连的IP地址。数据包被发送到这个 VIP 地址,但是所有的数据还是经过真实的网络接口。在集群环境中,应用通过 VIP 连接数据库服务器,实例故障后,把实例配置的 VIP 设置到其他活动节点(叫做 IP 漂移),这样应用可以不用修改配置,继续访问数据库服务。
1.5 环境准备
环境需求列表:
指标项 | 节点1 | 节点2 |
---|---|---|
物理IP | 192.168.111.11 | 192.168.111.12 |
心跳IP | 172.16.4.9 | 172.16.4.10 |
VIP | 192.168.111.12 | / |
数据库版本 | dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso | dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso |
数据库名 | DMDSC1 | DMDSC2 |
数据库端口 | 5236 | 5236 |
数据库安装路径 | /dmdsc8/dmdbms | /dmdsc8/dmdbms |
配置文件路径 | /dmdsc8/config | /dmdsc8/config |
本地归档路径 | /dmdsc8/arch_1 | dmdsc8/arch_2 |
镜像存放路径 | /dmdsc8/iso | /dmdsc8/iso |
镜像挂载路径 | /dmdsc8/install | /dmdsc8/install |
CSS端口 | 9341 | 9341 |
DCR检查端口 | 9741 | 9741 |
DCR_OGUID | 63635 | 63635 |
本地存储 | 30G | 30G |
共享存储 | DCR 20G、VOTE 20G、REDO 20G、DATA 30G | / |
二、开始安装数据库软件
2.1 划分两节点的本地存储
本次以节点1进入步骤说明,节点2划分不再说明
[root@dmdsc01 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xf3d36351 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-62914559,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{
K,M,G} (2048-62914559,默认为 62914559):
将使用默认值 62914559
分区 1 已设置为 Linux 类型,大小设为 30 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@dmdsc01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─rhel-root 253:0 0 37G 0 lvm /
├─rhel-swap 253:1 0 3.9G 0 lvm [SWAP]
└─rhel-home 253:2 0 18.1G 0 lvm /home
sdb 8:16 0 30G 0 disk
└─sdb1 8:17 0 30G 0 part
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
sdf 8:80 0 30G 0 disk
sr0 11:0 1 4.2G 0 rom
[root@dmdsc01 ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
[root@dmdsc01 ~]# vgcreate vg_dm /dev/sdb1
Volume group "vg_dm" successfully created
[root@dmdsc01 ~]# lvcreate -l +100%free -n lv_dm vg_dm /dev/sdb1
Logical volume "lv_dm" created.
[root@dmdsc01 ~]# mkfs.xfs /dev/mapper/vg_dm-lv_dm
meta-data=/dev/mapper/vg_dm-lv_dm isize=512 agcount=4, agsize=1965824 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=7863296, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=3839, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@dmdsc01 ~]# mkdir /dmdsc8
[root@dmdsc01 ~]# mount /dev/mapper/vg_dm-lv_dm /dmdsc8
[root@dmdsc01 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-root 38G 1.7G 36G 5% /
/dev/sda1 1014M 150M 865M 15% /boot
/dev/mapper/rhel-home 19G 4.5G 14G 25% /home
tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/vg_dm-lv_dm 30G 33M 30G 1% /dmdsc8
[root@dmdsc01 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Feb 20 23:19:52 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=ba64ad4f-a32f-48a6-beb8-801e97d4e480 /boot xfs defaults 0 0
/dev/mapper/rhel-home /home xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/mapper/vg_dm-lv_dm /dmdsc8 xfs defaults 0 0
[root@dmdsc01 ~]#
2.2 创建用户组、用户、安装目录
groupadd -g 1000 dinstall
useradd -g dinstall -d /home/dmdba -s /bin/bash -m dmdba
echo 'test' | passwd --stdin dmdba
mkdir -p /dmdsc8/dmdbms
mkdir -p /dmdsc8/iso
mkdir -p /dmdsc8/install
mkdir -p /dmdsc8/config
mkdir -p /dmdsc8/arch_1 #第二个节点改为/dmdsc8/arch_2
chown -R dmdba:dinstall /dmdsc8/dmdbms
chown -R dmdba:dinstall /dmdsc8/config
chown -R dmdba:dinstall /dmdsc8/arch_1 #第二个节点改为/dmdsc8/arch_2
chmod -R 755 /dmdsc8
2.3 配置参数、环境变量
修改/etc/security/limits.conf 文件
在末尾添加以下内容(可根据自己的需求进行更改):
cat /etc/security/limits.conf
dmdba hard nofile 65536
dmdba soft nofile 65536
dmdba hard stack 32768
dmdba soft stack 16384
cat /home/dmdba/.bash_profile
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
#export PATH=$PATH:$HOME/.local/bin:$HOME/bin
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dmdsc8/dmdbms/bin"
export DM_HOME="/dmdsc8/dmdbms"
2.4 数据库安装
上传或者下载镜像文件,保存至 /dmdsc8/iso
挂载镜像文件
[root@dmdsc01 iso]# scp -r /dmdsc8/iso/dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso 192.168.111.12:$PWD
root@192.168.111.12's password:
dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso 100% 913MB 60.9MB/s 00:15
[root@dmdsc01 iso]# mount -o loop /dmdsc8/iso/dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso /dmdsc8/install/
mount: /dev/loop0 写保护,将以只读方式挂载
切换至dmdba用户
[root@dmdsc01 install]# su - dmdba
[dmdba@dmdsc01 ~]$ cd /dmdsc8/install/
[dmdba@dmdsc01 install]$ ll
总用量 935307
-r-xr-xr-x. 1 root root 2802614 7月 20 2022 DM8 Install.pdf
-r-xr-xr-x. 1 root root 954950767 7月 20 2022 DMInstall.bin
[dmdba@dmdsc01 install]$ ./DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
解压安装程序.........
欢迎使用达梦数据库安装程序
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:n
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
所需空间: 1611M
请选择安装目录 [/home/dmdba/dmdbms]:/dmdsc8/dmdbms
可用空间: 29G
是否确认安装路径(/dmdsc8/dmdbms)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /dmdsc8/dmdbms
所需空间: 1611M
可用空间: 29G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
2023-02-22 14:49:16
[INFO] 安装达梦数据库...
2023-02-22 14:49:16
[INFO] 安装 基础 模块...
2023-02-22 14:49:18
[INFO] 安装 服务器 模块...
2023-02-22 14:49:18
[INFO] 安装 客户端 模块...
2023-02-22 14:49:20
[INFO] 安装 驱动 模块...
2023-02-22 14:49:21
[INFO] 安装 手册 模块...
2023-02-22 14:49:21
[INFO] 安装 服务 模块...
2023-02-22 14:49:22
[INFO] 移动日志文件。
2023-02-22 14:49:23
[INFO] 安装达梦数据库完成。
请以root系统用户执行命令:
/dmdsc8/dmdbms/script/root/root_installer.sh
安装结束
[root@dmdsc01 ~]# sh /dmdsc8/dmdbms/script/root/root_installer.sh
移动 /dmdsc8/dmdbms/bin/dm_svc.conf 到/etc目录
修改服务器权限
创建DmAPService服务
Created symlink from /etc/systemd/system/multi-user.target.wants/DmAPService.service to /usr/lib/systemd/system/DmAPService.service.
创建服务(DmAPService)完成
启动DmAPService服务
节点1 安装完后节点 2安装 步骤同上
三、DSC 集群搭建
3.1 划分共享存储
DCR 20G、VOTE 20G、REDO 20G、DATA 30G
[root@dmdsc01 ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xa6e8903b 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{
K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@dmdsc01 ~]# fdisk /dev/sdd
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x88e73c75 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{
K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@dmdsc01 ~]# fdisk /dev/sde
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x4b24b164 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{
K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@dmdsc01 ~]# fdisk /dev/sdf
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xa9a10879 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-62914559,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{
K,M,G} (2048-62914559,默认为 62914559):
将使用默认值 62914559
分区 1 已设置为 Linux 类型,大小设为 30 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@dmdsc01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─rhel-root 253:0 0 37G 0 lvm /
├─rhel-swap 253:1 0 3.9G 0 lvm [SWAP]
└─rhel-home 253:2 0 18.1G 0 lvm /home
sdb 8:16 0 30G 0 disk
└─sdb1 8:17 0 30G 0 part
└─vg_dm-lv_dm 253:3 0 30G 0 lvm /dmdsc8
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 20G 0 part
sdd 8:48 0 20G 0 disk
└─sdd1 8:49 0 20G 0 part
sde 8:64 0 20G 0 disk
└─sde1 8:65 0 20G 0 part
sdf 8:80 0 30G 0 disk
└─sdf1 8:81 0 30G 0 part
sr0 11:0 1 4.2G 0 rom
loop0 7:0 0 913.5M 0 loop /dmdsc8/install
节点二 刷新磁盘
[root@dmdsc02 dmdsc8]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─rhel-root 253:0 0 37G 0 lvm /
├─rhel-swap 253:1 0 3.9G 0 lvm [SWAP