数据共享集群的架构如下
| 主机名 | IP | 心跳IP | 数据库名(db_name) | 实例名(instance_name) | 角色 |
|---|---|---|---|---|---|
| DSC-1 | 192.168.20.36 | 192.168.77.31 | dmdb | dmdb1 | 控制节点 |
| DSC-2 | 192.168.20.37 | 192.168.77.32 | dmdb | dmdb2 | 普通节点 |
DSC集群对心跳链路和共享存储有硬性需求,本文以wmware虚拟机为例演示如何配置心跳链路和共享存储
两台虚拟机各添加一块新网卡,如下图所示
通过 ifconfig 命令观察有无新网卡
如图,新网卡为 ens37 ,即网卡配置文件名为 ifcfg-ens37
##root用户执行
##DSC-1
vi /etc/sysconfig/network-scripts/ifcfg-ens37
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.77.31
GATEWAY=192.168.77.1
NETMASK=255.255.255.0
##DSC-2
vi /etc/sysconfig/network-scripts/ifcfg-ens37
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.77.32
GATEWAY=192.168.77.1
NETMASK=255.255.255.0
##两节点root都执行
systemctl restart NetworkManager
通过两节点的心跳IP互ping和telnet测试网络是否连通,能通即心跳链路配置完成
本篇的DSC集群使用DMASM,需要 DCR、VOTE、DMLOG、DMARCH、DMDATA 5个磁盘组
| 磁盘组 | 大小&块数 | 备注 |
|---|---|---|
| DCR | 2g*1 | DM 集群注册表(DCR)磁盘专门用于存储 DCR 文件。DCR 文件记录了存储、维护集群配置的详细信息。在一个集群环境中只能配置一个DCR 磁盘。 |
| VOTE | 2g*1 | VOTE 磁盘专门用于存储VTD 文件。VTD 文件记录了集群成员信息。在一个集群环境中只能配置一个VOTE 磁盘。 |
| DMLOG | 5g*1 | 用于存放数据库联机日志文件(.log),大小和块数可根据实际情况调整 |
| DMARCH | 5g*1 | 用于存放数据库归档文件,大小和块数可根据实际情况调整 |
| DMDATA | 20g*1 | 用于存放数据库数据文件,大小和块数可根据实际情况调整 |
根据上表的数量和大小,在任意一个节点上添加5块磁盘,要求硬盘独立永久,立即分配磁盘,单个硬盘文件
使用记事本修改虚拟机DSC-1存储目录下的 DSC_1.vmx 文件,添加以下内容
disk.locking = "FALSE"
disk.EnableUUID = "TRUE"
scsi1.sharedBus = "VIRTUAL"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.dataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
scsi0:1.deviceType = "disk"
scsi0:2.deviceType = "disk"
scsi0:3.deviceType = "disk"
scsi0:4.deviceType = "disk"
scsi0:5.deviceType = "disk"
使用记事本修改虚拟机DSC-2存储目录下的 DSC_2.vmx 文件,添加以下内容,目录需根据实际情况修改
scsi0:1.present = "TRUE"
scsi0:1.fileName = "D:\kvm\DSC_1\DCR.vmdk"
scsi0:2.present = "TRUE"
scsi0:2.fileName = "D:\kvm\DSC_1\VOTE.vmdk"
scsi0:2.mode = "independent-persistent"
scsi0:3.present = "TRUE"
scsi0:3.fileName = "D:\kvm\DSC_1\DMLOG.vmdk"
scsi0:3.mode = "independent-persistent"
scsi0:4.present = "TRUE"
scsi0:4.fileName = "D:\kvm\DSC_1\DMARCH.vmdk"
scsi0:4.mode = "independent-persistent"
scsi0:5.present = "TRUE"
scsi0:5.fileName = "D:\kvm\DSC_1\DMDATA.vmdk"
scsi0:5.mode = "independent-persistent"
disk.locking = "FALSE"
disk.EnableUUID = "TRUE"
scsi1.sharedBus = "VIRTUAL"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.dataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
scsi0:1.deviceType = "disk"
scsi0:2.deviceType = "disk"
scsi0:3.deviceType = "disk"
scsi0:4.deviceType = "disk"
scsi0:5.deviceType = "disk"
两个节点都通过 lsblk 和 fdisk -l 命令观察有无增的磁盘
验证两个节点的UUID是否一致
/usr/lib/udev/scsi_id -g -u -d /dev/sdb /usr/lib/udev/scsi_id -g -u -d /dev/sdc /usr/lib/udev/scsi_id -g -u -d /dev/sdd /usr/lib/udev/scsi_id -g -u -d /dev/sde /usr/lib/udev/scsi_id -g -u -d /dev/sdf
##两节点root用户执行
vi /etc/udev/rules.d/88-dm-asmdevices.rules
#DCR
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c291ebe03a149c8e765b291b2ab3",SYMLINK+="dm/asm-dcr",OWNER="dmdba",GROUP="dinstall",MODE="0660"
#VOTE
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29dca6d2fcdce8d965d7bb4c426",SYMLINK+="dm/asm-vote",OWNER="dmdba",GROUP="dinstall",MODE="0660"
#DMLOG
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29466f8d79b6767f5088c21b35b",SYMLINK+="dm/asm-dmlog",OWNER="dmdba",GROUP="dinstall",MODE="0660"
#DMARCH
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29b8ad156804bed633803488ac9",SYMLINK+="dm/asm-dmarch",OWNER="dmdba",GROUP="dinstall",MODE="0660"
#DMDATA
KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2937e7de6d20962e53736f5f41c",SYMLINK+="dm/asm-dmdata",OWNER="dmdba",GROUP="dinstall",MODE="0660"
若共享磁盘较多,可通过以下脚本批量生成后修改
vi uuid.sh
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
##以下根据自己环境中的盘符自行修改
for i in b c d e f g h i j k l m n o p q r s t u v w x;
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/asm-data$i\",OWNER=\"dmdba\",GROUP=\"dinstall\",MODE=\"0660\""
done
两个节点都重启UDEV
##两节点root用户执行
systemctl restart systemd-udev-trigger.service
udevadm control --reload-rules
udevadm trigger --subsystem-match=block --type=devices --action=change
查询验证
##两节点root用户执行
ls -l /dev/dm/*
DMDCR _CFG.INI 是格式化非镜像环境下 DCR DISK、VOTE DISK 和镜像环境下 DCRV磁盘的配置文件
##两节点dmdba用户执行
vi /dmdb/dmdata/dmdcr_cfg.ini
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/dm/asm-vote
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_GRP_NAME一致
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.77.31 #心跳IP
DCR_EP_PORT = 9341
[GRP_CSS]
DCR_EP_NAME = CSS2
DCR_EP_HOST = 192.168.77.32
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 = ASM1
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.77.31
DCR_EP_PORT = 9349
DCR_EP_ASM_LOAD_PATH = /dev/dm
[GRP_ASM]
DCR_EP_NAME = ASM2
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.77.32
DCR_EP_PORT = 9351
DCR_EP_ASM_LOAD_PATH = /dev/dm
[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 = DMDB1 #实例名
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5238
DCR_CHECK_PORT = 9741
[GRP_DSC]
DCR_EP_NAME = DMDB2
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5238
DCR_CHECK_PORT = 9742
##控制节点DSC-1的dmdba用户执行
vi /dmdb/dmdata/asmcmd.txt
#asm script file
create dcrdisk '/dev/dm/asm-dcr' 'DCR'
create votedisk '/dev/dm/asm-vote' 'VOTE'
create asmdisk '/dev/dm/asm-dmlog' 'DMLOG'
create asmdisk '/dev/dm/asm-dmdata' 'DMDATA'
create asmdisk '/dev/dm/asm-dmarch' 'DMARCH'
init dcrdisk '/dev/dm/asm-dcr' from '/dmdb/dmdata/dmdcr_cfg.ini' identified by '******'
init votedisk '/dev/dm/asm-vote' from '/dmdb/dmdata/dmdcr_cfg.ini'
DCR 初始化密码建议保存,后续可能使用
##只在控制节点dmdba用户执行
##创建磁盘并初始化DCR和VOTE
dmasmcmd script_file=/dmdb/dmdata/asmcmd.txt
dmasvrmal.ini 是 DMASM 使用的MAL系统的配置文件
##两节点dmdba用户执行
vi /dmdb/dmdata/dmasvrmal.ini
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.77.31
MAL_PORT = 7236
[MAL_INST2]
MAL_INST_NAME = ASM2
MAL_HOST = 192.168.77.32
MAL_PORT = 7237
##DSC-1 dmdba用户执行
vi /dmdb/dmdata/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-dcr
DMDCR_MAL_PATH =/dmdb/dmdata/dmasvrmal.ini #dmasmsvr 使用的 MAL 配置文件路径
DMDCR_SEQNO = 0
#ASM 重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 0 #ASM自动重启间隔时间,0为不自动重启
DMDCR_ASM_STARTUP_CMD = /dmdb/dmdbms/bin/dmasmsvr dcr_ini=/dmdb/dmdata/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0 #数据库实例自动重启间隔时间,0为不自动重启
DMDCR_DB_STARTUP_CMD = /dmdb/dmdbms/bin/dmserver path=/dmdb/dmdata/DMDB1_config/dm.ini dcr_ini=/dmdb/dmdata/dmdcr.ini
#DMDB1根据实际实例名修改
##DSC-2 dmdba用户执行
vi /dmdb/dmdata/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-dcr
DMDCR_MAL_PATH =/dmdb/dmdata/dmasvrmal.ini #dmasmsvr 使用的 MAL 配置文件路径
DMDCR_SEQNO = 1
##ASM 重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /dmdb/dmdbms/bin/dmasmsvr dcr_ini=/dmdb/dmdata/dmdcr.ini
##DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /dmdb/dmdbms/bin/dmserver path=/dmdb/dmdata/DMDB2_config/dm.ini dcr_ini=/dmdb/dmdata/dmdcr.ini
启动顺序是先启动css再启动asm,关闭顺序是先关闭asm再关闭css
##两节点dmdba用户执行
##启动dmcss
dmcss DCR_INI=/dmdb/dmdata/dmdcr.ini
启动成功后新开一个窗口,启动asm
##两节点dmdba用户执行
##启动dmasm
dmasmsvr DCR_INI=/dmdb/dmdata/dmdcr.ini
启动成功后dmcss会刷新日志,可以通过 show 命令查询集群状态
完成后新开窗口以进行下一步操作
##控制节点DSC-1的dmdba用户执行
dmasmtool DCR_INI=/dmdb/dmdata/dmdcr.ini
create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-dmlog'
create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-dmarch'
create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata'
#磁盘组中有多个磁盘使用以下加盘命令
#alter diskgroup 'DMDATA' add asmdisk '/dev/dm/asm-dmdata02'
操作成功会在两个节点前台启动的dmasmsvr中刷新日志
##控制节点DSC-1的dmdba用户执行
vi /dmdb/dmdata/dminit.ini
db_name = DMDB
system_path = +DMDATA/data
system = +DMDATA/data/DMDB/system.dbf
system_size = 1024
roll = +DMDATA/data/DMDB/roll.dbf
roll_size = 1024
main = +DMDATA/data/DMDB/main.dbf
main_size = 1024
ctl_path = +DMDATA/data/DMDB/dm.ctl
ctl_size = 8
log_size = 8192
dcr_path = /dev/dm/asm-dcr #dcr磁盘路径,目前不支持asm,只能是裸设备
dcr_seqno = 0
auto_overwrite = 1
page_size = 32 #页大小默认8K,建议配置为16K
charset=1 #字符集默认字符集是GB18030 即参数为0,如果是UTF-8需要加参数CHARSET,即参数为1
case_sensitive=0 #是否区分大小写,0不区分,1区分(默认区分大小写)
SYSDBA_PWD='******'
SYSAUDITOR_PWD='******'
SYSSSO_PWD='******'
[DMDB1] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应
config_path =/dmdb/dmdata/DMDB1_config
port_num = 5238
mal_host = 192.168.77.31
mal_port = 9340
log_path = +DMLOG/log/DMDB1_log01.log
log_path = +DMLOG/log/DMDB1_log02.log
[DMDB2] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应
config_path = /dmdb/dmdata/DMDB2_config
port_num = 5238
mal_host = 192.168.77.32
mal_port = 9341
log_path = +DMLOG/log/DMDB2_log01.log
log_path = +DMLOG/log/DMDB2_log02.log
##控制节点DSC-1的dmdba用户执行
dminit control=/dmdb/dmdata/dminit.ini
将DSC-2对应的数据文件 /dmdb/dmdata/DMDB2_config 复制到服务器目录下
##控制节点DSC-1的dmdba用户执行
scp -P 22 -r /dmdb/dmdata/DMDB2_config 192.168.20.32:/dmdb/dmdata/
##DSC-1 dmdba用户执行
dmserver /dmdb/dmdata/DMDB1_config/dm.ini dcr_ini=/dmdb/dmdata/dmdcr.ini
##DSC-2 dmdba用户执行
dmserver /dmdb/dmdata/DMDB2_config/dm.ini dcr_ini=/dmdb/dmdata/dmdcr.ini
启动成功会在控制节点 DSC-1 的CSS中刷新日志,show可查看集群状态
按次序关闭两个节点的 dmserver、dmasmsvr、dmcss,在前台启动窗口 ctrl+c 关闭
归档空间限制一般设置为归档盘最大空间的80%-90%,注意要将两个节点的 ARCH_SPACE_LIMIT 相加来计算归档空间限制
##DSC-1 dmdba用户执行
vi /dmdb/dmdata/DMDB1_config/dmarch.ini
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/DMDB1/arch
ARCH_FILE_SIZE = 1024 #根据实际情况修改
ARCH_SPACE_LIMIT = 2048 #根据实际情况修改
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DMDB2
ARCH_INCOMING_PATH = +DMARCH/DMDB2/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
ARCH_FLUSH_BUF_SIZE = 0
##DSC-2 dmdba用户执行
vi /dmdb/dmdata/DMDB2_config/dmarch.ini
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/DMDB2/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DMDB1
ARCH_INCOMING_PATH = +DMARCH/DMDB1/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
ARCH_FLUSH_BUF_SIZE = 0
建议在第三台服务器上部署确认监视器,若无条件在任意一台服务器上部署即可,建议所有节点都部署
##两节点dmdba用户执行
vi /dmdb/dmdata/dmcssm.ini
CSSM_OGUID=63635
#配置所有CSS的连接信息,跟dmdcr_cfg.ini中的CSS配置项的DCR_EP_HOST和DCR_EP_PORT保持一致
CSSM_CSS_IP=192.168.77.31:9341
CSSM_CSS_IP=192.168.77.32:9343
CSSM_LOG_PATH=/dmdb/dmdbms/log #监视器日志文件存放路径
CSSM_LOG_FILE_SIZE=32 #每个日志文件最大32M
CSSM_LOG_SPACE_LIMIT=0 #不限定日志文件总占用空间
##启动监视器
dmcssm INI_PATH=/dmdb/dmdata/dmcssm.ini
关闭SSL加密并打开归档
##两节点dmdba用户执行
vi /dmdb/dmdata/DMDB1_config/dm.ini
ENABLE_ENCRYPT=0
ARCH_INI=1
##两节点dmdba用户执行
cp $DM_HOME/bin/service_template/DmCSSService $DM_HOME/bin/
cp $DM_HOME/bin/service_template/DmASMSvrService $DM_HOME/bin/
cp $DM_HOME/bin/service_template/DmService $DM_HOME/bin/
vi $DM_HOME/bin/DmCSSService
DCR_INI_PATH="/dmdb/dmdata/dmdcr.ini"
vi $DM_HOME/bin/DmASMSvrService
DCR_INI_PATH="/dmdb/dmdata/dmdcr.ini"
##DSC-1 dmdba用户执行
vi $DM_HOME/bin/DmService
INI_PATH="/dmdb/dmdata/DMDB1_config/dm.ini"
DCR_INI_PATH="/dmdb/dmdata/dmdcr.ini"
##DSC-2 dmdba用户执行
vi $DM_HOME/bin/DmService
INI_PATH="/dmdb/dmdata/DMDB2_config/dm.ini"
DCR_INI_PATH="/dmdb/dmdata/dmdcr.ini"
验证启动脚本,按顺序依次启动 DmCSSService、DmASMSvrService、DmService
##两节点dmdba用户执行
DmCSSService start
DmASMSvrService start
DmService start
登录监视器查询集群状态
集群状态正常
##两节点root用户执行
cd /dmdb/dmdbms/script/root
#节点1
./dm_service_installer.sh -t dmcss -p css1 -dcr_ini /dmdb/dmdata/dmdcr.ini
#节点2
./dm_service_installer.sh -t dmcss -p css2 -dcr_ini /dmdb/dmdata/dmdcr.ini
按次序关闭数据库实例、ASM、CSS,再以系统服务的方式启动集群
##两节点dmdba用户执行
DmService stop
DmASMSvrService stop
DmCSSService stop
##root用户执行
#节点1
systemctl start DmCSSServicecss1
#节点2
systemctl start DmCSSServicecss2
通过监视器启动ASM和数据库实例,并查询集群状态
##控制节点DSC-1的dmdba用户执行
dmcssm INI_PATH=/dmdb/dmdata/dmcssm.ini
ep startup GRP_ASM
ep startup GRP_DSC
show
查询状态正常,DSC集群部署完成
文章
阅读量
获赞
