DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。数据文件、控制件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件,这些文件保存在共享存储上。每个节点有自己独立的联机日志和归档日志,联机日志和归档日志都需要保存在共享存储上。
DMDSC 集群主要由数据库和数据库实例、共享存储、DMASM 或 DMASM 镜像、本地存储、通信网络、集群控制软件 DMCSS、集群监视器 DMCSSM 组成。DMDSC 集群最多支持 8 个数据库实例节点。下图展示了一个两节点的 DMDSC 集群系统结构图。
进行部署前首先进行硬件环境检查,存储空间需要能够满足最低安装要求。
操作系统检查:uname -a
cpu架构检查:lscpu
网络环境:使用千兆或千兆以上的网络,并做网卡绑定,给各节点配置两个网卡分别用作公共IP和心跳IP。
关注点 查询方式
操作系统版本 cat /etc/os-release
数据库版本标识 查看软件授权许可证
集群部署前进行集群规划、本地磁盘规划、共享磁盘规划。
生产环境应建议将规划的端口加入白名单并开启防火墙,本次部署供本地测试使用,因此选择关闭防火墙。
# 关闭防火墙
systemctl stop firewalld.service
# 关闭防火墙开机自启动
systemctl disable firewalld.service
# 防火墙状态查看
systemctl status firewalld.service
SELinux 组件可用来加强系统安全性。在 Linux 中,SELinux 凌驾于 root 权限之上,设置了很多额外的配置项。建议关闭SELinux。可在root用户下执行以下操作:
(1)临时操作:
# 临时关闭 SELinux:
setenforce 0
# 临时开启 SELinux:
setenforce 1
# 查看当前状态命令:
getenforce
(2)永久修改:(重启后永久生效)
# 修改 SELINUX=disabled
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
getenforce
cat /etc/selinux/config
编辑 grub 文件,在GRUB_CMDLINE_LINUX参数末尾添加:transparent_hugepage=never numa=off
# 编辑 grub 文件,在GRUB_CMDLINE_LINUX参数末尾添加:transparent_hugepage=never numa=off
sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub
# 重新生成 /etc/grub2.cfg 配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg
重启虚拟机
# 重启操作系统
reboot
重启后检查是否生效:
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /proc/cmdline
注意:关闭 透明大页 和 numa 的配置,需要重启主机生效!
在 Linux、Solaris、AIX 和 HP-UNIX 等系统中,操作系统默认会对程序使用资源进行限制。如果不取消对应的限制,则数据库的性能将会受到影响。
# 查询当前系统资源限制
ulimit -a
配置limits.conf:
root用户下打开 /etc/security/limits.conf 文件进行修改
vi /etc/security/limits.conf
在最后需要添加如下配置:(修改配置文件后需要重启服务器才能生效)
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/目录下是否有其他限制资源的配置文件,如果有也进行配置修改:
cd /etc/security/limits.d/
ls
vim /etc/security/limits.d/20-nproc.conf
在文件最后添加如下配置:
dmdba soft nproc 65536
dmdba hard nproc 65536
重启服务器后查看修改是否生效:
创建dmdba用户后切换到dmdba用户下验证修改是否生效:
ulimit -a
达梦数据库的稳定运行,需要将磁盘的调度算法设置为 deadline,特别是 arm 平台,必须要设置为 deadline。如存储为 nvme 等高性能的设备时,此类设备 IO 调度算法只有 none,则无需设置。
磁盘检查及修改
通过lsblk查询出数据文件存储的数据盘,本测试环境将数据存储在系统盘sda中,则检查 sda 磁盘的调度算法:
lsblk
cat /sys/block/sda/queue/scheduler
[]中的即为当前生效的磁盘调度算法,如果调度算法不是[deadline],则需要进行修改:
grubby --update-kernel=ALL --args="elevator=deadline"
# 重启生效
reboot
# 核实磁盘调度算法
cat /sys/block/sda/queue/scheduler
# 修改内核参数
vim /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/coredump/core.%e_%p_%t
kernel.core_uses_pid = 0
vm.swappiness=10
vm.dirty_background_ratio = 0
vm.min_free_kbytes = 512000
vm.overcommit_memory=0
# 执行生效
sysctl -p
为避免arena分配区开辟过多造成内存损耗,在安装部署时需设置环境变量来限制arena的最大数量,将其写入到dmdba环境变量设置中。
vim /etc/profile
# 加入以下内容:
export MALLOC_ARENA_MAX=1
(1)创建用户所在的组
# 用户组和用户的编号可以自定义,确保全流程配置一致即可,用户名为 dmdba 默认用户,建议不要改
groupadd dinstall -g 2001
(2)创建用户
useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
(3)修改用户密码
# 创建完成后,修改dmdba用户密码
方法一:passwd dmdba(命令行输入密码,安全性高,建议生产环境操作)
方法二:echo "admin" |passwd dmdba --stdin(通过shell直接进行密码修改,密码在终端可见)
(4)创建目录
mkdir -p /dmdata/data
mkdir -p /dmdata/arch
mkdir -p /dmdata/dmbak
mkdir -p /dmdata/sqllog
mkdir -p /dmdata/coredump
mkdir -p /dmdata/config
# 变更目录用户及组
chown -R dmdba:dinstall /dmdata/data
chown -R dmdba:dinstall /dmdata/arch
chown -R dmdba:dinstall /dmdata/dmbak
chown -R dmdba:dinstall /dmdata/sqllog
chown -R dmdba:dinstall /dmdata/coredump
chown -R dmdba:dinstall /dmdata/config
# 更改权限
chmod -R 755 /dmdata/data
chmod -R 755 /dmdata/arch
chmod -R 755 /dmdata/dmbak
chmod -R 755 /dmdata/sqllog
chmod -R 755 /dmdata/coredump
chmod -R 755 /dmdata/config
共享存储网络搭建工作在实际生产环境中一般由存储设备厂商完成,自己搭建测试环境可以使用VMware来创建一个或者多个共享磁盘,然后两台服务器都能访问到这些磁盘,具体操作如下,以下用两种方法创建共享磁盘,并且针对不同的创建方法使用了不同的块设备UUID绑定方法,实际搭建过程中选取其中之一即可:
方法一:只创建一块磁盘的情况下:
未创建共享磁盘的情况下,进入本地虚拟机安装目录下输入cmd进入命令行窗口,使用命令行工具 vmware-vdiskmanager.exe创建一个新的虚拟磁盘(VMDK 文件):
#asm-share 只创建一块共享磁盘,后续再进行分区:
# asm-share 只创建一块共享磁盘,后续再进行分区
"D:\Programs\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 50GB -a lsilogic -t 2 "D:\VMware\Virtual Machines\dsc-disk\dsc-share.vmdk"
在本地测试环境可以直接创建一个共享磁盘进行磁盘分区:
fdisk /dev/sdb
依次创建20G、10G、10G、10G共50G的磁盘:
更新磁盘信息:
#刷新分区表,通知操作系统重新读取分区表
partprobe /dev/sdb
#查看磁盘分区
lsblk
dmdsc02要重启才能看到磁盘分区信息。
# 查看设备信息,查看每个磁盘分区的SCSI
ls -l /dev/disk/by-id/ | grep sdb
方法二:直接创建五个共享磁盘用作不同用途的情况下:分作为数据磁盘、DCR磁盘、VOTE磁盘、REDO日志磁盘、归档日志磁盘:
#直接创建五个共享磁盘用作不同用途分作为数据磁盘、DCR磁盘、VOTE磁盘、REDO日志磁盘、归档日志磁盘:
# asm-data
"D:\Programs\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 20GB -a lsilogic -t 2 "D:\VMware\Virtual Machines\dsc-disk\dsc-data.vmdk"
# asm-arch
"D:\Programs\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 10GB -a lsilogic -t 2 "D:\VMware\Virtual Machines\dsc-disk\dsc-arch.vmdk"
# asm-redo
"D:\Programs\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 5GB -a lsilogic -t 2 "D:\VMware\Virtual Machines\dsc-disk\dsc-redo.vmdk"
# asm-vote
"D:\Programs\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 2GB -a lsilogic -t 2 "D:\VMware\Virtual Machines\dsc-disk\dsc-vote.vmdk"
# asm-dcr
"D:\Programs\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 2GB -a lsilogic -t 2 "D:\VMware\Virtual Machines\dsc-disk\dsc-dcr.vmdk"
给两个节点的主机按照以下的相同步骤添加共享磁盘:
分别在两台虚拟机的安装路径下,找到.vmx后缀的文件,打开后添加以下内容:(disk.locking用于解锁磁盘锁定,disk.EnableUUID用于启用磁盘uuid,必须添加,否则重启虚拟机操作系统时会提示磁盘被锁定)
disk.EnableUUID = "TRUE" # 启用虚拟磁盘的 UUID(通用唯一标识符)功能,增强磁盘识别的可靠性,尤其在磁盘被复制、迁移、备份恢复等场景中。
disk.locking = "FALSE" # 禁用磁盘锁定机制
添加完成后启动虚拟机用lsblk命令可以查看到添加的共享磁盘:
以下两节为使用不同方法进行块设备UUID绑定,选择其中一种方法即可
节点1和节点2都需要执行以下语句:
# 安装multipath
yum install -y device-mapper*
mpathconf --enable --with_multipathd y
# 查看共享盘的scsi_id
/usr/lib/udev/scsi_id -g -u /dev/sdb
/usr/lib/udev/scsi_id -g -u /dev/sdc
/usr/lib/udev/scsi_id -g -u /dev/sdd
/usr/lib/udev/scsi_id -g -u /dev/sde
/usr/lib/udev/scsi_id -g -u /dev/sdf
# 配置多路径:写入 /etc/multipath.conf文件
cat <<EOF>/etc/multipath.conf
defaults {
user_friendly_names yes
}
blacklist {
devnode "^sda"
}
multipaths {
multipath {
wwid "36000c29ae434197a70868190983a703c"
alias asm-dmdata
}
multipath {
wwid "36000c29c80e76fd47bb26a6d636f5996"
alias asm-dmarch
}
multipath {
wwid "36000c29c6f2194d4a1ddb9407f433cda"
alias asm-dmlog
}
multipath {
wwid "36000c293515cc30d831fcf283ba31636"
alias asm-dmdcr
}
multipath {
wwid "36000c29ba88599df2c091e601f14cab6"
alias asm-dmvote
}
}
EOF
# 配置生效并查看结果
multipath -F
multipath -v2
multipath -ll
# 块设备uuid绑定
vi mpath.sh
cat mpath.sh
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
for i in mpatha mpathb mpathc mpathd mpathe;
do
str1="$i:`udevadm info --query=all --name=/dev/mapper/$i | grep DM_UUID`"
str2=${str1#*=}
echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${str2}\",SYMLINK+=\"asm-${i}\",OWNER=\"dmdba\",GROUP=\"dinstall\",MODE=\"0660\"" >>/etc/udev/rules.d/88-dm-asmdevices.rules
done
chmod +x mpath.sh
sh ./mpath.sh
# 脚本执行成功后,会生成绑定配置文件 88-dm-asmdevices.rules,可以根据自己的需求进行修改别名 SYMLINK
vi /etc/udev/rules.d/88-dm-asmdevices.rules
# 重载udev
(1)重启机器,建议使用该方法。
(2)如果无法重启,执行下述命令:
udevadm control --reload-rules
systemctl restart systemd-udev-trigger.service
ll /dev/mapper/asm-*
# 授权给dmdba用户
chown -R dmdba:dinstall /dev/mapper/asm-*
chown -R dmdba:dinstall /dev/asm-*
# 验证共享磁盘映射是否生效
blockdev --getsize64 /dev/asm-dmdcr
blockdev --getsize64 /dev/asm-dmvote
blockdev --getsize64 /dev/asm-dmlog
blockdev --getsize64 /dev/asm-dmdata
blockdev --getsize64 /dev/asm-dmarch
vi /etc/udev/rules.d/70-persistent-ipoib.rules
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"
# 执行以下命令,使udv生效:
# 重新加载 udev 规则,或者重启操作系统
udevadm control --reload-rules
# 模拟设备变更,让设备重新应用新的驱动配置
udevadm trigger --type=devices --action=change
partprobe
# 执行以下命令,检查配置是否成功:
ll /dev/raw/raw*
# 查看设备大小(以字节为单位除两次1024就能算出MB)
blockdev --getsize64 /dev/raw/raw1
blockdev --getsize64 /dev/raw/raw2
blockdev --getsize64 /dev/raw/raw3
blockdev --getsize64 /dev/raw/raw4
参考单机安装部署教程给各个节点进行数据库安装,此处不需要进行实例初始化。
将所有的配置文件都放在/dmdata/config目录下:
# 配置dmdcr_cfg.ini
# 节点一 节点二:
vi /dmdata/config/dmdcr_cfg.ini
DCR_N_GRP = 3 # 集群环境有多少个 GROUP,范围:(表示有三个组需要配置:CSS, ASM 和 DB)
DCR_VTD_PATH = /dev/mapper/asm-dmvote # 规划为 vote 的磁盘 即投票磁盘路径(存储集群成员状态、心跳信息和控制指令)
DCR_OGUID = 250928 # 消息标识,一个组里面只有一个 全局唯一标识符
# CSS组(集群同步服务)负责实例间心跳检测和状态同步,每个节点都有自己的名称、IP 地址和端口号
[GRP] #新建一个 GROUP
DCR_GRP_TYPE = CSS # 组类型(CSS/ASM/DB)
DCR_GRP_NAME = GRP_CSS # 组名
DCR_GRP_N_EP = 2 # 组内节点个数
DCR_GRP_DSKCHK_CNT = 65 # 磁盘心跳容错时间(磁盘检查计数),单位:秒 (若某节点在 DCR_GRP_DSKCHK_CNT(默认60秒)内未更新心跳,DMCSS标记其为故障节点,触发故障转移)
[GRP_CSS]
DCR_EP_NAME = CSS0 # CSS 节点名
DCR_EP_HOST = 192.168.40.164 # 节点IP地址(心跳地址)
DCR_EP_PORT = 11286 # CSS 端口
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.40.163
DCR_EP_PORT = 11286
# ASM组(存储管理组)管理共享存储设备,DCR_EP_SHM_KEY两个节点不能一样,DCR_EP_PORT不同节点可以用一样的
[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 # ASM 节点名,和 dmasvrmal 的 MAL_INST_NAME 一致
DCR_EP_SHM_KEY = 42424 # 共享内存标识(节点间共享内存通信的系统标识符)
DCR_EP_SHM_SIZE = 1024 # 共享内存大小
DCR_EP_HOST = 192.168.40.164 # 节点IP地址(心跳地址)
DCR_EP_PORT = 11276 # ASM 端口
DCR_EP_ASM_LOAD_PATH = /dev/mapper # ASM加载路径
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 42425
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.40.163
DCR_EP_PORT = 11277
DCR_EP_ASM_LOAD_PATH = /dev/mapper
#DB (Database Instance) 数据库实例组
[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 # 实例名,和 dm.ini 的 INSTANCE_NAME 一致
DCR_EP_SEQNO = 0 # 组内序号,不能重复
DCR_EP_PORT = 5236 # 实例端口,和 dm.ini 的 PORT_NUM 一致
DCR_CHECK_PORT = 11256 # DCR 检查端口
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 11257
在其中一个节点上启动dmasmcmd工具,进行初始化磁盘组:
# 初始化磁盘组
# 节点一
/home/dmdba/dmdbms/bin/dmasmcmd
# 创建一个专用的 DCR 磁盘(用于保存集群元数据)
create dcrdisk '/dev/mapper/asm-dmdcr' 'dcr'
# 投票磁盘(Voting Disk),用于集群成员仲裁
create votedisk '/dev/mapper/asm-dmvote' 'vote'
# 普通 ASM 数据磁盘
create asmdisk '/dev/mapper/asm-dmlog' 'LOG0'
create asmdisk '/dev/mapper/asm-dmdata' 'DATA0'
create asmdisk '/dev/mapper/asm-dmarch' 'ARCH0'
# 将 dcr 磁盘格式化为集群注册表磁盘,使用 dmdcr_cfg.ini 文件中的配置初始化
# 注意配置文件的路径/dmdba/config/dmdcr_cfg.ini,密码要有大小写和特殊符号且>=8位
init dcrdisk '/dev/mapper/asm-dmdcr' from '/dmdata/config/dmdcr_cfg.ini' identified by 'DmDCRDISK@123'
# 将投票磁盘初始化,用于集群心跳仲裁
init votedisk '/dev/mapper/asm-dmvote' from '/dmdata/config/dmdcr_cfg.ini'
# 查询磁盘组情况
listdisks /dev/mapper/
新建dmasvrmal.ini配置文件,两个节点都要配置,内容完全一样,保存到/dmdbms/config目录下
# 节点一 节点二:
vi /dmdata/config/dmasvrmal.ini
[MAL_INST1]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.40.164 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
[MAL_INST2]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.40.163
MAL_PORT = 11266
DMASM的两个节点分别配置dmdcr.ini,
dmdcr_path相同,dmmal.ini文件内容也相同,dmdcr_seqo分别为0和1。
注:配置过程中dmdcr.ini中先不将ASM服务和DMSERVER自动拉起,配置过程中先手动启动DMCSS、DMASM、DMSERVER服务,待所有配置都完成后,再修改dmdcr.ini将ASM服务和DMSERVER服务配置成自动拉起。
# 节点一
vi /dmdata/config/dmdcr.ini
DMDCR_PATH = /dev/mapper/asm-dmdcr
DMDCR_MAL_PATH =/dmdata/config/dmasvrmal.ini
DMDCR_SEQNO = 0
#DMDCR_ASM_RESTART_INTERVAL = 30
#DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/dmdata/config/dmdcr.ini
#DMDCR_DB_RESTART_INTERVAL = 60
#DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver PATH=/dmdata/config/dsc0_config/dm.ini DCR_INI=/dmdata/config/dmdcr.ini
# 节点二
vi /dmdata/config/dmdcr.ini
DMDCR_PATH = /dev/mapper/asm-dmdcr
DMDCR_MAL_PATH =/dmdata/config/dmasvrmal.ini
DMDCR_SEQNO = 1
#DMDCR_ASM_RESTART_INTERVAL = 30
#DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/dmdata/config/dmdcr.ini
#DMDCR_DB_RESTART_INTERVAL = 60
#DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver PATH=/dmdata/config/dsc1_config/dm.ini DCR_INI=/dmdata/config/dmdcr.ini
在两节点分别前台启动dmcss、dmasmsvr程序,方便查看启动信息。
# 启动 DMCSS、DMASM 服务
# 在 2 个节点分别启动 dmcss 命令:
# 节点一
/home/dmdba/dmdbms/bin/dmcss DCR_INI=/dmdata/config/dmdcr.ini
# 节点二
/home/dmdba/dmdbms/bin/dmcss DCR_INI=/dmdata/config/dmdcr.ini
# 在 2 个节点分别启动 dmasmsvr 命令:
# 说明:如果 DMCSS 配置有自动拉起 dmasmsvr 的功能,可以等待 DMCSS 自动拉起 dmasmsvr 程序,不需要手动启动。
# 节点一
/home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/dmdata/config/dmdcr.ini
# 节点二
/home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/dmdata/config/dmdcr.ini
选择ASM的主节点(一般是先启动ASM服务的节点),启动dmasmtool工具,输入下列语句创建DMASM磁盘组:
# 创建 DMASM 磁盘组
# 选择ASM的主节点(一般是先启动ASM服务的节点),启动dmasmtool工具,输入下列语句创建DMASM磁盘组:
# 节点一:
/home/dmdba/dmdbms/bin/dmasmtool DCR_INI=/dmdata/config/dmdcr.ini
# 创建日志磁盘组
create diskgroup 'DMLOG' asmdisk '/dev/mapper/asm-dmlog'
# 创建数据磁盘组
create diskgroup 'DMDATA' asmdisk '/dev/mapper/asm-dmdata'
# 创建归档磁盘组
create diskgroup 'DMARCH' asmdisk '/dev/mapper/asm-dmarch'
准备dminit.ini配置文件,保存到/dmdata/config目录,根据实际情况设置初始化参数
# 配置dminit.ini文件 初始化 DB 环境
# 准备dminit.ini配置文件,保存到/dmdata/config目录,根据实际情况设置初始化参数,如页大小等,此处REDO日志设置为1024M,后面可以根据需要在管理工具中扩展或添加REDO日志。
vi /dmdata/config/dminit.ini
DB_NAME = DMDBS
SYSDBA_PWD = DmSYSDBA@123_1
SYSAUDITOR_PWD = DmSYSAUDITOR@123_1
SYSTEM_PATH = +DMDATA/data
SYSTEM = +DMDATA/data/SYSTEM.dbf
SYSTEM_SIZE = 1024
ROLL = +DMDATA/data/ROLL.dbf
ROLL_SIZE = 1024
MAIN = +DMDATA/data/MAIN.dbf
MAIN_SIZE = 1024
CTL_PATH = +DMDATA/data/dm.ctl
CTL_SIZE = 8
LOG_SIZE = 256
DCR_PATH = /dev/mapper/asm-dmdcr
DCR_SEQNO = 0
AUTO_OVERWRITE = 1
PAGE_SIZE = 32
EXTENT_SIZE = 32
BLANK_PAD_MODE = 1
[DSC0]
CONFIG_PATH = /dmdata/config/dsc0_config
PORT_NUM = 5236
MAL_HOST = 192.168.40.164
MAL_PORT = 11246
LOG_PATH = +DMLOG/DSC0_LOG01.log
LOG_PATH = +DMLOG/DSC0_LOG02.log
[DSC1]
CONFIG_PATH = /dmdata/config/dsc1_config
PORT_NUM = 5236
MAL_HOST = 192.168.40.163
MAL_PORT = 11246
LOG_PATH = +DMLOG/DSC1_LOG01.log
LOG_PATH = +DMLOG/DSC1_LOG02.log
选择一个节点,启动dminit工具初始化数据库。dminit执行完成后,会在config_path目录(/dmdata/config/dsc0_config和/dmdata/config/dsc1_config)下生成配置文件dm.ini和dmmal.ini。
# 节点一:
cd /home/dmdba/dmdbms/bin/
./dminit control=/dmdata/config/dminit.ini
初始化数据库完成之后,将节点一上生成的dsc1_config文件拷贝到节点二的/dmdata目录下,然后将节点一上/dmdata/目录下的dsc1_config文件夹删除掉。
# 拷贝文件到节点二
scp -r /dmdata/config/dsc1_config dmdba@192.168.40.163:/dmdata/config/
# 删除节点一上的 dsc1_config 文件夹
rm -rf /dmdata/config/dsc1_config
先将两个节点上的dm.ini中的ARCH_INI设置为1,然后配置dmarch.ini文件
节点一:放在/dmdata/config/dsc0_config目录下
# 节点一:
vi /dmdata/config/dsc0_config/dm.ini
ARCH_INI= 1
# 创建 dmarch.ini
vi /dmdata/config/dsc0_config/dmarch.ini
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC0/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
节点二:放在/dmdata/config/dsc1_config目录下
# 节点二:
vi /dmdata/config/dsc1_config/dm.ini
ARCH_INI= 1
# 创建 dmarch.ini
vi /dmdata/config/dsc1_config/dmarch.ini
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC0/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
修改dm.ini的配置参数,在DSC的其中一个节点执行dm8参数自动优化脚本(AutoParaAdj2.6脚本),然后重启两个节点的数据库服务即可。
如果 DMCSS 配置有自动拉起 dmserver 的功能,可以等待 DMCSS 自动拉起实例,不需要手动启动。如果需要手动启动,可参考以下步骤:
节点一:
# 节点一:
cd /home/dmdba/dmdbms/bin/
./dmserver /dmdata/config/dsc0_config/dm.ini dcr_ini=/dmdata/config/dmdcr.ini
# or
/home/dmdba/dmdbms/bin/dmserver /dmdata/config/dsc0_config/dm.ini dcr_ini=/dmdata/config/dmdcr.ini
节点二:
# 节点二:
cd /home/dmdba/dmdbms/bin/
./dmserver /dmdata/config/dsc1_config/dm.ini dcr_ini=/dmdata/config/dmdcr.ini
# or
/home/dmdba/dmdbms/bin/dmserver /dmdata/config/dsc1_config/dm.ini dcr_ini=/dmdata/config/dmdcr.ini
注册 CSS、ASM、DMSERVER 后台服务,集群节点两边各自创建 CSS/ASM/DSC 三个服务:
# 节点一:
# 创建 CSS 服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dmdata/config/dmdcr.ini -p CSS
# 创建 ASM 服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dmdata/config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
# 创建 DSC 服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dmdata/config/dsc0_config/dm.ini -dcr_ini /dmdata/config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC
# 节点二:
# 创建 CSS 服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dmdata/config/dmdcr.ini -p CSS
# 创建 ASM 服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dmdata/config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
# 创建 DSC 服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dmdata/config/dsc1_config/dm.ini -dcr_ini /dmdata/config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC
# 启动CSS/ASM/DSC 三个服务
DmCSSServiceCSS start
DmASMSvrServiceASM start
DmServiceDSC start
将一开始配置的dmdcr.ini文件里注释的有关dmcss服务拉起dmasm服务和dmserver服务的参数重新加入进文件,即修改两个节点上的dmdcr.ini文件,让dmcss自动拉起dmasm和dmserver服务,这样只需要分别在两台机器上启动dmcss服务即可拉起dmasm服务和dmserver服务
# 节点一
vi /dmdata/config/dmdcr.ini
DMDCR_PATH = /dev/mapper/asm-dmdcr
DMDCR_MAL_PATH =/dmdata/config/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_ASM_RESTART_INTERVAL = 30
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/dmdata/config/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 60
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver PATH=/dmdata/config/dsc0_config/dm.ini DCR_INI=/dmdata/config/dmdcr.ini
# 节点二
vi /dmdata/config/dmdcr.ini
DMDCR_PATH = /dev/mapper/asm-dmdcr
DMDCR_MAL_PATH =/dmdata/config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_ASM_RESTART_INTERVAL = 30
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/dmdata/config/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL = 60
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver PATH=/dmdata/config/dsc1_config/dm.ini DCR_INI=/dmdata/config/dmdcr.ini
首先按照一定顺序退出手动启动的集群服务:先将两个节点上启动的dmserver服务正常退出,再将两个节点上启动的dmasm、dmcss服务正常退出,退出顺序是先退出dmasm
确认两个节点上dmcss、dmasm、dmserver都已经正常退出再重启dscf服务
# 关闭集群
# 必须严格按照以下顺序停止DMDSC集群,每个操作步骤直接的时间间隔不要超过30秒
# 注:正常停库时必须2节点同时停止,根据目前脚本配置,CSS启动后30秒自动拉起DmASMSvrServiceASM,ASM启动后1分钟自动拉起DmService,
# 所以停止DmService和DmASMSvrServiceASM后要尽快停止下一个服务,避免被自动拉起,
# 同时DmASMSvrServiceASM服务在任意一个节点停止会停2个节点的ASM服务,为了保险起见也可以两边都停止下,全部停止后要观察后台进程是否全部停止。
# 节点一 节点二:
cd /home/dmdba/dmdbms/bin/
./DmServiceDSC stop
./DmASMSvrServiceASM stop
./DmCSSServiceCSS stop
# 在两个节点上分别执行./DmCSSServiceCSS start命令启动DSC集群
./DmCSSServiceCSS start
必须设置定时备份,设置了归档日志空间限制的情况下,保留下来的归档日志必须能够覆盖到两次完全备份中间的时间间隔。
DSC目前只支持备份集的方式备份,不支持代理里面的备份数据库,需要自己写存储过程后用代理执行,是否压缩可以自行选择。
create or replace PROCEDURE proc_bak_full
as
declare backpath varchar(1000);
sql_bak varchar(200);
date_name varchar(20);
begin
select TO_CHAR(sysdate, 'yyyymmddhhmiss') into date_name from dual;
backpath := '/home/dmdba/dmdbms/remote_bak/'||'full_bak_'||date_name;
sql_bak := 'backup database full backupset'||' '''||''|| backpath||''' ';
print sql_bak;
execute immediate(sql_bak);
--backup database full backupset backpath;
commit;
end;
(1) 启动DMDSC 集群
# 节点一:
cd /home/dmdba/dmdbms/bin/
./DmCSSService start
# 节点二:
cd /home/dmdba/dmdbms/bin/
./DmCSSService start
注:正常启动时必须2节点的服务同时启动,根据目前脚本配置,CSS启动后30秒自动拉起DmASMSvrService,ASM启动后1分钟自动拉起DmService,可以通过进程查看,3个服务都启动后DSC可以正常访问。
(2) 关闭DMDSC 集群
# 必须严格按照以下顺序停止DMDSC集群,每个操作步骤直接的时间间隔不要超过30秒
cd /home/dmdba/dmdbms/bin/
# 节点一:
./DmService stop
# 节点二:
./DmService stop
# 节点一:
./DmASMSvrService stop
# 节点二:
./DmASMSvrService stop
# 节点一:
./DmCSSService stop
# 节点二:
./DmCSSService stop
在第三台独立的机器上配置监视器,查看DMDSC集群的整体运行情况,编辑一个dmcssm.ini文件,放在数据库安装目录的bin目录下,内容如下:
vi /home/dmdba/dmdbms/bin/dmcssm.ini
CSSM_OGUID = 250928
CSSM_CSS_IP = 192.168.40.164:11286
CSSM_CSS_IP = 192.168.40.163:11286
CSSM_LOG_PATH = ../log
CSSM_LOG_FILE_SIZE = 512
CSSM_LOG_SPACE_LIMIT = 2048
前台启动监视器
cd /home/dmdba/dmdbms/bin/
./dmcssm ini_path=dmcssm.ini
创建监视器后台服务
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmcssm -cssm_ini /home/dmdba/dmdbms/bin/dmcssm.ini -p CSSM
chown -R dmdba:dinstall /home/dmdba/dmdbms
service DmCSSMonitorServiceCSSM start
# 通过查看/home/dmdba/dmdbms/log 下的 cssmXXX.log 日志查看监视器内容
DSC集群与主备集群不一样的是,DSC集群并不需要像主备集群那样用过MAL传输主库的REDO日志到从库,备库重演接收到的REDO日志进行重演实现数据同步,DSC集群个节点通过锁实现并发操作同一份数据文件因此没有主备库的观念。
本节通过在disql连接主节点的实例dsc0,创建测试表并插入数据后,观察其他节点实例dsc1能否查到对应数据。使用disql连接dsc1:
disql SYSDBA/'"DmSYSDBA@123_1"'@192.168.10.164
创建测试表TEST_DESC并插入数据:
CREATE TABLE TEST_DESC(id INT);
INSERT INTO TEST_DESC VALUES(1);
INSERT INTO TEST_DESC VALUES(2);
commit;
select * from TEST_DESC;
使用disql连接dsc2:
disql SYSDBA/'"DmSYSDBA@123_1"'@192.168.10.163
查询刚刚创建和插入了两条测试数据的TEST_DESC表:
select * from TEST_DESC;
可以看到2个节点都可以查到数据:
文章
阅读量
获赞
