1 DM共享存储集群概念(DMDSC)
1.1 DM共享存储集群概念
DMDSC集群是一个多实例、单数据库的系统,具有高可用性、高吞吐量、负载均衡等特性。
多个数据库实例可以同时访问、修改同一个数据库的数据。
用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。
数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件。
各个节点有自己独立的联机日志和归档日志,这些文件就保存在共享存储上。
DMDSC集群得以实现的重要基础就是共享存储。
DM支持的共享存储有两种:裸设备、DMASM。
类似于Oracle的RAC、ASM。
DMDSC集群主要由数据库和数据库实例、共享存储、本地存储、通信网络、以及集群控制软件DMCSS组成。
共享存储
DMDSC集群中,为了实现多个实例同时访问、修改数据,要求将数据文件、控制文件、日志文件保存在共享存储上。
DMDSC支持使用裸设备或DMASM文件系统作为共享存储。
配置DMDSC集群需要的DCR、voting
disk,也必须保存在共享存储上,目前仅支持裸设备存储DCR和voting disk。
本地存储
DMDSC集群中,本地存储用来保存配置文件记录数据库实例配置信息的dm.ini、dmarch.ini、dmmal.ini本地归档日志、远程归档日志。
通信网络
DMDSC集群中,网络分为内部网络和公共网络两个部分。
实际应用中一般还存在服务器到共享存储的网络。
内部网络用于数据库实例之间交换信息和数据,MAL链路使用的就是内部网络。
公共网络用于对外提供数据库服务,用户使用公共网络地址登录DMDSC集群,访问数据库。这里没有vip的说法。
DMASM
DM分布式文件系统(DMASM),来管理裸设备的磁盘和文件,DMASM存储管理的最小单位,AU的大小为1M,DMASM提供了基本的数据文件访问接口,可以有效降低DMDSC共享存储的维护难度,DMASM提供的主要功能包括:
①分布式管理(多台机器并发访问DMASM磁盘和文件,提供全局并发控制)
②磁盘组管理(支持创建和删除磁盘组,一个磁盘组可以包含一个或者多个DMASM磁盘;磁盘组支持在线增加DMASM磁盘,实现动态存储扩展)
③文件管理(支持创建、删除、截断文件,支持创建目录,支持动态扩展文件)
④完善、高效的访问接口(dmasmapi)
⑤通用功能的管理工具(dmasmtool)
心跳(voting disk)
DMCSS实例启动后,每间隔1秒向viting
disk指定区域写入心跳信息(包括自身的状态、时间戳等),表示DMCSS节点处于活动状态。
集群控制(DMCSS)
CSS(Cluster synchronization service)集群控制器
DMCSS就是一款集群控制软件,专门负责监控集群中各个节点的运行状态。
DMCSS主要功能包括:管理集群的启动和关闭控制节点故障处理以及管理节点重加入流程。
DMCSS控制节点通过一系列的集群指令,控制被监控对象的启动、故障处理、状态切换等。
如何选举DMCSS控制节点
DMCSS启动后向voting
disk写入信息,并读取其他DMCSS节点的信息,如果DMCSS集群中还没有活动的控制节点,则选举DMCSS控制节点。
DMCSS选举的原则有两条:
①先启动的DMCSS作为控制节点
②DMCSSS同时启动,则选择节点号小的节点为控制节点
选取监控对象控制节点
DMCSSS控制节点启动后,会为基于DMASM裸设备的DMDSC集群指定控制节点。DMCSS选取监控对象控制节点的原则有两条:
①只有一个活动节点,则设置活动节点为控制节点
②存在多个活动节点,则选择节点号小的节点为控制节点
节点故障处理与重新加入
DMCSS控制节点检测到实例故障后,首先向故障实例的voting
disk区域写入kill命令(所有实例一旦发现kill命令,无条件自杀),避免故障实例仍然处于活动他,引发脑裂,然后启动故障处理流程,不同类型实例的故障处理流程存在一些差异;如果检测到故障节点恢复,DMCSS会通知控制节点启动节点重加入流程。
2 DM共享存储集群安装前规划
1台(共享存储):4G内存,2CPU,100G,win2019,2块网卡,192.168.1.91/10.10.10.91
2台(DMDSC):4G内存,2/4CPU,100G,RHEL7.6,2块网卡,192.168.1.81/82,10.10.10.81/82
共享存储环境:
dcr disk:2g*1
voting disk:2g*1
log disk:3g*1
日志盘(10G+),生产环境日志磁盘与数据磁盘组建议分开放,建议100G
datadisk1:3g=3g*1 数据空间(100g,200g,2T内一个),数据盘不要超过2T一个
datadisk2:3g=3g*1 数据空间(100g,200g,2T内一个),数据盘不要超过2T一个
datadisk3~N…
数据库名:dmdsc
实例名:dmdsc1/dmdsc2
安装前的规划
操作系统:RHEL7.6
软件名称:达梦8数据库
时区:+0800
内存:4g
OS用户名/密码:root/rootroot,dmdba/Gz_dmdb2021
系统组:dinstall
数据库SID:dmdsc1/dmdsc2
数据库名称:dmdsc
归档文件(共享存储归档或者本地归档):
+dgdata01/data/dmdsc/dmarch1和+dgdata01/data/dmdsc/dmarch2
或者
/dm/dmarch
数据库版本:DM database server x64 v8
DM_HOME目录:/home/dmdba/dmdbms
数据库监听端口:5236
数据库字符集:GB18030
数据库用户/密码:sysdba/Gz_dmdba2021
页大小:8k
日志组:3个256M
3 DM共享存储安装与配置
生产环境禁用使用一个盘过来分多个区
3.1 安装存储服务器
配置之前在81、82、91的虚拟机配置文件中添加如下信息,然后启动虚拟机:
disk.locking=“FALSE”
disk.EnableUUID=“TRUE”
3.2 安装存储服务器
打开wind2019机器,打开控制面板–>程序和功能–>启动或关闭windows功能–>下一步–>下一步–>下一步–>勾选"文件和iscsi服务、文件存储服务、iscsi目标存储提供程序(VDS和VSS硬件提供程序)、iscsi目标服务器"
–>下一步–>下一步–>安装–>关闭
3.3 创建共享磁盘
3.3.1 创建DCR(DM Cluster Registry集群配置信息/注册表)磁盘
服务器管理器–>文件和存储服务–>iscsi–>点击"若要创建iscsi虚拟磁盘,请自动新建iscsi虚拟磁盘向导"
–>选中"D盘"
–>下一步–>名称:dcr,描述:dcrdisk–>下一步–>大小:2G,勾选"固定大小"–>下一步–>勾选"新建iscsi目标"–>下一步–>名称:dmdb–>下一步–>点击"添加"–>勾选"输入选定类型的值(类型:IP地址,值:10.10.10.91)"
–>确定–>下一步–>下一步–>创建–>关闭
3.3.2 创建votedisk磁盘
右键"新建iscsi虚拟磁盘"–>选中"D盘"–>下一步–>名称:votedisk,描述:votedisk–>下一步–>大小:2G,勾选"固定大小"–>下一步–>勾选"现有iscsi目标"–>下一步–>创建–>关闭
3.3.3 创建logdisk磁盘
右键"新建iscsi虚拟磁盘"–>选中"D盘"–>下一步–>名称:logdisk,描述:logdisk–>下一步–>大小:3G,勾选"固定大小"–>下一步–>勾选"现有iscsi目标"–>下一步–>创建–>关闭
3.3.4 创建datadisk1磁盘
右键"新建iscsi虚拟磁盘"–>选中"D盘"–>下一步–>名称:datadisk1,描述:datadisk1–>下一步–>大小:3G,勾选"固定大小"–>下一步–>勾选"现有iscsi目标"–>下一步–>创建–>关闭
3.3.5 创建datadisk2磁盘
右键"新建iscsi虚拟磁盘"–>选中"D盘"–>下一步–>名称:datadisk2,描述:datadisk2–>下一步–>大小:3G,勾选"固定大小"–>下一步–>勾选"现有iscsi目标"–>下一步–>创建–>关闭
创建完成后往下拖,选中iscsi目标下方的名称–>右键"属性"–>发起程序
–>“添加”–>勾选"输入选定类型的值",把10.10.10.81/82添加进去–>确定–>应用
3.4 配置DSC服务器连接存储
(学习和生产均用,但生产建议用光纤网络,不建议用ip iscsi)
192.168.1.81/82操作:
systemctl enable iscsi
systemctl start iscsi
ping 10.10.10.91
iscsiadm -m discovery -t st -p 10.10.10.91
10.10.10.91:3260,1 iqn.1991-05.com.microsoft:dm91-dmdb-target
192.168.1.91:3260,1 iqn.1991-05.com.microsoft:dm91-dmdb-target
iscsiadm -m node -T iqn.1991-05.com.microsoft:dm91-dmdb-target -p
10.10.10.91:3260 -l --登录第2台时会卡,重启另一台主机
开机自动挂载,如果开机不自动挂载需要将命令写入/etc/rc.local。因为默认自动挂载,重启服务可能会出现盘符漂移问题。
vim /etc/rc.local
#将命令按顺序写入到rc.local
iscsiadm -m discovery -t st -p 10.10.10.91
iscsiadm -m node -T iqn.1991-05.com.microsoft:dm91-dmdb-target -p
10.10.10.91:3260 -l
touch /var/lock/subsys/local
tail -200f /var/log/messages
cd /var/lib/iscsi/nodes/
ls -1R
iscsiadm -m session -P 3
iscsiadm -m session -P 3|grep “Attached”
3.5 配置映射ASM磁盘
fdisk -l /dev/sdf |grep “Disk /dev/sd”
fdisk -l /dev/sdg |grep “Disk /dev/sd”
fdisk -l /dev/sdh |grep “Disk /dev/sd”
fdisk -l /dev/sdi |grep “Disk /dev/sd”
fdisk -l /dev/sdj |grep “Disk /dev/sd”
cat /proc/partitions |grep sdd
for i in `cat /proc/partitions | awk ‘{print$4}’ |grep sd | grep [f-n]$`;
do echo “### $i: `/lib/udev/scsi_id --whitelisted --device=/dev/$i`”;
done
### sdf: 360003ff44dc75adcb2cc2715ed52f28f
### sdg: 360003ff44dc75adc88c552a08031a241
### sdh: 360003ff44dc75adc89af8575fae21ae8
### sdi: 360003ff44dc75adc8a19a7ca93a6e8a1
### sdj: 360003ff44dc75adc8b8fa622a23e0e2b
ls -l /dev/disk/by-id
for i in f g h i j;
do
echo “sd$i” "`/usr/lib/udev/scsi_id --whitelisted --replace-whitespace
–device=/dev/sd$i` ";
done
sdf 360003ff44dc75adcb2cc2715ed52f28f dcrdisk
sdg 360003ff44dc75adc88c552a08031a241 votedisk
sdh 360003ff44dc75adc89af8575fae21ae8 logdisk1
sdi 360003ff44dc75adc8a19a7ca93a6e8a1 datadisk1
sdj 360003ff44dc75adc8b8fa622a23e0e2 datadisk2
for i in f g h i j;
do
echo “KERNEL==\“sd?\”,SUBSYSTEM==\“block\”,
PROGRAM==\”/usr/lib/udev/scsi_id --whitelisted --replace-whitespace
–device=/dev/\$name\“,RESULT==\”`/usr/lib/udev/scsi_id --whitelisted
–replace-whitespace --device=/dev/sd$i`\“,
SYMLINK+=\“dm-disk$i\”,OWNER=\“dmdba\”,
GROUP=\“dinstall\”,MODE=\“0660\””
done
192.168.1.81/82:
vi /etc/udev/rules.d/99-dm-devices.rules
KERNEL==“sd?”,SUBSYSTEM==“block”, PROGRAM==“/usr/lib/udev/scsi_id --whitelisted
–replace-whitespace
–device=/dev/$name”,RESULT==“360003ff44dc75adcb2cc2715ed52f28f”,
SYMLINK+=“dm-dcrdisk”,OWNER=“dmdba”, GROUP=“dinstall”,MODE=“0660”
KERNEL==“sd?”,SUBSYSTEM==“block”, PROGRAM==“/usr/lib/udev/scsi_id --whitelisted
–replace-whitespace
–device=/dev/$name”,RESULT==“360003ff44dc75adc88c552a08031a241”,
SYMLINK+=“dm-votedisk”,OWNER=“dmdba”, GROUP=“dinstall”,MODE=“0660”
KERNEL==“sd?”,SUBSYSTEM==“block”, PROGRAM==“/usr/lib/udev/scsi_id --whitelisted
–replace-whitespace
–device=/dev/$name”,RESULT==“360003ff44dc75adc89af8575fae21ae8”,
SYMLINK+=“dm-logdisk1”,OWNER=“dmdba”, GROUP=“dinstall”,MODE=“0660”
KERNEL==“sd?”,SUBSYSTEM==“block”, PROGRAM==“/usr/lib/udev/scsi_id --whitelisted
–replace-whitespace
–device=/dev/$name”,RESULT==“360003ff44dc75adc8a19a7ca93a6e8a1”,
SYMLINK+=“dm-datadisk1”,OWNER=“dmdba”, GROUP=“dinstall”,MODE=“0660”
KERNEL==“sd?”,SUBSYSTEM==“block”, PROGRAM==“/usr/lib/udev/scsi_id --whitelisted
–replace-whitespace
–device=/dev/$name”,RESULT==“360003ff44dc75adc8b8fa622a23e0e2b”,
SYMLINK+=“dm-datadisk2”,OWNER=“dmdba”, GROUP=“dinstall”,MODE=“0660”
/sbin/udevadm control --reload-rules
/sbin/udevadm trigger --type=devices --action=change
ls -lsa /dev/dm*
ls -lsa /dev/sd* --权限是dmdba:dinstall
[root@dm81 ~]# ls -lsa /dev/dm*
0 lrwxrwxrwx 1 root root 3 May 16 20:21 /dev/dm-datadisk1 -> sdm
0 lrwxrwxrwx 1 root root 3 May 16 20:21 /dev/dm-datadisk2 -> sdn
0 lrwxrwxrwx 1 root root 3 May 16 20:21 /dev/dm-logdisk1 -> sdl
0 lrwxrwxrwx 1 root root 3 May 16 20:21 /dev/dm-dcrdisk -> sdf
0 lrwxrwxrwx 1 root root 3 May 16 20:21 /dev/dm-votedisk -> sdi
ls -lsa /dev/sd*
3.6 配置raw设备
在官方文档raw的配置是写入到/etc/udev/rules.d/60-raw.rules文件(如果不绑定UUID,容易乱盘),但因为我们之前配置了UDEV规则,所有我么这里把raw配置写入到/etc/rc.local中,以防映射失败。
------------------------官方的要求------------------------------
vi /etc/udev/rules.d/60-raw.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”
注意:
(1)部署前要规划好磁盘的大小,一般dcr和vote盘都变化不大,固定100M-200M即可。log磁盘预算每个节点4组,每组2g大小,假如是两节点dsc,预计分配20g足够。其余磁盘空间都可以分配给数据盘。
(2)磁盘的权限必须用户是dmdba,属主是dinstall。
(3)以上裸设备的绑定方式,要根据实际情况而定。
两个节点上都运行以下两条语句,完成裸设备的绑定:
partprobe /dev/sdb
/sbin/udevadm trigger --type=devices --action=change
ls -lsa /dev/dm*
0 lrwxrwxrwx 1 root root 3 May 24 21:48 /dev/dm-dcrdisk -> sdf
0 lrwxrwxrwx 1 root root 3 May 24 21:48 /dev/dm-votedisk -> sdg
0 lrwxrwxrwx 1 root root 3 May 24 21:48 /dev/dm-logdisk1 -> sdh
0 lrwxrwxrwx 1 root root 3 May 24 21:48 /dev/dm-datadisk1 -> sdi
0 lrwxrwxrwx 1 root root 3 May 24 21:48 /dev/dm-datadisk2 -> sdj
本课程:
192.168.1.81/82:
vi /etc/rc.d/rc.local
sleep 1
#dcrdisk
raw /dev/raw/raw1 /dev/dm-dcrdisk
#votingdisk
raw /dev/raw/raw2 /dev/dm-votedisk
#logdisk
raw /dev/raw/raw3 /dev/dm-logdisk1
#datadisk
raw /dev/raw/raw4 /dev/dm-datadisk1
raw /dev/raw/raw5 /dev/dm-datadisk2
sleep 2
#chown+chmod
chown dmdba:dinstall /dev/raw/raw1
chown dmdba:dinstall /dev/raw/raw2
chown dmdba:dinstall /dev/raw/raw3
chown dmdba:dinstall /dev/raw/raw4
chown dmdba:dinstall /dev/raw/raw5
chmod 660 /dev/raw/raw1
chmod 660 /dev/raw/raw2
chmod 660 /dev/raw/raw3
chmod 660 /dev/raw/raw4
chmod 660 /dev/raw/raw5
#touch /var/lock/subsys/local
#注意这里必须放在最后一行,否则开机不会自动映射raw设备。
chmod u+x /etc/rc.d/rc.local
reboot --有个节点会卡住一会。或者配置多路径就不会产生卡主
ls -lsa /dev/raw/raw*
raw -qa --如果找不到要手工连接
/dev/raw/raw1: bound to major 8, minor 80
/dev/raw/raw2: bound to major 8, minor 96
/dev/raw/raw3: bound to major 8, minor 112
/dev/raw/raw4: bound to major 8, minor 128
/dev/raw/raw5: bound to major 8, minor 144
blockdev --getsize64 /dev/raw/raw1
blockdev --getsize64 /dev/raw/raw2
blockdev --getsize64 /dev/raw/raw3
blockdev --getsize64 /dev/raw/raw4
blockdev --getsize64 /dev/raw/raw5
4 DM共享存储集群安装配置
4.2 上传安装程序
192.168.1.81/82:
root:
umount /mnt
mount -o loop /root/dm8_setup_rh7_64_ent_8.1.1.48_20191129.iso /mnt
4.2 命令行安装过程
192.168.1.81/82:
su - dmdba
cd /mnt
./DMInstall.bin -i
root执行脚本:/home/dmdba/dmdbms/script/root/root_installer.sh
安装完成不要创建实例
4.3 配置dmdcr_cfg.ini文件
DCR(DM Cluster Registry集群配置信息/注册表)
使用dmdba用户,进行编辑配置文件
准备配置文件dmdcr_cfg.ini,保存在/home/dmdba/dmdbms/data/dmdcr_cfg.ini下
192.168.1.81/82:
su - dmdba
mkdir /home/dmdba/dmdbms/data/
vi /home/dmdba/dmdbms/data/dmdcr_cfg.ini
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/raw/raw2 #vote盘,是第2个裸设备
DCR_OGUID = 63635
[GRP] #[GRP]表示新建一个Group
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = dmcss
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[dmcss] #[]里的是组名,与DCR_GRP_NAME对应
DCR_EP_NAME = dmcss1
DCR_EP_HOST = 10.10.10.81
DCR_EP_PORT = 9541
[dmcss] #[]里的是组名,与DCR_GRP_NAME对应
DCR_EP_NAME = dmcss2
DCR_EP_HOST = 10.10.10.82
DCR_EP_PORT = 9542
[GRP] #[GRP]表示新建一个Group
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = dmasm
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[dmasm] #[]里的是组名,与DCR_GRP_NAME对应
DCR_EP_NAME = dmasm1
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 10 #最小10,最大1024
DCR_EP_HOST = 10.10.10.81
DCR_EP_PORT = 9641
DCR_EP_ASM_LOAD_PATH = /dev/raw
[dmasm] #[]里的是组名,与DCR_GRP_NAME对应
DCR_EP_NAME = dmasm2
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 10.10.10.82
DCR_EP_PORT = 9642
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP] #[GRP]表示新建一个Group
DCR_GRP_TYPE = DB
DCR_GRP_NAME = dmdsc #数据库名,要根据业务去改
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[dmdsc] #[]里的是组名,与DCR_GRP_NAME对应
DCR_EP_NAME = dmdsc1 #实例名
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5236 #注意这个配置参数,为数据库端口号
DCR_CHECK_PORT = 9741
[dmdsc]
DCR_EP_NAME = dmdsc2 #实例名
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236 #注意这个配置参数,为数据库端口号
DCR_CHECK_PORT = 9742
4.4 使用DMASMCMD工具初始化
在任意一台节点上用dmasmcmd工具执行如下命令:
su - dmdba
[dmdba@dm81 ~]$ dmasmcmd
DMASMCMD V8
ASM>
listdisks ‘/dev/raw/’
校验DCR磁盘:
–check dcrdisk ‘/dev/raw/raw1’
导出dcr的配置文件:
–export dcrdisk ‘/dev/raw/raw1’ to ‘/tmp/dmdcr_cfg.ini’
create dcrdisk ‘/dev/raw/raw1’ ‘dcr’
create votedisk ‘/dev/raw/raw2’ ‘vote’
create asmdisk ‘/dev/raw/raw3’ ‘logdisk1’
create asmdisk ‘/dev/raw/raw4’ ‘datadisk1’
create asmdisk ‘/dev/raw/raw5’ ‘datadisk2’
init dcrdisk ‘/dev/raw/raw1’ from ‘/home/dmdba/dmdbms/data/dmdcr_cfg.ini’
identified by ‘dmdsc’
init votedisk ‘/dev/raw/raw2’ from ‘/home/dmdba/dmdbms/data/dmdcr_cfg.ini’
4.5 准备DMASM的MAL配置(dmasvrmal.ini)
准备DMASM的MAL配置文件(命名为dmasvrmal.ini),使用DMASM的所有节点都要配置,内容完全一样
192.168.1.81/82:
vi /home/dmdba/dmdbms/data/dmasvrmal.ini
[MAL_INST1]
MAL_INST_NAME = dmasm1 #asm实例1
MAL_HOST = 10.10.10.81
MAL_PORT = 7236
[MAL_INST2]
MAL_INST_NAME = dmasm2 #asm实例2
MAL_HOST = 10.10.10.82
MAL_PORT = 7237
4.6 准备dmdcr.ini配置文件
dmdcr.ini是dmcss、dmasmsvr、dmasmtool工具的输入参数,记录了当前节点序列号以及DCR磁盘路径。
配置文件,保存到/dm/dmdmbs/data/目录下面
DMASM的两个节点分别配置dmdcr.ini dmdcr_path相同
vi /home/dmdba/dmdbms/data/dmdcr.ini
DMDCR_PATH = /dev/raw/raw1
#dmasmsvr使用的MAL配置文件路径
DMDCR_MAL_PATH =/home/dmdba/dmdbms/data/dmasvrmal.ini
DMDCR_SEQNO = 0
#第一台为0,第二台改为1
#DMDCR_SEQNO = 1
#ASM重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 0 #先设置为0,不自动拉起本地ASM实例
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr
DCR_INI=/home/dmdba/dmdbms/data/dmdcr.ini
#DB重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0 #先设置为0,不自动拉起本地实例
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path =
/home/dmdba/dmdbms/data/dmdsc1_config/dm.ini
DCR_INI=/home/dmdba/dmdbms/data/dmdcr.ini
#第二台:
#DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
path=/home/dmdba/dmdbms/data/dmsc2_config/dm.ini
DCR_INI=/home/dmdba/dmdbms/data/dmdcr.ini
#注意第一台与第二台配置有区别
4.7 关闭virbro
虚拟机要关闭virbro
192.168.1.81/82:
关闭virbr0:
ifconfig,检查是不是有virbr0,一定要禁用,否则影响后面的使用:
virbr0是KVM默认创建的一个Bridge,其作用是为连接其上的虚机网卡提供NAT访问外网的功能。
virbr0默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡
提供DHCP服务。
禁用端口
su - root
# ifconfig virbr0 down
删除端口
# brctl delbr virbr0
virbr0是由libvirtd服务创建,关闭服务:
#systemctl disable libvirtd
4.8 分别在2个节点注册DMCSS和DMASM服务
root:
192.168.1.81:
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini
/home/dmdba/dmdbms/data/dmdcr.ini -p dmdsc1 #以实例名命名dmdsc1
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini
/home/dmdba/dmdbms/data/dmdcr.ini -p dmdsc1 -y DmCSSServicedmdsc1
#意思就是启动asm前提是启动css服务(依赖css服务)
192.168.1.82:
注意:在注册第二台主机服务之前需要配置/home/dmdba/dmdbms/data/dmdcr.ini配置文件,如06所示:
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini
/home/dmdba/dmdbms/data/dmdcr.ini -p dmdsc2
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini
/home/dmdba/dmdbms/data/dmdcr.ini -p dmdsc2 -y DmCSSServicedmdsc2
#意思就是启动asm前提是启动css服务(依赖css服务)
启动CSS和ASM服务
192.168.1.81:
root:
systemctl start DmCSSServicedmdsc1
systemctl start DmASMSvrServicedmdsc1
or:
su - dmdba
DmCSSServicedmdsc1 start
DmCSSServicedmdsc1 status
DmASMSvrServicedmdsc1 start
DmASMSvrServicedmdsc1 status
192.168.1.82:
root:
systemctl start DmCSSServicedmdsc2
systemctl start DmASMSvrServicedmdsc2
or:
su - dmdba
DmCSSServicedmdsc2 start
DmCSSServicedmdsc2 status
DmASMSvrServicedmdsc2 start
DmASMSvrServicedmdsc2 status
4.9 创建DMASM磁盘组
在任意节点使用dmasmtool工具创建DMASM磁盘组。
su - dmdba
[dmdba@dm81 ~]$ dmasmtool DCR_INI=/home/dmdba/dmdbms/data/dmdcr.ini
DMASMTOOL V8
ASM>
lsdg
lsdsk
create diskgroup ‘dglog’ asmdisk ‘/dev/raw/raw3’
create diskgroup ‘dgdata01’ asmdisk ‘/dev/raw/raw4’
alter diskgroup ‘dgdata01’ add asmdisk ‘/dev/raw/raw5’
#裸设备和vote盘是不能用asm磁盘组的,数据盘和日志盘可以使用磁盘组
4.10 准备dminit.ini配置文件
在2个节点的/home/dmdba/dmdbms/data目录下创建dminit.ini配置文件,添加如下内容,在2个节点都创建。
vi /home/dmdba/dmdbms/data/dminit.ini
db_name = dmdsc
system_path = +dgdata01/data
system = +dgdata01/data/dmdsc/system.dbf
system_size = 128
roll = +dgdata01/data/dmdsc/roll.dbf
roll_size = 128
main = +dgdata01/data/dmdsc/main.dbf
main_size = 128
ctl_path = +dgdata01/data/dmdsc/dm.ctl
ctl_size = 8
log_size = 256
#dcr磁盘路径,目前不支持asm,只能是裸设备
dcr_path = /dev/raw/raw1
dcr_seqno = 0
auto_overwrite = 1
[dmdsc1]
#inst_name跟dmdcr_cfg.ini中DB类型group中DCR_EP_NAME对应
config_path = /home/dmdba/dmdbms/data/dmdsc1_config
port_num = 5236
mal_host = 10.10.10.81
mal_port = 9340
log_path = +dglog/log/dmdsc1_log01.log
log_path = +dglog/log/dmdsc1_log02.log
[dmdsc2]
#inst_name跟dmdcr_cfg.ini中DB类型group中DCR_EP_NAME对应
config_path = /home/dmdba/dmdbms/data/dmdsc2_config
port_num = 5236
mal_host = 10.10.10.82
mal_port = 9341
log_path = +dglog/log/dmdsc2_log01.log
log_path = +dglog/log/dmdsc2_log02.log
4.11 使用dmini初始化DB环境
在任意节点启动dminit工具初始化数据库。
dminit执行完成后,会在config_path目录(/home/dmdba/dmdbms/data/dmdsc1_config和/home/dmdba/dmdbms/data/dmdsc2_config)下生成配置文件dm.ini和dmmal.ini
192.168.1.81:
dminit control=/home/dmdba/dmdbms/data/dminit.ini
#将DSC1的配置文件复制过去:
scp -r /home/dmdba/dmdbms/data/dmdsc2_config dm82:/home/dmdba/dmdbms/data/
4.12 启动数据库服务器
192.168.1.81:
root:
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini
/home/dmdba/dmdbms/data/dmdsc1_config/dm.ini -dcr_ini
/home/dmdba/dmdbms/data/dmdcr.ini -p dmdsc1 -y DmASMSvrServicedmdsc1
systemctl start DmServicedmdsc1
or:
su - dmdba
DmServicedmdsc1 start
192.168.1.82:
root:
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini
/home/dmdba/dmdbms/data/dmdsc2_config/dm.ini -dcr_ini
/home/dmdba/dmdbms/data/dmdcr.ini -p dmdsc2 -y DmASMSvrServicedmdsc2
systemctl start DmServicedmdsc2
or:
su - dmdba
DmServicedmdsc1 start
如果DMCSS配置有自动拉起dmserver/dmasm的功能,可以等待DMCSS自动拉起实例,不需要手动启动。
注意:搭建成功后修改两节点配置文件dmdcr.ini,将DMDCR_ASM_RESTART_INTERVAL与DMDCR_DB_RESTART_INTERVAL修改为10即可
192.168.1.81/82:
vim /home/dmdba/dmdbms/data/dmdcr.ini
DMDCR_PATH = /dev/raw/raw1
#dmasmsvr使用的MAL配置文件路径
DMDCR_MAL_PATH =/home/dmdba/dmdbms/data/dmasvrmal.ini
DMDCR_SEQNO = 0
#第一台为 0,第二台改为 1
#DMDCR_SEQNO = 1
#ASM重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 10
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr
DCR_INI=/home/dmdba/dmdbms/data/dmdcr.ini
#DB重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 10
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
path=/home/dmdba/dmdbms/data/dmdsc1_config/dm.ini
DCR_INI=/home/dmdba/dmdbms/data/dmdcr.ini
#第二台:
#DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
path=/home/dmdba/dmdbms/data/dmsc2_config/dm.ini
DCR_INI=/home/dmdba/dmdbms/data/dmdcr.ini
4.13 连接数据库验证
使用disql或者manager执行以下代码可查看集群信息
disql --登录时没有用户也没有密码
alter user sysdba identified by Gz_dmdba2021;
select * from v$dsc_ep_info;
select instance_name from v$instance;
select group_id,disk_id,disk_name,disk_path,size/1024 from V$ASMDISK;
select group_id,group_name,au_size,total_size from v$asmgroup;
set pagesize 200
set linesize 200
select file_id,path,size_bytes/1024/1024 from v$asmfile;
select path from v$datafile;
select * from v$rlogfile;
select * from v$rlog;
5 DM共享存储集群日常管理
5.1 配置DSC连接服务名
Linux上测试:
192.168.1.81/82:
vi /etc/dm_svc.conf
#dmdsc=(10.10.10.81:5236,10.10.10.82:5236)
dmdsc=(192.168.1.81:5236,192.168.1.82:5236)
SWITCH_INTERVAL=(3)
SWITCH_TIME=(10000)
TIME_ZONE=(480)
LANGUAGE=(cn)
dm_svc.conf配置文件包含如下配置选项:
1.SERVERNAME:连接服务名,用户通过连接服务名访问数据库。
2.IP:数据库所在的IP地址,如果是IPv6地址,为了区分端口,需要用[]封闭IP地址。
3.PORT:数据库使用的TCP连接端口,可选配置,不配置则使用连接上指定的端口。
4.SWITCH_INTERVAL:检测到数据库实例故障时,接口在服务器之间切换的次数;超过设置次数没有连接到有效数据库时,断开连接并报错。有效值范围
1~9223372036854775807,默认值为 3。
5.SWITCH_TIME:表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围
1~9223372036854775807,默认值为200。
5.2 负载均衡测试
[dmdba@dm82 ~]$ disql SYSDBA/Gz_dmdba2021@dmdsc --多次退出再连接测试
select * from v$dsc_ep_info;
window测试:
Windows上配置文件:
64位的DM安装在Win64操作平台下,此文件位于%SystemRoot%\system32
dm_svc.conf:
#dmdsc=(10.10.10.81:5236,10.10.10.82:5236)
dmdsc=(192.168.1.81:5236,192.168.1.82:5236)
SWITCH_INTERVAL=(10)
SWITCH_TIME=(10000)
TIME_ZONE=(480)
LANGUAGE=(cn)
D:\dmdbms\bin>disql sysdba/Gz_dmdba2021@dmdsc
5.3 故障切换测试
杀掉数据库进程dmserver,再连接测试(再次连接时等待的时间会比较长)
disql sysdba/Gz_dmdba2021@dmdsc
或者
D:\dmdbms\bin>disql sysdba/Gz_dmdba2021@dmdsc
select instance_name from v$instance;
创建数据测试两台主机数据是否一致
select * from v$dsc_ep_info;
create tablespace dm datafile ‘+dgdata01/data/dmdsc/dm01.dbf’ size 100
autoextend off;
create tablespace dm_idx datafile ‘+dgdata01/data/dmdsc/dm_idx01.dbf’ size 100
autoextend off;
create user “dm” identified by “dm123456789” default tablespace dm default index
tablespace dm_idx;
grant dba to dm;
conn dm/dm123456789;
create table dm (id int,name varchar(50),create_date date);
insert into dm values(1,‘李哥’,‘2021-04-01’);
insert into dm values(2,‘王哥’,‘2021-04-02’);
insert into dm values(3,‘行测’,‘2021-04-03’);
commit;
select count(*) from dm;
5.4 DMDSC集群归档配置
dmdsc1:
vi /home/dmdba/dmdbms/data/dmdsc1_config/dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch/dmdsc1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = dmdsc2
ARCH_INCOMING_PATH = /dm/dmarch/dmdsc2
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
或者配置到共享存储:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
#ARCH_DEST = /dm/dmarch/dmdsc1
ARCH_DEST = +dgdata01/data/dmdsc/dmarch1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = dmdsc2
#ARCH_INCOMING_PATH = /dm/dmarch/dmdsc2
ARCH_INCOMING_PATH = +dgdata01/data/dmdsc/dmarch2
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
编辑dm.ini文件,设置参数ARCH_INI=1,保存。
vi /home/dmdba/dmdbms/data/dmdsc1_config/dm.ini
ARCH_INI=1
dmdsc2:
vi /home/dmdba/dmdbms/data/dmdsc2_config/dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch/dmdsc2
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = dmdsc1
ARCH_INCOMING_PATH = /dm/dmarch/dmdsc1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
或者配置到共享存储:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
#ARCH_DEST = /dm/dmarch/dmdsc2
ARCH_DEST = +dgdata01/data/dmdsc/dmarch2
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = dmdsc1
#ARCH_INCOMING_PATH = /dm/dmarch/dmdsc1
ARCH_INCOMING_PATH = +dgdata01/data/dmdsc/dmarch1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
编辑dm.ini文件,设置参数ARCH_INI=1,保存。
vi /home/dmdba/dmdbms/data/dmdsc2_config/dm.ini
ARCH_INI=1
5.5 DMDSC相关参数配置优化
另外,生产环境参数按照实际的环境去调整优化(我的是测试环境参数优化如下)
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_OS_MEMORY’,95,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSIONS’,1000,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_SESSION_STATEMENT’,5000,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER’,1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘MAX_BUFFER’,1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘BUFFER_POOLS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE’,512,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘RECYCLE_POOLS’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_GLOBAL_SIZE’,500,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘HJ_BUF_SIZE’,300,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘DICT_BUF_SIZE’,50,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘TEMP_SIZE’,200,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘VM_POOL_SIZE’,256,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘SESS_POOL_SIZE’,256,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘CACHE_POOL_SIZE’,200,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘WORKER_THREADS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘TASK_THREADS’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘USE_PLN_POOL’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘OLAP_FLAG’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘OPTIMIZER_MODE’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘VIEW_PULLUP_FLAG’,1,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘COMPATIBLE_MODE’,2,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘ENABLE_MONITOR’,0,1,2);
call SF_SET_SYSTEM_PARA_VALUE (‘SVR_LOG’,0,1,2);
重启数据库:
DmServicedmdsc1 stop
DmServicedmdsc2 stop
DmServicedmdsc1 start
DmServicedmdsc2 start
然后检查:
disql sysdba/Gz_dmdba2021
select arch_mode from v$database;
select * from v$dm_arch_ini;
SELECT NAME,FIRST_TIME,NEXT_TIME,FIRST_CHANGE#,NEXT_CHANGE# FROM
V$ARCHIVED_LOG;
5.6 DMDSC启动与关闭流程
生产环境建议把这些服务设置为开机手工启动
启动顺序:
DMCSS–>DMASMSVR–>DMSERVER
#如果前面参数配置,这里只需要启动css服务,其它asm和db都会被自动带起来
192.168.1.81:
systemctl start DmCSSServicedmdsc1
192.168.1.82:
systemctl start DmCSSServicedmdsc2
以下是详细的启动流程:
192.168.1.81:
root:
systemctl disable DmCSSServicedmdsc1
systemctl disable DmASMSvrServicedmdsc1
systemctl disable DmServicedmdsc1
systemctl start DmCSSServicedmdsc1
systemctl start DmASMSvrServicedmdsc1
systemctl start DmServicedmdsc1
or:
su - dmdba
DmCSSServicedmdsc1 start
DmASMSvrServicedmdsc1 start
DmServicedmdsc1 start
192.168.1.82:
root:
systemctl disable DmCSSServicedmdsc2
systemctl disable DmASMSvrServicedmdsc2
systemctl disable DmServicedmdsc2
systemctl start DmCSSServicedmdsc2
systemctl start DmASMSvrServicedmdsc2
systemctl start DmServicedmdsc2
or:
su - dmdba
DmCSSServicedmdsc2 start
DmASMSvrServicedmdsc2 start
DmServicedmdsc2 start
停止顺序:
DMSERVICE—>DMASMSVR—>DMCSS
192.168.1.81:
root:
systemctl stop DmServicedmdsc1
systemctl stop DmASMSvrServicedmdsc1
systemctl stop DmCSSServicedmdsc1
or:
su - dmdba
DmServicedmdsc1 stop
DmASMSvrServicedmdsc1 stop
DmCSSServicedmdsc1 stop
192.168.1.82:
root:
systemctl stop DmServicedmdsc2
systemctl stop DmASMSvrServicedmdsc2
systemctl stop DmCSSServicedmdsc2
or:
su - dmdba
DmServicedmdsc2 stop
DmASMSvrServicedmdsc2 stop
DmCSSServicedmdsc2 stop
然后重启主机,检查是否可以自动启动
5.7 备份
DSC集群因为共享一份数据,所以只需要在其中一个节点做备份即可。备份策略可以根据实际情况来制定,比如:每天增备,每周全备,每周逻辑全导出,或只导出核心表。备份数据也不要放到共享存储,可以放到其他存储或者本地磁盘。
l start DmCSSServicedmdsc1
192.168.1.82:
systemctl start DmCSSServicedmdsc2
以下是详细的启动流程:
192.168.1.81:
root:
systemctl disable DmCSSServicedmdsc1
systemctl disable DmASMSvrServicedmdsc1
systemctl disable DmServicedmdsc1
systemctl start DmCSSServicedmdsc1
systemctl start DmASMSvrServicedmdsc1
systemctl start DmServicedmdsc1
or:
su - dmdba
DmCSSServicedmdsc1 start
DmASMSvrServicedmdsc1 start
DmServicedmdsc1 start
192.168.1.82:
root:
systemctl disable DmCSSServicedmdsc2
systemctl disable DmASMSvrServicedmdsc2
systemctl disable DmServicedmdsc2
systemctl start DmCSSServicedmdsc2
systemctl start DmASMSvrServicedmdsc2
systemctl start DmServicedmdsc2
or:
su - dmdba
DmCSSServicedmdsc2 start
DmASMSvrServicedmdsc2 start
DmServicedmdsc2 start
停止顺序:
DMSERVICE—>DMASMSVR—>DMCSS
192.168.1.81:
root:
systemctl stop DmServicedmdsc1
systemctl stop DmASMSvrServicedmdsc1
systemctl stop DmCSSServicedmdsc1
or:
su - dmdba
DmServicedmdsc1 stop
DmASMSvrServicedmdsc1 stop
DmCSSServicedmdsc1 stop
192.168.1.82:
root:
systemctl stop DmServicedmdsc2
systemctl stop DmASMSvrServicedmdsc2
systemctl stop DmCSSServicedmdsc2
or:
su - dmdba
DmServicedmdsc2 stop
DmASMSvrServicedmdsc2 stop
DmCSSServicedmdsc2 stop
然后重启主机,检查是否可以自动启动
社区地址:https://eco.dameng.com