DM 共享存储数据库集群的英文全称 DM Data Shared Cluster,简称 (DMDSC)。DMDSC 允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。并支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供
服务器 | IP |
---|---|
节点1 | 192.168.93.162 |
节点2 | 192.168.93.163 |
这里记录一下配置双网卡的流程,本试验不需要双网卡
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 的工具在指定目录创建虚拟硬盘
.\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
至此共享磁盘创建完毕
节点一二均进行以下配置
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
~~~
节点一执行以下操作
[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'
节点一二均进行以下配置
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
~~~
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
~~~
两个节点分别在 $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
使用 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 命令查看 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
DMDSC 配置完成后,启动时提示以下错误信息
DSC初始化失败 os_asm_env_init error.CODE:-11041, DESC:ASM连接异常
在配置 DSC 过程中有三个重要的配置文件,分别为 dmdcr_cfg.ini dmasvrmal.ini dmdcr.ini
,三个配置文件中会对共享硬盘分区,节点名称,IP,端口等进行设置,其中的各个要素都是相关联的,在该试验中初始化失败的原因就是在 dmdcr_cfg.ini
配置文件的各个节点 IP 设置有问题,导致 DSC 的初始化失败报错
在确认配置文件正确后,按顺序先后启动 DSC 集群中各个节点的 CSS,ASM 和 节点实例,启动过程中控制节点的 ASM 控制台提示如下错误信息
[ASM]: 通知EP ASM0[0]启动失败,强制halt
并且不断尝试再次启动并不断报错
经过查询资料后得知,因为共享存储集群内部各个节点之间需要保持网络通讯,以确保共享硬盘及各个节点上的操作信息能及时的被其他节点得知,因此集群内部各个节点在配置文件描述的端口需要开放或者关闭防火墙,以及需要关闭 Linux 的全局安全子系统 SELinux,开放端口和关闭以上组件后再次依照顺序启动各个节点的 CSS,ASM 和节点实例即可顺利启动
在 DSC 集群正常启动后进行节点动态拓展操作,在原有集群内部增加节点,原有配置文件及新建节点配置文件创建完成后启动新增节点,提示以下报错信息
Invalid file path[/dev/raw/raw1]
从报错信息可以看出是新增的节点无法识别到共享磁盘中的部分磁盘分区,因此从新增节点的共享磁盘配置入手,已知新节点确实已经加入了共享磁盘,因此可以判定是因为新节点只加入共享磁盘而没有对磁盘进行配置导致的报错,对新节点执行以下操作配置共享磁盘
编辑文件
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 集群和新增节点,集群和节点成功运行
文章
阅读量
获赞