DMDSC 共享存储集群搭建
DM 共享存储数据库集群的英文全称 DM Data Shared Cluster,简称 (DMDSC)。DMDSC 允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。并支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供
环境
服务器 | IP |
---|---|
节点1 | 192.168.93.162 |
节点2 | 192.168.93.163 |
VMware 虚拟机创建双网卡
这里记录一下配置双网卡的流程,本试验不需要双网卡
VMware 虚拟机关闭情况下点击该虚拟机的编辑虚拟机设置选项进入该界面,点击下方添加,选择网络适配器
进入到虚拟机,执行以下命令查看网络配置并修改网络配置文件
ifconfig
这里有两个 ens 前缀的网卡配置,ens 33 为第一个网卡,ens 37 为刚才添加的第二个网卡
cd /etc/sysconfig/network-scripts/
ls | grep ifcfg
这里将配置文件 ifcfg-ens33
复制一份,命名为 ifcfg-ens37
,和上面 ifconfig 查询得到的前缀对应,并且修改 ifcfg-ens37
配置文件,修改 name 和 device 为 ens37,固定 IP 并将 IP 修改为期望值,修改完成后重启网络服务使其生效
cp ifcfg-ens33 ifcfg-ens37
vi ifcfg-ens37
~~~
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=ens37
UUID=3ce6d31b-c654-4045-b745-b6a72c78a2bb
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.xxx.xxx
DNS1=192.168.xxx.xxx
GATEWAY=192.168.xxx.xxx
~~~
service network restart
至此双网卡创建完毕
VMware 虚拟机创建共享磁盘
使用 VMware 的工具在指定目录创建虚拟硬盘
.\vdiskmanager-windows-7.0.1.exe -c -s 20G -a lsilogic -t 2 "G:\CentDM\share.vmdk"
在虚拟机的目录下编辑 虚拟机名称.vmx
文件,两台虚拟机都需要编辑,例如本次试验中两台虚拟机分别位于 F:\DM\DM01
和 F:\DM\DM02
目录下,那么去到这两个目录下找到 DM01.vmx
和 DM02.vmx
文件添加以下两行
disk.locking="FALSE"
disk.EnableUUID="TRUE"
两台虚拟机选择添加硬盘 -> 使用现有虚拟磁盘,选定刚创建的虚拟硬盘目录进行添加
登陆任意一台虚拟机,对磁盘划分存储,因为是共享磁盘,完成后另一台虚拟机也会自动完成对该硬盘的划分存储
执行以下命令划分存储
lsblk
fdisk /dev/sdb
磁盘划分完毕,如下所示,sdb 分为四个区,分别为 sdb1,sdb2,sdb3 和 sdb4
这时登陆另一台虚拟机可以发现已经划分完毕
两台虚拟机都编辑文件
vim /etc/udev/rules.d/80-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"
~~~
两台虚拟机都执行以下命令进行设备绑定
partprobe /dev/sdb
udevadm control --reload-rules
udevadm trigger --type=devices --action=change
两台虚拟机查看绑定情况
ll /dev/raw/*
blockdev --getsize64 /dev/raw/raw1
blockdev --getsize64 /dev/raw/raw2
blockdev --getsize64 /dev/raw/raw3
blockdev --getsize64 /dev/raw/raw4
chown -R dmdba:dinstall /dev/raw/raw1
chown -R dmdba:dinstall /dev/raw/raw2
chown -R dmdba:dinstall /dev/raw/raw3
chown -R dmdba:dinstall /dev/raw/raw4
至此共享磁盘创建完毕
DSC 配置
配置初始化文件 dmdcr_cfg.ini
节点一二均进行以下配置
vi /home/dmdba/dmdbms/data/dmdcr_cfg.ini
~~~
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/raw/raw2
DCR_OGUID = 63635
[GRP]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP_CSS
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_CSS]
DCR_EP_NAME = CSS0
DCR_EP_HOST = 192.168.244.162
DCR_EP_PORT = 9341
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.244.163
DCR_EP_PORT = 9343
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_ASM]
DCR_EP_NAME = ASM0
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 192.168.244.162
DCR_EP_PORT = 9349
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 192.168.244.163
DCR_EP_PORT = 9351
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP]
DCR_GRP_TYPE = 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_CHECK_PORT = 9741
DCR_EP_PORT = 5238
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_CHECK_PORT = 9742
DCR_EP_PORT = 5238
~~~
DMASMCMD 初始化
节点一执行以下操作
[dmdba@192 data]$ cd /home/dmdba/dmdbms/bin
[dmdba@192 data]$ ./dmasmcmd
ASM>create dcrdisk '/dev/raw/raw1' 'dcr'
ASM>create votedisk '/dev/raw/raw2' 'vote'
ASM>create asmdisk '/dev/raw/raw3' 'LOG0'
ASM>create asmdisk '/dev/raw/raw4' 'DATA0'
ASM>init dcrdisk '/dev/raw/raw1' from '/home/dmdba/dmdbms/data/dmdcr_cfg.ini' identified by '123456'
ASM>init votedisk '/dev/raw/raw2' from '/home/dmdba/dmdbms/data/dmdcr_cfg.ini'
配置文件 dmasvrmal.ini
节点一二均进行以下配置
vi /home/dmdba/dmdbms/data/dmasvrmal.ini
~~~
[MAL_INST1]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.244.162
MAL_PORT = 7236
[MAL_INST2]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.244.163
MAL_PORT = 7237
~~~
配置文件 dmdcr.ini
DMASM 的两个节点分别配置 dmdcr.ini,dmdcr_path 相同,dmasvrmal.ini 文件内容也相同,dmdcr_seqno 分别为 0 和 1
vi /home/dmdba/dmdbms/data/dmdcr.ini #节点一
~~~
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH =/home/dmdba/dmdbms/data/dmasvrmal.ini
#dmasmsvr 使用的 MAL 配置文件路径
DMDCR_SEQNO = 0
#ASM 重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 20 #为0时不自动拉起
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/dmdbms/data/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 20 #为0时不自动拉起
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/dmdbms/data/dsc0_config/dm.ini dcr_ini=/home/dmdba/dmdbms/data/dmdcr.ini
~~~
vi /home/dmdba/dmdbms/data/dmdcr.ini #节点二
~~~
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH =/home/dmdba/dmdbms/data/dmasvrmal.ini
#dmasmsvr 使用的 MAL 配置文件路径
DMDCR_SEQNO = 1
#ASM 重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 20 #为0时不自动拉起
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/dmdbms/data/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 20 #为0时不自动拉起
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/dmdbms/data/dsc1_config/dm.ini dcr_ini=/home/dmdba/dmdbms/data/dmdcr.ini
~~~
启动集群
启动 dmcss 和 dmasm
两个节点分别在 $DM_HOME/bin 目录下先后启动 dmcss、dmasm 程序,如果启动失败尝试关闭 firewalld 和SELinux
./dmcss DCR_INI=/home/dmdba/dmdbms/data/dmdcr.ini
./dmasmsvr DCR_INI=/home/dmdba/dmdbms/data/dmdcr.ini
创建 dmasm 磁盘组
使用 dmasmtool 工具创建 DMASM 磁盘组,在节点一(其中一个节点执行即可)的 $DM_HOME/bin 目录下执行以下命令
[dmdba@localhost bin]$ ./dmasmtool DCR_INI=/home/dmdba/dmdbms/data/dmdcr.ini
ASM>create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
ASM>create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'
初始化库
在节点一上配置 dminit.ini 文件
vi /home/dmdba/dmdbms/data/dminit.ini
~~~
db_name = dsc
system_path = +DMDATA/data
system = +DMDATA/data/dsc/system.dbf
system_size = 128
roll = +DMDATA/data/dsc/roll.dbf
roll_size = 128
main = +DMDATA/data/dsc/main.dbf
main_size = 128
ctl_path = +DMDATA/data/dsc/dm.ctl
ctl_size = 8
log_size = 256
dcr_path = /dev/raw/raw1
dcr_seqno = 0
auto_overwrite = 1
page_size = 16
[DSC0]
config_path = /home/dmdba/dmdbms/data/dsc0_config
port_num = 5238
mal_host = 192.168.244.162
mal_port = 9340
log_path = +DMLOG/log/dsc0_log01.log
log_path = +DMLOG/log/dsc0_log02.log
[DSC1]
config_path = /home/dmdba/dmdbms/data/dsc1_config
port_num = 5238
mal_host = 192.168.244.163
mal_port = 9341
log_path = +DMLOG/log/dsc1_log01.log
log_path = +DMLOG/log/dsc1_log02.log
~~~
通过 dminit 初始化库
./dminit control=/home/dmdba/dmdbms/data/dminit.ini
初始化后 data 目录下会生成 dsc0_config
和 dsc1_config
两个文件,将 dsc1_config
文件复制到节点二的 data 目录下
分别进入 $DM_HOME/bin 目录下前台启动节点一和节点二
./dmserver /home/dmdba/dmdbms/data/dsc0_config/dm.ini dcr_ini=/home/dmdba/dmdbms/data/dmdcr.ini #节点一启动
./dmserver /home/dmdba/dmdbms/data/dsc1_config/dm.ini dcr_ini=/home/dmdba/dmdbms/data/dmdcr.ini #节点二启动
以下有两种方式查看 DSC 集群情况
- 直接通过 CSS 窗口输入 show 命令进行查看
- 配置监视器,在监视器中输入 show 命令进行查看
以下介绍窗口查看的情况,监视器的配置在备注章节进行介绍
节点一 CSS 窗口 show 命令查看 sys_status 字段为 OPEN,vtd_status 字段为 WORKING,active 字段为 TRUE 说明 db 服务正常
如需在任一节点上登陆 DSC 集群,需要修改 dm_svc.conf 文件,文件路径一般为 /etc/dm_svc.conf,在该文件中添加 DSC=(192.168.244.162:5238,192.168.244.163:5238)
,修改后重启客户端程序生效
至此 DSC 数据共享集群搭建完成
备注
总结一下 DMDSC 的启动关闭流程
启动
DMDSC 集群中的每个节点均按以下流程启动
./dmcss dcr_ini=/path_to_dmdcr.ini/dmdcr.ini #启动css
./dmasmsvr dcr_ini=/path_to_dmdcr.ini/dmdcr.ini #启动asmvr
./dmserver /path_to_dm.ini/dm.ini dcr_ini=/path_to_dmdcr.ini/dmdcr.ini #启动实例
配置监视器
前文有提到过除了直接在 CSS 窗口进行输入查看集群状态,还可以通过配置监视器的方式进行,这里简单介绍一下监视器的配置和使用流程
在集群中任意节点上创建 dmcssm.ini 文件
vi /home/dmdba/dmdbms/data/dmcssm.ini
~~~
#和 dmdcr_cfg.ini 中的 DCR_OGUID 保持一致
CSSM_OGUID = 63635
#配置所有 CSS 的连接信息,
#和 dmdcr_cfg.ini 中 CSS 配置项的 DCR_EP_HOST 和 DCR_EP_PORT 保持一致
CSSM_CSS_IP = 192.168.244.162:9341
CSSM_CSS_IP = 192.168.244.163:9343
CSSM_LOG_PATH = /home/dmdba/dmdbms/data/cssm/log #监视器日志文件存放路径
CSSM_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
CSSM_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
~~~
在该节点上启动监视器
./dmcssm ini_path=/home/dmdba/dmdbms/data/dmcssm.ini
关闭
如果 DMCSS 配置了 DMASMSVR/dmserver 自动拉起命令,可以先仅启动 DMCSS,然后启动 DMCSSM,在 DMCSSM 控制台执行命令 “ep startup GRP_ASM” 启动 DMASMSVR 集群, 执行 “ep startup GRP_DSC” 启动 dmserver 集群(其中 GRP_ASM/GRP_DSC 为 dmasmsvr/dmserver 集群的组名)。类似地执行 “ep stop GRP_ASM/GRP_DSC” 可以关闭 dmasmsvr/dmserver 集群环境
关闭 DMDSC 集群环境时,应先关闭 dmserver,再依次关闭 DMASMSVR 和 DMCSS
关闭数据库与 asm:监视器中执行
ep stop GRP_DSC #关闭数据库
ep stop GRP_ASM #关闭asm
达梦在线服务平台:https://eco.dameng.com