DMDSC搭建
DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。
本文开始进行DMDSC集群的搭建学习。
环境配置
虚拟机配置
-
参数详情
设备 摘要 内存 2GB 处理器 2 硬盘(SCSI) 30G 硬盘2(SCSI) 20G CD/DVD(IDE) 自动检测 网络适配器 NAT 网络适配器2 自定义(VMnet2) -
配置第二块磁盘:
-
虚拟机点击设置>添加"硬盘"
-
选择磁盘类型
-
创建新磁盘
-
指定磁盘大小(20G足够了),注意这里是用的单个磁盘文件
-
指定磁盘文件
-
完成后重新打开设置,点击硬盘2,选择高级选项,勾选模式为独立、永久
- 如果独立勾选不了,说明虚拟机上存在快照,删掉就可以勾选
-
-
在第二台虚拟机上同样添加这个磁盘
-
使用现有磁盘
-
选择前面创建好了的那个磁盘位置
-
一样是在高级选项中选择独立、永久
-
-
修改两台虚拟机的vmx配置
-
找到虚拟机下的vmx文件,打开,添加如下内容
shellscsi1.sharedBus = "virtual" scsi1:1.deviceType = "disk" disk.locking = "false" diskLib.dataCacheMaxSize = "0" diskLib.dataCacheMaxReadAheadSize = "0" diskLib.DataCacheMinReadAheadSize = "0" diskLib.dataCachePageSize = "4096" diskLib.maxUnsyncedWrites = "0" disk.EnableUUID = "TRUE"
-
-
启动虚拟机查看情况
shellfdisk -l lsblk
- sdb就是新增的共享磁盘,表示磁盘添加成功
-
-
操作系统和数据库版本
- 操作系统:CentOS7.9
- 数据库版本:dm8_20240408_x86_rh7_64
磁盘及基本规划
目录规划
用途 | 目录路径 |
---|---|
数据库软件安装目录 | /home/dmdba/dmdbms |
本地归档日志文件存放目录 | /home/dmdba/dmarch |
远程归档日志文件存放目录 | /home/dmdba/remote_arch |
备份文件存放目录 | /home/dmdba/dmbak |
共享磁盘规划
-
将共享磁盘分为四个区,用途及大小如下:
用途 磁盘/分区 空间大小 存放dcr信息 /dev/sdb1 1GB 存放vote信息 /dev/sdb2 1GB 存放redo日志 /dev/sdb3 10GB 存放数据文件 /dev/sdb4 8GB
端口规划
-
两个主机最好使用相同用途的端口配置成相同的端口号
端口 用途 5236 数据库实例dmrw监听端口 9741 DCR检查数据库实例监听端口 9341 CSS进程TCP连接端口 9351 ASM进程TCP连接端口 7236 ASM的MAL系统TCP连接端口 9236 数据库实例的MAL系统TCP连接端口 -
防火墙需要开放以上的端口
shellnetstat -ano | grep 5236
-
服务器规划
服务器 | IP | 心跳IP | 数据库实例名 |
---|---|---|---|
DSC1 | 192.168.19.130 | 10.10.10.7 | dmrw/DSC1 |
DSC2 | 192.168.19.137 | 10.10.10.4 | dmrw/DSC2 |
系统准备
-
数据库安装
- 每个DSC节点都要安装DM数据库,只用安装数据库即可,不太需要进行初始化数据库实例
-
关闭系统防火墙
-
查看防火墙状态,如果显示为active,需要关闭防火墙,禁用则开机不启动防火墙。
shellsystemctl status firewalld.service systemctl stop firewalld.service systemctl disable firewalld.service
-
-
关闭SELinux
-
查看是否开启了SELinux,如果显示为Enforcing,需要改为Disabled,再重启系统使配置生效。
shellgetenforce vi /etc/selinux/config # 进入文件后修改 SELINUX = disabled # 保存退出文件 reboot
-
磁盘分区及绑定
磁盘分区(DSC1)
-
分区(DSC1)
fdisk /dev/sdb
-
依次输入下列信息:
shelln → p → 1 → "回车" → 1G # dcr n → p → 2 → "回车" → 1G # vote n → p → 3 → "回车" → 10G # log0 n → p → 4 → "回车" → 回车 # data0 w # 保存
- 这里我输入1G不管用,所以参照着输入的扇区位置(正好都是想要的大小)
-
查看分区(DSC1)
shellfdisk -l /dev/sdb
-
DSC2上查看分区
- 如果DSC2没有显示分区,可能是共享磁盘挂载失败,需要删除之后重新加载
-
配置裸设备(DSC1 & DSC2)
需要在两个节点上都操作
-
新建udev规则文件(DSC1 & DSC2)
shellvi /etc/udev/rules.d/90-raw.rules
-
添加以下内容:
shellACTION=="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" KERNEL=="raw[1-4]", OWNER="dmdba", GROUP="dinstall", MODE="660"
-
执行命令使udev生效
shelludevadm trigger --type=devices --action=change
-
查看配置是否成功
shellll /dev/raw/raw*
- 如果查看不到配置的裸设备,就重启一下服务器
-
添加配置文件
配置DRC初始化配置文件(DSC1 & DSC2)
创建配置文件存放目录
两个节点都要执行,使用dmdba用户
shell
mkdir -p /home/dmdba/config
新建dmdrc_cfg.ini文件
-
节点1使用dmdba用户
shellvim /home/dmdba/config/dmdcr_cfg.ini
-
添加以下内容:
shellDCR_N_GRP = 3 DCR_VTD_PATH = /dev/raw/raw2 DCR_OGUID = 63635 [GRP] DCR_GRP_TYPE = CSS DCR_GRP_NAME = CSS DCR_GRP_N_EP = 2 DCR_GRP_DSKCHK_CNT = 60 [CSS] DCR_EP_NAME = CSS1 DCR_EP_HOST = 10.10.10.7 DCR_EP_PORT = 9341 [CSS] DCR_EP_NAME = CSS2 DCR_EP_HOST = 10.10.10.4 DCR_EP_PORT = 9341 [GRP] DCR_GRP_TYPE = ASM DCR_GRP_NAME = ASM DCR_GRP_N_EP = 2 DCR_GRP_DSKCHK_CNT = 60 [ASM] DCR_EP_NAME = ASM1 DCR_EP_SHM_KEY = 93360 DCR_EP_SHM_SIZE = 10 DCR_EP_HOST = 10.10.10.7 DCR_EP_PORT = 9351 DCR_EP_ASM_LOAD_PATH = /dev/raw [ASM] DCR_EP_NAME = ASM2 DCR_EP_SHM_KEY = 93361 DCR_EP_SHM_SIZE = 10 DCR_EP_HOST = 10.10.10.4 DCR_EP_PORT = 9351 DCR_EP_ASM_LOAD_PATH = /dev/raw [GRP] DCR_GRP_TYPE = DB DCR_GRP_NAME = DSC DCR_GRP_N_EP = 2 DCR_GRP_DSKCHK_CNT = 60 [DSC] DCR_EP_NAME = DSC1 DCR_EP_SEQNO = 0 DCR_EP_PORT = 5236 DCR_CHECK_PORT = 9741 [DSC] DCR_EP_NAME = DSC2 DCR_EP_SEQNO = 1 DCR_EP_PORT = 5236 DCR_CHECK_PORT = 9741
创建ASM磁盘(DSC1)
-
使用dmdba用户,到DM数据库安装目录下的bin目录中执行命令
shell./dmasmcmd
-
进入ASM提示符后执行以下命令:
shellcreate dcrdisk '/dev/raw/raw1' 'dcr' create votedisk '/dev/raw/raw2' 'vote' create asmdisk '/dev/raw/raw3' 'LOG0' create asmdisk '/dev/raw/raw4' 'DATA0'
-
初始化磁盘
-
使用编辑好的dmdrc_cfg.ini文件初始化drcdisk和votedisk,并在ASM提示符执行以下命令
shellinit dcrdisk '/dev/raw/raw1' from '/home/dmdba/config/dmdcr_cfg.ini' identified by '1314520dsy' init votedisk '/dev/raw/raw2' from '/home/dmdba/config/dmdcr_cfg.ini'
-
配置ASM的MAL系统配置文件(DSC1 & DSC2)
两个节点都要配置,且文件内容相同
-
执行以下命令:
shellvi /home/dmdba/config/dmasvrmal.ini
-
添加以下内容
shell[MAL_INST1] MAL_INST_NAME = ASM1 MAL_HOST = 10.10.10.7 MAL_PORT = 7236 [MAL_INST2] MAL_INST_NAME = ASM2 MAL_HOST = 10.10.10.4 MAL_PORT = 7236
-
配置DRC启动配置文件(DSC1 & DSC2)
-
两节点先创建dmdrc.ini文件
-
两者在内容上主要是DMDSC_SEQNO和PATH中实例名有差距
-
这里把ASM和DB的重启参数均设置为0,手动拉起ASM和DB服务
shellvi /home/dmdba/config/dmdcr.ini
-
-
节点1添加内容
shellDMDCR_PATH = /dev/raw/raw1 DMDCR_MAL_PATH =/home/dmdba/config/dmasvrmal.ini #dmasmsvr 使用的 MAL 配置文件路径 DMDCR_SEQNO = 0 #ASM 重启参数,命令行方式启动 DMDCR_ASM_RESTART_INTERVAL = 0 DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/config/dmdcr.ini #DB 重启参数,命令行方式启动 DMDCR_DB_RESTART_INTERVAL = 0 DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/config/dsc1/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini
-
节点2添加内容
shellDMDCR_PATH = /dev/raw/raw1 DMDCR_MAL_PATH =/home/dmdba/config/dmasvrmal.ini #dmasmsvr 使用的 MAL 配置文件路径 DMDCR_SEQNO = 1 #ASM 重启参数,命令行方式启动 DMDCR_ASM_RESTART_INTERVAL = 0 DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr dcr_ini=/home/dmdba/config/dmdcr.ini #DB 重启参数,命令行方式启动 DMDCR_DB_RESTART_INTERVAL = 0 DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver path=/home/dmdba/config/dsc2/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini
- 两个节点的DMDSC_SEQNO参数必须唯一,每个节点一个参数;DMDCR_DB_STARTUP_CMD 中启动脚本路径和配置文件路径要配置准确
- 如果不配置 css 自动启动 asm 和 db ,则需要配置 DMDCR_ASM_RESTART_INTERVAL 和DMDCR_DB_RESTART_INTERVAL 为 0
启动DMDSC集群
启动DMCSS服务(DMDSC1 & DMDSC2)
-
两个节点启动DMCSS,使用dmdba用户到数据库安装路径的bin目录下
shell# 前台方式启动 ./dmcss dcr_ini=/home/dmdba/config/dmdcr.ini
-
或者使用服务方式启动
shell# 服务方式启动 systemctl start DmCSSServicecss1/DmCSSServicecss2
注:
先启动的节点是控制节点。
启动ASM服务(DSC1 & DSC2)
-
两个节点启动ASM,使用dmdba用户到数据库安装路径的bin目录下
shell./dmasmsvr dcr_ini=/home/dmdba/config/dmdcr.ini
- 出现
ASM server is Ready
即为启动成功
- 出现
创建ASM磁盘组(DSC1)
-
ASM启动成功后,节点1在dmdba用户下启动dmasmtool工具
-
在ASM提示符下创建ASM磁盘组,创建REDO日志磁盘组和数据文件磁盘组
shell./dmasmtool dcr_ini=/home/dmdba/config/dmdcr.ini create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3' create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4' exit # 退出
-
初始化共享存储集群数据库实例(DSC1)
配置dminit控制文件(DSC1)
-
节点1使用dmdba用户执行命令
shellvi /home/dmdba/config/dminit.ini
-
添加以下内容
shelldb_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 = 1024 dcr_path = /dev/raw/raw1 #dcr 磁盘路径,目前不支持 asm,只能是裸设备 dcr_seqno = 0 auto_overwrite = 1 [DSC1] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应 config_path = /home/dmdba/config/dsc1 port_num = 5236 mal_host = 10.10.10.7 mal_port = 9236 log_path = +DMLOG/log/DSC1_log01.log log_path = +DMLOG/log/DSC1_log02.log [DSC2] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应 config_path = /home/dmdba/config/dsc2 port_num = 5236 mal_host = 10.10.10.4 mal_port = 9236 log_path = +DMLOG/log/DSC2_log01.log log_path = +DMLOG/log/DSC2_log02.log
-
初始化实例(DSC1)
-
节点1使用dmdba用户执行命令:
shell./dminit control=/home/dmdba/config/dminit.ini
- 显示
create dm database success
即说明初始化完成,并且会在ini控制文件目录下生成2个实例的配置文件
- 显示
-
-
复制相应配置文件(DSC1--->DSC2)
-
将DSC2目录复制到节点2上对应的目录下
shellscp -r dsc2 192.168.19.137:/home/dmdba/config/
- 注意要到对应的config目录下进行复制
-
-
注册服务(DSC1 & DSC2)
-
配置成功后需要注册为系统服务,方便启动和关闭集群,以及实现开机自动启动
-
两个节点都要注册,使用root用户,到数据库安装的script/root目录
-
节点1执行命令:
shell./dm_service_installer.sh -t dmcss -p css1 -dcr_ini /home/dmdba/config/dmdcr.ini
-
节点2执行命令:
shell./dm_service_installer.sh -t dmcss -p css2 -dcr_ini /home/dmdba/config/dmdcr.ini
-
-
-
关闭前台的CSS,以服务方式启动CSS
-
节点1命令:
shellsystemctl start DmCSSServicecss1
-
节点2命令:
shellsystemctl start DmCSSServicecss2
-
启动数据库实例(DSC1 & DSC2)
-
两个节点启动DB,使用dmdba用户到数据库安装的bin目录下执行命令
-
节点1:
shell./dmserver path=/home/dmdba/config/dsc1/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini
-
节点2:
shell./dmserver path=/home/dmdba/config/dsc2/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini
-
报错说明:
-
ASM连接异常:[code:-11041] ASM connection exception
-
原因:ASM服务未启动
-
解决方法:启动ASM服务
shell./dmasmsvr dcr_ini=/home/dmdba/config/dmdcr.ini
-
-
端口连接错误:comm_create_lsnr_sockets_low failed to create socket or listen port:5236,errno:107
- 原因:5236端口被占用,估计是之前的数据库实例建立的时候给占用了
- 解决:关闭已经启用了的数据库实例
-
不存在日志文件,无法启动数据库:+DMLOG/log/DSC_log01.log not exist,can not startup
-
原因:创建ASM磁盘组时,创建
DMLOG
失败 -
解决方法:启用dmasmtool工具,创建日志磁盘组(DSC1节点)
shell./dmasmtool dcr_ini=/home/dmdba/config/dmdcr.ini create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
-
重新创建数据库实例,目的是为了REDO日志可以指向磁盘组
-
数据库实例创建好之后,再重新启动,可以成功(注意重新将DSC2文件夹给复制到节点2)
-
-
-
验证集群状态
配置监视器(DSC1)
-
创建监视器配置文件
-
任意节点都可以(这里我就在DSC1上),执行命令:
shellvi /home/dmdba/config/dmcssm.ini
-
添加内容:
shell#和 dmdcr_cfg.ini 中的 DCR_OGUID 保持一致 CSSM_OGUID = 63635 #配置所有 CSS 的连接信息, #和 dmdcr_cfg.ini 中 CSS 配置项的 DCR_EP_HOST 和 DCR_EP_PORT 保持一致 CSSM_CSS_IP = 10.10.10.7:9341 CSSM_CSS_IP = 10.10.10.4:9341 CSSM_LOG_PATH =/home/dmdba/dmdbms/log #监视器日志文件存放路径 CSSM_LOG_FILE_SIZE = 1024 #每个日志文件最大 1024 MB CSSM_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
-
-
启动监视器
-
使用dmdba用户,到数据库安装目录的bin目录下执行命令:
shell./dmcssm ini_path=/home/dmdba/config/dmcssm.ini
-
-
输入命令查看状态
- inst_status为
OPEN
,vtd_status为WORKING
,active为TRUE
,说明服务正常
- inst_status为
数据库共享验证(DSC1 & DSC2)
-
DSC1 & DSC2都查询T1表,显示不存在
-
DSC1节点上创建T1表
SQLcreate table T1(id int,name varchar2(20));
-
DCS1节点向表格插入数据
SQLinsert into T1 values (1,'name1'),(2,'name2');
-
DSC2节点上查询数据
SQLselect * from T1;
-
DSC1节点commit提交数据,DSC2再次查询数据
SQL##DSC1 commit; ##DSC2 select * from T1;
- 成功查询到数据,说明可以同步
客户端验证(DSC1/DSC2)
-
任意一个节点上配置dm_svc.conf文件,执行命令(我这里在DSC2节点上配置)
shellvi /etc/dm_svc.conf
-
添加内容:
shelldmdsc=(192.168.19.130:5236,192.168.19.137:5236)
-
-
使用disql工具登录集群,查询视图v$dsc_ep_info,查看集群状态
shell./disql SYSDBA/SYSDBA@dmdsc ##查询v$dsc_ep_info视图 select * from v$dsc_ep_info;
归档配置
共享存储集群归档需要配置本地归档和远程归档(保证每个节点都有所有归档日志)
-
实例DSC1上配置
SQLalter database mount; alter database archivelog; alter database add archivelog 'DEST=/home/dmdba/dmarch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=102400'; alter database add archivelog 'DEST=dsc2, TYPE=REMOTE, FILE_SIZE=1024, SPACE_LIMIT=102400, INCOMING_PATH=/home/dmdba/remote_arch'; alter database open;
-
实例DSC2上配置
SQLalter database mount; alter database archivelog; alter database add archivelog 'DEST=/home/dmdba/dmarch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=102400'; alter database add archivelog 'DEST=dsc1, TYPE=REMOTE, FILE_SIZE=1024, SPACE_LIMIT=102400, INCOMING_PATH=/home/dmdba/remote_arch'; alter database open;
关闭DMDSC集群
- 关闭数据库:监视器中执行
ep stop dsc
- 关闭ASM:监视器中执行
ep stop asm
- 关闭css:各节点关闭自己的css:
systemctl stop DmCSSServicecss1/DmCSSServicecss2
注:
关闭顺序:dmserver--->dmasmsvr--->dmcss
总结
- 本次是进行了DMDSC的手动启动搭建,让我对磁盘划分、初始化有了一个新的认识。我主要的错误就是自己执行命令时想图方便,结果弄巧成拙,所以还是要一步一步来才好。