
一. DMDSC概述
1. DMDSC 特性
2. 组成
DMDSC 集群主要由数据库和数据库实例、共享存储、本地存储、通信网络、以及集群控制软件 DMCSS (DM Cluster Synchronization Services)组成。
数据库(Database)是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件等),保存在物理磁盘或文件系统中
数据库实例就是一组操作系统进程(或者是一个多线程的进程)以及一些内存
共享存储:DMDSC 集群要求将数据文件、控制文件、日志文件保存在共享存储上;配置 DMDSC 集群需要的 DCR、Voting disk 也必须保存在共享存储上。DMDSC 支持使用裸设备或 DMASM 文件系统作为共享存储。
本地存储:DMDSC 集群中,本地存储用来保存配置文件(记录数据库实例配置信息的 dm.ini、dmarch.ini、dmmal.ini),本地归档日志、远程归档日志
通信网络:网络分为内部网络和公共网络两个部分。
内部网络用于数据库实例之间交换信息和数据,MAL 链路使用的就是内部网络
公共网络用于对外提供数据库服务,客户端使用公共网络地址登录 DMDSC 集群,访问数据库。
集群控制(DMCSS):DMCSS 就是一款集群控制软件,专门负责监控集群中各个节点的运行状态
DMCSS 主要功能包括:管理集群的启动和关闭,控制节点故障处理,以及管理节点重加入流程
3. 概念
3.1. DCR(DM Clusterware Registry)
3.2 表决磁盘(Voting Disk)
3.3 HeartBeat(心跳机制)
3.4 MAL 链路
3.5 与 DMDSC 相关的配置文件
DMDCR_CFG.INI
DMDCR.INI
DMINIT.INI
MAL 系统配置文件(DMMAL.INI、DMASVRMAL.INI)
DM.INI
3.5.1 DMDCR_CFG.INI
3.5.2 DMDCR.INI
3.5.3 DMINIT.INI
3.5.4 MAL 系统配置文件(DMMAL.INI、DMASVRMAL.INI)
3.5.5 DM.INI
4. DMCSS
4.1 概述
4.2 心跳信息
DMCSS 实例启动后,每间隔 1 秒向 Voting Disk 指定区域写入心跳信息(包括自身的状态、时间戳等),表示 DMCSS 节点处于活动状态。
4.3 选举 DMCSS 控制节点
DMCSS 启动后向 Voting Disk 写入信息,并读取其他 DMCSS 节点的信息,如果 DMCSS集群中还没有活动的控制节点,则选举 DMCSS 控制节点。
DMCSS 选举的原则有两条:
先启动的 DMCSS 作为控制节点
DMCSS 同时启动,则选择节点号小的节点为控制节点
5. DMASM
5.1 DMASM 磁盘
5.2 DMASMCMD
5.3 DMASMSVR
二. 部署实施过程
1.安装部署结构图

