使用VM模拟部署DM共享存储(DSC)集群
准备两个虚拟机CentOS1(192.168.202.133)和CentOS2(192.168.202.152),还需一个裸盘,没有的话可以以在虚拟机添加硬盘的方式模拟裸盘。
一、环境准备
1、新建两台虚拟机
选择新建虚拟机,设置ISO镜像文件,磁盘大小12G,将虚拟磁盘存储为单个文件。虚拟机内存设置为2GB。两个虚拟机操作系统、内存大小等完全一样。
启动好后 systemctl stop firewalld 关闭防火墙
ifconfig 查ip地址
如果没安装ifconfig,则yum install ifconfig
如果还失败,则yum search ifconfig
查到后执行 yum install net-tools.x86_64
这样就可以用ifconfig了
注意:我之前试过先创建虚拟机,选择稍后安装操作系统,然后新建硬盘,添加完硬盘后再创建操作系统,结果启动后找不到我新建的硬盘,建议还是先安装操作系统,启动没问题后再关闭虚拟机,然后新建硬盘。
2、在CentOS1创建新硬盘
注意:必须在虚拟机关闭的状态下,才能进行虚拟机的设置。
编辑虚拟机或者直接点硬盘(SCSI)都可以,选择添加硬盘,虚拟磁盘类型选SCSI(S),创建新虚拟硬盘。磁盘大小20G,将虚拟磁盘存储为单个文件,硬盘自己命名,最好单独存储到一个文件夹,不要选择默认。
必须勾选立即分配所有磁盘空间
下图是我的存储目录,第三个是虚拟硬盘。
3、在CentOS2添加之前创建的硬盘
注意:必须在虚拟机关闭的状态下,才能进行虚拟机的设置。
4、修改vmx文件
我只添加了一个SCSI硬盘,打开CentOS2的vmx配置文件,加入如下信息:
disk.locking="FALSE"
scsi0:1.SharedBus="Virtual"
说明:
scsi n:m.SharedBus="Virtual"
n和m是SCSI的设备编号,可以在配置文件中找到需要共享的SCSI设备的信息。
5、查看硬盘有没有加入
二、安装达梦数据库管理系统
1、创建用户组、用户
[root@dameng home]# groupadd dinstall
[root@dameng home]# useradd -g dinstall dmdba
[root@dameng home]# passwd dmdba
PWD : dmdba
2、安装和创建响应目录
上传iso文件或者DMInstall.bin,我是直接上传的DMInstall.bin,放在/home下
chown -R dmdba:dinstall /home/DMInstall.bin
chmod -R 755 /home/DMInstall.bin
切换dmdba登录
[dmdba@dameng home]# ./DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
请选择设置时区 [21]:21
请选择安装类型的数字序号 [1 典型安装]:1
请选择安装目录 [/opt/dmdbms]:/home/dmdba
手动创建响应的目录
数据库管理系统安装在/home/dmdba目录下
cd /home/dmdba
mkdir dmdbms
cd dmdbms
mkdir BAK
mkdir config(目录存放所有配置文件)
mkdir arch_0(存放归档日志)
mkdir arch_0_remote(存放远程归档)
cd ../
chown -R dmdba:dinstall dmdbms
chmod -R 755 dmdbms
注意:我这步没做好,最好先创建dmdbms,然后把数据库安装到dmdbms中
3、在共享磁盘上划分裸设备
1)开始划分
注意:用root用户
在一个节点上划分即可。
a) 输入 fdisk /dev/sdb
b) 依次输入 n p 1 回车 +100M 回车,完成第一块磁盘划分
c) 依次输入 n p 2 回车 +100M 回车,完成第二块磁盘划分
d) 依次输入 n p 3 回车 +2048M 回车,完成第三块磁盘划分
e) 依次输入 n p 4 回车回车回车,完成第四块磁盘划分
f) 输入w命令,将裸设备划分的设置进行保存
g)两个节点都执行一下语句完成裸设备绑定
partprobe /dev/sdb 重读分区表
systemctl restart systemd-udev-trigger.service
h)fdisk -l 查看划分情况(两个节点都看)
注意:我第一次划分的时候,第四步输错了,把+2048M输成+2048,导致后面使用 DMASMCMD 工具初始化的时候报错,如下图所示:
解决方法是把3和4删掉重建。
同样使用fdisk /dev/sdb命令 不是fdisk /dev/sdb1,输入m并回车,
输入d并回车
选择要删除的分区,分别删除3和4。
删除后再重新分区3和4,如下:
依次输入 n p 3 回车 +2048M 回车,完成第三块磁盘划分
依次输入 n p 4 回车回车回车,完成第四块磁盘划分
输入w命令,将裸设备划分的设置进行保存。
最后执行
partprobe /dev/sdb 重读分区表
systemctl restart systemd-udev-trigger.service
2)编辑/etc/udev/rules.d/60-raw.rules 文件,增加以下语句:
2台服务器均需增加以下语句,用root用户
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"
4、准备dmdcr_cfg.ini配置文件
放在 /home/dmdba/dmdbms/config 目录下,两个节点均需要, 后续 DMASMCMD工具执行 init 语句会使用到。
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.202.133
DCR_EP_PORT = 9341
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.202.152
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.202.133
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.202.152
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_EP_PORT = 5236
DCR_CHECK_PORT = 9741
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9742
5、使用 DMASMCMD 工具初始化磁盘组
1)在其中一个节点上启动dmasmcmd工具
su dmdba
cd /home/dmdba/bin
./dmasmcmd
2)依次输入以下命令(只需在一台机器执行即可)
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/config/dmdcr_cfg.ini' identified by 'abcd'
ASM>init votedisk '/dev/raw/raw2' from '/home/dmdba/dmdbms/config/dmdcr_cfg.ini'
6、配置dmasvrmal.ini文件(两个节点都一样)
存放目录 home/dmdba/dmdbms/config
[MAL_INST1]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.202.133
MAL_PORT = 7236
[MAL_INST2]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.202.152
MAL_PORT = 7237
7、准备 dmdcr.ini 配置文件
存放目录 home/dmdba/dmdbms/config
DMASM 的两个节点分别配置 dmdcr.ini,dmdcr_path 相同,dmasvrmal.ini 文件内容也相同,dmdcr_seqno 分别为 0 和 1。path中分别是dsc0_config和dsc1_config。
CentOS1的:
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH =/home/dmdba/dmdbms/config/dmasvrmal.ini
DMDCR_SEQNO = 0
#ASM 重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/bin/dmasmsvr dcr_ini=/home/dmdba/dmdbms/config/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/bin/dmserver path=/home/dmdba/dmdbms/dsc0_config/dm.ini dcr_ini=/home/dmdba/dmdbms/config/dmdcr.ini
CentOS2的:
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH =/home/dmdba/dmdbms/config/dmasvrmal.ini
DMDCR_SEQNO = 1
#ASM 重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/bin/dmasmsvr dcr_ini=/home/dmdba/dmdbms/config/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/bin/dmserver path=/home/dmdba/dmdbms/dsc1_config/dm.ini dcr_ini=/home/dmdba/dmdbms/config/dmdcr.ini
注意:红框圈中的不能换行。
8、启动DMCSS、DMASM服务
在两台虚拟机分别前台启动,方便查看启动信息。
cd /home/dmdba/bin
./dmcss DCR_INI=/home/dmdba/dmdbms/config/dmdcr.ini
启动成功效果如下:
注意:启动第二个节点的时候报了个错,如下:
解决方式如下:
切换一个会话,因为是前台启动,退出的话也关闭css了。
cd /home/dmdba/bin
./dmasmsvr DCR_INI=/home/dmdba/dmdbms/config/dmdcr.ini
启动成功效果如下:
9、使用 dmasmtool 工具创建 DMASM 磁盘组
选择一个节点,启动 dmasmtool 工具。
cd /home/dmdba/bin
./dmasmtool DCR_INI=/home/dmdba/dmdbms/config/dmdcr.ini
输入下列语句创建 DMASM 磁盘组:
#创建日志磁盘组
create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
#创建数据磁盘组
create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'
注意:刚开始启动的时候报错了,原因是我133重启过,防火墙又自动启动了。
systemctl disable firewalld.service 防火墙禁止开机重启
查看日志信息如下:
根据日志信息判断应该是网络的问题。
刚开始没想到是防火墙的问题,因为我记得我关了,忘记中间有重启过,也没设置防火墙禁止开机重启。
测试方式是在133这台机器上创建个数据库,用152去连接,发现连不上,我本地也连不上133的数据库,只有133自己可以连接。也猜测过是selinux的问题,后来发现不是。
10、准备 dminit.ini 配置文件(一个节点即可)
存放目录 home/dmdba/dmdbms/config
我是放在133这个节点上。
11、使用 dminit 初始化 DB 环境
在133上启动dminit工具初始化数据库。
./dminit control=/home/dmdba/dmdbms/config/dminit.ini
dminit执行完成后,会在config_path目录(/home/dmdba/dmdbms/config/rac0_config和rac1_config)下生成配置文件dm.ini和dmmal.ini。
注:初始化数据库完成之后,将133节点上生成的rac1_config文件拷贝到152的/home/dmdba/dmdbms/config目录下,然后将133上/home/dmdba/dmdbms/config目录下的rac1_config文件夹删掉。
注意:初始化的时候遇到如下问题:
原因是dcr文件里面的实例名与dminit里面不匹配。
dmdcr_cfg.ini配置如下:
dmdcr.ini配置如下:
12、配置远程归档
先将两个节点上的dm.ini中的ARCH_INI设置为1,然后配置dmarch.ini文件
1)节点133:
存放目录 /home/dmdba/dmdbms/config/dsc0_config
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/arch_0
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH =/home/dmdba/dmdbms/arch_0_remote
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240
2)节点152:
存放目录 /home/dmdba/dmdbms/config/dsc1_config
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/arch_1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH =/home/dmdba/dmdbms/arch_1_remote
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 10240
13、启动数据库服务
1)启动133节点的
./dmserver /home/dmdba/dmdbms/config/dsc0_config/dm.ini dcr_ini=/home/dmdba/dmdbms/config/dmdcr.ini
2)启动152节点的
./dmserver /home/dmdba/dmdbms/config/dsc1_config/dm.ini dcr_ini=/home/dmdba/dmdbms/config/dmdcr.ini
14、注册服务
1)注册命令
root用户登录
cd /home/dmdba/script/root
节点1:
./dm_service_installer.sh -t dmcss -dcr_ini /home/dmdba/dmdbms/config/dmdcr.ini -p CSS1
./dm_service_installer.sh -t dmasmsvr -dcr_ini /home/dmdba/dmdbms/config/dmdcr.ini -p ASM1 -y DmCSSServiceCSS1
./dm_service_installer.sh -t dmserver -dcr_ini /home/dmdba/dmdbms/config/dmdcr.ini -dm_ini /home/dmdba/dmdbms/config/dsc0_config/dm.ini -p DB1 -y DmASMSvrServiceASM1
节点2:
./dm_service_installer.sh -t dmcss -dcr_ini /home/dmdba/dmdbms/config/dmdcr.ini -p CSS2
./dm_service_installer.sh -t dmasmsvr -dcr_ini /home/dmdba/dmdbms/config/dmdcr.ini -p ASM2 -y DmCSSServiceCSS2
./dm_service_installer.sh -t dmserver -dcr_ini /home/dmdba/dmdbms/config/dmdcr.ini -dm_ini /home/dmdba/dmdbms/config/dsc1_config/dm.ini -p DB2 -y DmASMSvrServiceASM2
2)启动命令
节点1:
systemctl start DmCSSServiceCSS1
systemctl start DmASMSvrServiceASM1
systemctl start DmServiceDB1
节点2:
systemctl start DmCSSServiceCSS2
systemctl start DmASMSvrServiceASM2
systemctl start DmServiceDB2
15、配置监视器
监视器放在第三方机器上,为 windows 操作系统,dmcssm.ini 配置文件路径为 D:\DCA\cssm。
1)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.202.133:9341
CSSM_CSS_IP = 192.168.202.152:9343
CSSM_LOG_PATH =E:\DCA\cssm\log
#监视器日志文件存放路径
CSSM_LOG_FILE_SIZE = 32
#每个日志文件最大 32M
CSSM_LOG_SPACE_LIMIT = 0
#不限定日志文件总占用空间
2)启动监视器
进入E:\dmdbms\bin目录
cmd
dmcssm.exe INI_PATH=E:\DCA\cssm\dmcssm.ini
16、备份还原
我测试的是从归档还原,因为操作频繁,时间短,所以还原前最好checkpoint一下,让数据进入归档文件。
如下面的例子,我先备份一下,再创建一张表test2并插入数据,如果是从备份集还原的话,test2是不存在的,如果是从归档还原的话,则会有test2。
说明:本例归档存储在节点上,不是存储在共享盘上。
BACKUP DATABASE BACKUPSET '/home/dmdba/dmdbms/BAK/db_full_bak_for_dsc2';
create table test2(id int,name varchar);
insert into test2 values(1,'test');
insert into test2 values(1,'test2');
commit;
checkpoint(100);
./dmrman dcr_ini=/home/dmdba/dmdbms/config/dmdcr.ini
restore DATABASE '/home/dmdba/dmdbms/config/dsc1_config/dm.ini' FROM BACKUPSET '/home/dmdba/dmdbms/BAK/db_full_bak_for_dsc2';
recover DATABASE '/home/dmdba/dmdbms/config/dsc1_config/dm.ini' with archivedir '/home/dmdba/dmdbms/arch_1','/home/dmdba/dmdbms/arch_1_remote';
recover DATABASE '/home/dmdba/dmdbms/config/dsc1_config/dm.ini' update db_magic;
更多资讯请上达梦技术社区了解: https://eco.dameng.com