2. 安装规划
2.1 主机基本信息
操作系统:中标麒麟7.6
DM 数据库安装在 Linux 操作系统所需条件:glibc 2.3 以上,内核 2.6,预先安装 UnixODBC,系统性能监控等组件。
| 主机名称 | CPU | 内存 | SWAP | /TMP | NTP |
|---|---|---|---|---|---|
| dmdsc1 | 2 | 8G | 8G | 1G | 192.168.2.30 |
| dmdsc2 | 2 | 8G | 8G | 1G | 192.168.2.30 |
2.2 网络基本信息
| 主机名称 | public-ip | private-ip | 网卡名称 | ||
|---|---|---|---|---|---|
| dmdsc1 | 192.168.2.30 | bond0 | eth0 | eth1 | |
| 192.168.3.30 | bond1 | eth2 | eth3 | ||
| dmdsc2 | 192.168.2.31 | bond0 | eth0 | eth1 | |
| 192.168.3.31 | bond1 | eth2 | eth3 |
2.3 本地目录信息
| 目录用途 | 路径 | 容量 |
|---|---|---|
| 数据库软件安装目录 | /dmdbms | 50G |
| 本地归档日志存放目录 | /dmarch | 50G |
| 远程归档存放目录 | /remote_arch | 50G |
| 备份文件存放目录 | /dmbak | 50G |
2.4 共享存储信息
| 用途 | 磁盘/分区 | 容量 |
|---|---|---|
| 存放DCR信息 | /dev/sdb | 1G |
| 存放VOTE信息 | /dev/sdc | 1G |
| 存放REDO日志 | /dev/sdd | 10G |
| 存放数据文件 | /dev/sde | 10G |
2.5 网络端口
| 实例名称 | 端口类型 | 端口 | 用途 |
|---|---|---|---|
| CSS1 | DCREPPORT | 9341 | CSS 进程 TCP 连接端口 |
| CSS2 | DCREPPORT | 9341 | CSS 进程 TCP 连接端口 |
| ASM1 | DCREPPORT | 9351 | ASM 进程 TCP 连接的端口 |
| ASM2 | DCREPPORT | 9351 | ASM 进程 TCP 连接的端口 |
| DSC1 | DCREPPORT | 5236 | 数据库实例监听端口 |
| DSC1 | DCRCHECKPORT | 9741 | DCR 检查数据库实例监听端口 |
| DSC2 | DCREPPORT | 5236 | 数据库实例监听端口 |
| DSC2 | DCRCHECKPORT | 9741 | DCR 检查数据库实例监听端口 |
| ASM01 MAL | MAL_PORT | 7236 | ASM 的 MAL 系统 TCP 连接的端口 |
| ASM02 MAL | MAL_PORT | 7236 | ASM 的 MAL 系统 TCP 连接的端口 |
| DSC01 MAL | MAL_PORT | 9236 | 数据库实例的 MAL 系统 TCP 连接的端口 |
| DSC02 MAL | MAL_PORT | 9236 | 数据库实例的 MAL 系统 TCP 连接的端口 |
3. 操作系统调整
3.1 主机名设置
hostnamectl set-hostname dmdsc1
hostnamectl set-hostname dmdsc2
3.2 关闭透明大页、网卡名调整为eth*
vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=vg00/lvroot rd.lvm.lv=vg00/lvswap rhgb quiet transparent_hugepage=never net.ifnames=0 net.ifname=0 ipv6.disable=1"
GRUB_DISABLE_RECOVERY="true
[root@dmdsc1 run]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-b31311aec4494fef9ce618b63610125a
Found initrd image: /boot/initramfs-0-rescue-b31311aec4494fef9ce618b63610125a.img
done
systemctl disable tuned
init 6
3.3 网卡bond
systemctl stop NetworkManager
systemctl disable NetworkManager
[root@dmrac2 network-scripts]# more ifcfg-bond0
BOOTPROTO=static
DEVICE=bond0
NAME=bond0
TYPE=bond
BONDING_MASTER=yes
ONBOOT=yes
IPADDR=192.168.2.31
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
BONDING_OPTS="miimon=100 mode=1"
[root@dmrac2 network-scripts]# more ifcfg-bond1
BOOTPROTO=static
DEVICE=bond1
NAME=bond1
TYPE=bond
BONDING_MASTER=yes
ONBOOT=yes
IPADDR=192.168.3.31
NETMASK=255.255.255.0
BONDING_OPTS="miimon=100 mode=1"
[root@dmrac2 network-scripts]# more ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
DEVICE=eth0
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@dmrac2 network-scripts]# more ifcfg-eth1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
DEVICE=eth1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@dmrac2 network-scripts]# more ifcfg-eth2
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth2
DEVICE=eth2
ONBOOT=yes
MASTER=bond1
SLAVE=yes
[root@dmrac2 network-scripts]# more ifcfg-eth3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth3
DEVICE=eth3
ONBOOT=yes
MASTER=bond1
SLAVE=yes
3.4 本地文件系统创建
mkdir -p /dmdbms
mkdir -p /dmarch
mkdir -p /dmbak
mkdir -p /remote_arch
chown -R dmdba:dinstall /dmdbms
chown -R dmdba:dinstall /dmarch
chown -R dmdba:dinstall /dmbak
chown -R dmdba:dinstall /remote_arch
chmod -R 775 /dmdbms
chmod -R 775 /dmarch
chmod -R 775 /dmbak
chmod -R 775 /remote_arch
3.5 用户组创建
groupadd dinstall
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba
3.6 用户资源限制
vi /etc/security/limits.conf
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft stack 65536
dmdba hard stack 65536
3.7 用户环境变量配置
vi /home/dmdba/.bash_profile
export DM_HOME=/dmdbms
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
3.8 防火墙配置
3.8.1 端口规划
搭建 2 节点共享存储集群,端口规划如下:(实际中可以按需要修改端口号)
| 主机名 | public ip | private ip | 实例名 | 端口 | 用途 |
|---|---|---|---|---|---|
| dmrac1 | 192.168.2.30 | 192.168.3.30 | dsc1 | 5236 | 数据库实例 dmrw1 监听端口 |
| dmrac1 | 192.168.2.30 | 192.168.3.30 | dsc1 | 9741 | 节点 1 DCR 检查数据库实例监听端口 |
| dmrac1 | 192.168.2.30 | 192.168.3.30 | dsc1 | 9341 | 节点 1 CSS 进程 TCP 连接端口 |
| dmrac1 | 192.168.2.30 | 192.168.3.30 | dsc1 | 9351 | 节点 1 ASM 进程 TCP 连接的端口 |
| dmrac1 | 192.168.2.30 | 192.168.3.30 | dsc1 | 7236 | 节点 1 ASM 的 MAL 系统 TCP 连接的端口 |
| dmrac1 | 192.168.2.30 | 192.168.3.30 | dsc1 | 9236 | 节点 1 数据库实例的 MAL 系统 TCP 连接的端口 |
| dmrac2 | 192.168.2.31 | 192.168.3.31 | dsc2 | 5236 | 数据库实例 dmrw2 监听端口 |
| dmrac2 | 192.168.2.31 | 192.168.3.31 | dsc2 | 9741 | 节点 2 DCR 检查数据库实例监听端口 |
| dmrac2 | 192.168.2.31 | 192.168.3.31 | dsc2 | 9341 | 节点 2 CSS 进程 TCP 连接端口 |
| dmrac2 | 192.168.2.31 | 192.168.3.31 | dsc2 | 9351 | 节点 2 ASM 进程 TCP 连接的端口 |
| dmrac2 | 192.168.2.31 | 192.168.3.31 | dsc2 | 7236 | 节点 2 ASM 的 MAL 系统 TCP 连接的端口 |
| dmrac2 | 192.168.2.31 | 192.168.3.31 | dsc2 | 9236 | 节点 2 数据库实例的 MAL 系统 TCP 连接的端口 |
3.8.2 关闭防火墙及SELINUX
systemctl stop firewalld
systemctl disable firewalld
sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
3.9 本地yum源配置
3.9.1 中标麒麟7.6
mount /dev/sr0 /media
vi /etc/yum.repos.d/ns7-adv.repo
[ns7-adv-os]
name=NeoKylin Linux Advanced Server 7 - Os
baseurl=file:///media
gpgcheck=0
gpgkey=file:///media/RPM-GPG-KEY-neokylin-release
enabled=1
3.9.2 中标麒麟6.0
vi /etc/yum.repos.d/ns6-adv.repo
[nk6-adv-os]
name=NeoKylin Linux Advanced Server 6 - Os
baseurl=file:///media
gpgcheck=0
gpgkey=file:///media/rpm-gpg/RPM-GPG-KEY-neokylin-release
enabled=1
3.10. 必要软件包安装
yum install -y net-tools glibc-devel gtk2 lrzsz unzip libXp libXt libXtst cjkuni-uming-fonts sysstat
3.11. 配置共享存储
3.11.1 vmware workstation 创建共享磁盘
cd "c:\Program Files (x86)\VMware\VMware Workstation\"
vmware-vdiskmanager.exe -c -s 1024mb -a lsilogic -t 4 "E:\vmware\dm_sharedisk\dcr.vmdk"
vmware-vdiskmanager.exe -c -s 1024mb -a lsilogic -t 4 "E:\vmware\dm_sharedisk\vote.vmdk"
vmware-vdiskmanager.exe -c -s 10240mb -a lsilogic -t 4 "E:\vmware\dm_sharedisk\log1.vmdk"
vmware-vdiskmanager.exe -c -s 10240mb -a lsilogic -t 4 "E:\vmware\dm_sharedisk\data1.vmdk"
3.11.2 添加共享磁盘至虚拟主机
vi *.vmx
--添加以下内容
disk.locking= "FALSE"
disk.EnableUUID = "TRUE"
scsi1.virtualDev = "lsilogic"
scsi1.pciSlotNumber = "41"
scsi1.present = "TRUE"
scsi1:0.fileName = "E:\vmware\dm_sharedisk\dcr.vmdk"
scsi1:0.mode = "independent-persistent"
scsi1:0.present = "TRUE"
scsi1:1.fileName = "E:\vmware\dm_sharedisk\vote.vmdk"
scsi1:1.mode = "independent-persistent"
scsi1:1.present = "TRUE"
scsi1:2.fileName = "E:\vmware\dm_sharedisk\log1.vmdk"
scsi1:2.mode = "independent-persistent"
scsi1:2.present = "TRUE"
scsi1:3.fileName = "E:\vmware\dm_sharedisk\data1.vmdk"
scsi1:3.mode = "independent-persistent"
scsi1:3.present = "TRUE"
scsi1:3.redo = ""
scsi1:2.redo = ""
scsi1:1.redo = ""
scsi1:0.redo = ""
3.11.3 添加后查看共享磁盘
[root@dmrac2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─nlas-root 253:0 0 44G 0 lvm /
└─nlas-swap 253:1 0 5G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
sdc 8:32 0 1G 0 disk
sdd 8:48 0 10G 0 disk
sde 8:64 0 10G 0 disk
sr0 11:0 1 4G 0 rom
[root@dmrac2 ~]#
3.12. RHEL7使用UDEV绑定
[root@dmdsc1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb36000c29e1e5b62e29a5d46c2df8c47d0[root@dmdsc1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdc36000c291d4e12576610b6ef44d60ea60[root@dmdsc1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdd36000c2928e167cd6a0acfb0b27075fcc[root@dmdsc1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sde36000c29c93100dded9f542a69f4e957dcat > /etc/udev/rules.d/99-dmasm.rules <<-'EOF'KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29e1e5b62e29a5d46c2df8c47d0", SYMLINK+="dmasm/dcr",OWNER="dmdba", GROUP="dinstall",MODE="0660",OPTIONS="nowatch"KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c291d4e12576610b6ef44d60ea60", SYMLINK+="dmasm/vote",OWNER="dmdba", GROUP="dinstall",MODE="0660",OPTIONS="nowatch"KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2928e167cd6a0acfb0b27075fcc", SYMLINK+="dmasm/log",OWNER="dmdba", GROUP="dinstall",MODE="0660",OPTIONS="nowatch"KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29c93100dded9f542a69f4e957d", SYMLINK+="dmasm/data001",OWNER="dmdba", GROUP="dinstall",MODE="0660",OPTIONS="nowatch"EOF/sbin/udevadm trigger --type=devices --action=change/sbin/udevadm control --reload
log:
[root@dmdsc2 ~]# ls -l /dev/dmasm/*lrwxrwxrwx 1 root root 6 Dec 8 20:09 /dev/dmasm/data001 -> ../sdelrwxrwxrwx 1 root root 6 Dec 8 20:09 /dev/dmasm/dcr -> ../sdblrwxrwxrwx 1 root root 6 Dec 8 20:09 /dev/dmasm/log -> ../sddlrwxrwxrwx 1 root root 6 Dec 8 20:09 /dev/dmasm/vote -> ../sdc[root@dmdsc2 ~]# ls -l /dev/sd*brw-rw---- 1 root disk 8, 0 Dec 8 20:09 /dev/sdabrw-rw---- 1 root disk 8, 1 Dec 8 20:09 /dev/sda1brw-rw---- 1 root disk 8, 2 Dec 8 20:09 /dev/sda2brw-rw---- 1 dmdba dinstall 8, 16 Dec 8 20:09 /dev/sdbbrw-rw---- 1 dmdba dinstall 8, 32 Dec 8 20:09 /dev/sdcbrw-rw---- 1 dmdba dinstall 8, 48 Dec 8 20:09 /dev/sddbrw-rw---- 1 dmdba dinstall 8, 64 Dec 8 20:09 /dev/sde[root@dmdsc2 ~]#




