1 安装前准备
1.1 硬件准备
类别 | 配置 |
服务器 | 2台数据库服务器(物理机)。 |
网卡 | 每台机器至少3块网卡。 2块必须为万兆网卡,分别连到不同的万兆交换机上,并在服务器端做冗余,给服务器1个IP地址。 1块为千/万兆网卡,对外提供服务。 |
交换机 | 2台万兆交换机。 |
HBA卡 | 每台数据库服务器必须有两块HBA卡连接光纤交换机,做冗余和负载均衡。 |
磁盘阵列 | 1台共享存储,两台服务器都连接到同一个存储上(共享存储只需要映射到服务器端fdisk -l可以查看到就行,不需要格式化)。 另:可在主节点上挂第2台存储(需格式化好),用于备份数据文件等。 |
1.2 集群架构
1.3 硬件环境建议
心跳网络方面:①集群间的心跳网络要走数据,最好走两个交换机,来实现冗余和负载均衡。②需要把服务器多个心跳网卡绑定为一个逻辑网卡来使用(比如bond方式)。③交换机速度建议为万兆。
存储网络方面:①每台数据库服务器上必须有两块HBA卡连接光纤交换机,做冗余和负载均衡。
存储方面:①两台服务器都连接到同一个存储上(共享存储只需要映射到服务器端fdisk -l可以查看到就行,不需要格式化)。②节点1所在服务器单独挂存储,需要格式化好,用来备份数据等,文件系统建议使用ext4。
1.4 硬件环境环境验证
心跳网络方面:①关闭其中一台交换机或者模拟其中一条线路故障,是否能做到网络方面的冗余。②测试心跳网络的稳定性,会不会出现断连或者丢包等情况。
1.5 集群规划
A机器 | B机器 | |||
业务IP | 10.238.154.182 | 10.238.154.183 | ||
心跳IP | 10.238.155.9 | 10.238.155.10 | ||
软件目录 | /install | /install | ||
安装目录 | /dmdba/dmdbms | /dmdba/dmdbms | ||
配置文件目录 | /dmdba/dmdsc | /dmdba/dmdsc | ||
归档日志目录 | +DMDATA/arch/arch_0 | +DMDATA/arch/arch_1 | ||
远程归档目录 | +DMDATA/arch/arch_1 | +DMDATA/arch/arch_0 | ||
备份目录 | /dmdba/dmdsc/bak | /dmdba/dmdsc/bak | ||
dmdcr_cfg | CSS | DCR_EP_NAME | CSS0 | CSS1 |
DCR_EP_HOST | 10.238.155.9 | 10.238.155.10 | ||
DCR_EP_PORT | 5336 | 5337 | ||
ASM | DCR_EP_NAME | ASM0 | ASM1 | |
DCR_EP_HOST | 10.238.155.9 | 10.238.155.10 | ||
DCR_EP_PORT | 5436 | 5437 | ||
DB | DCR_EP_NAME | DSC0 | DSC1 | |
DCR_EP_PORT | 5236 | 5236 | ||
DCR_CHECK_PORT | 5536 | 5537 | ||
dmasvrmal | MAL_INST_NAME | ASM0 | ASM1 | |
MAL_HOST | 10.238.155.9 | 10.238.155.10 | ||
MAL_PORT | 5636 | 5637 | ||
dminit | PORT_NUM | 5236 | 5236 | |
MAL_HOST | 10.238.155.9 | 10.238.155.10 | ||
MAL_PORT | 5736 | 5737 | ||
归档上限 | 51200 | 51200 | ||
OGUID | 45331 |
1.6 设置网卡自启
A机器、B机器依次修改
[root@~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
[root@~]# systemctl restart network
1.7 创建用户、目录、安装数据库
A/B机器:将数据库安装在/dmdba/dmdbms目录下
[root@~]# mkdir -p /dmdba/dmdbms /dmdba/dmdsc /dmdba/dmbak
[root@~]# chown dmdba.dinstall /dmdba -R;
2 存储准备
2.1 划存储
用途 空间规划(总共6T)
sdb1用于dcr信息 100M
sdb2用于存放vote信息 100M
sdb3用于存放redo log 20480M
sdb4用于存放data 剩下的全部空间
A机器:小于2TB的存储使用fdisk命令来划分
[root@~]# fdisk /dev/sdb
1) 依次输入 n p 1 回车 +100M,完成第一块磁盘划分
2) 依次输入 n p 2 回车 +100M,完成第二块磁盘划分
3) 依次输入 n p 3 回车 +20480M,完成第三块磁盘划分
4) 依次输入 n p 回车 回车 回车,完成第四块磁盘划分
5) 输入w命令,将裸设备划分的设置进行保存
A机器:大于2TB的需要使用parted命令来划分
[root@~]# parted /dev/sdb
1) 输入 mklabel gpt 回车,将MBR磁盘磁盘转换为gpt格式
2) 输入 mkpart primary 0 100 回车,完成第一块磁盘划分
3) 输入 mkpart primary 100 200 回车,完成第二块磁盘划分
4) 输入 mkpart primary 200 20680 回车,完成第三块磁盘划分
5) 输入 mkpart primary 20680 5498G 回车,完成第四块磁盘划分
6) 输入 quit 回车,完成磁盘划分
A机器、B机器依次执行
[root@~]# partprobe /dev/sdb
2.2 挂存储方法1:直接挂
A机器、B机器依次修改
[root@~]# vi /etc/udev/rules.d/70-persistent-ipoib.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"
[root@~]# partprobe /dev/sdb
[root@~]# reboot
注意:可通过blockdev --getsize64 /dev/raw/raw*命令查看设备大小。
2.3 挂存储方法2:多路径绑定
1.设置了多路径的块设备,可通过fdisk –l查看多路径的路径,
2. 利用脚本,生成配置文件。假设路径名称为/dev/mapper/mpathb 至/dev/mapper/mpathe,共4个lun
# cat mpath.sh
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
for i in mpathb mpathc mpathd mpathe;
do
str1="$i:`udevadm info --query=all --name=/dev/mapper/$i | grep DM_UUID`"
str2=${str1#*=}
echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${str2}\",SYMLINK+=\"asm-${i}\",OWNER=\"dmdba\",GROUP=\"dinstall\",MODE=\"0755\"" >> $curr/88-dm-asmdevices.rules
done
#执行上述脚本,生成88-dm-asmdevices.rules
./mpath.sh
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342697bdcefdae7fd52cfd1b00db",SYMLINK+="asm-mpathb",OWNER="dmdba",GROUP="dinstall",MODE="0755"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342449774d0d2c16d990fd6300db",SYMLINK+="asm-mpathc",OWNER="dmdba",GROUP="dinstall",MODE="0755"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342a2b1bd08d28e0d58c5db300db",SYMLINK+="asm-mpathd",OWNER="dmdba",GROUP="dinstall",MODE="0755"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b34208f0b5c5d515dd41dfde300db",SYMLINK+="asm-mpathe",OWNER="dmdba",GROUP="dinstall",MODE="0755"
手动修改SYMLINK
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342697bdcefdae7fd52cfd1b00db",SYMLINK+="asm-dcr",OWNER="dmdba",GROUP="dinstall",MODE="0755"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342449774d0d2c16d990fd6300db",SYMLINK+="asm-vote",OWNER="dmdba",GROUP="dinstall",MODE="0755"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342a2b1bd08d28e0d58c5db300db",SYMLINK+="asm-log",OWNER="dmdba",GROUP="dinstall",MODE="0755"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b34208f0b5c5d515dd41dfde300db",SYMLINK+="asm-data",OWNER="dmdba",GROUP="dinstall",MODE="0755"
3. 复制 88-dm-asmdevices.rules 配置文件到DSC集群的所有节点的相关目录下
cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules
4. 使配置文件生效
systemctl restart multipathd.service
systemctl restart systemd-udevd.service
检查是否生效:
blockdev --getsize64 /dev/asm-dcr
blockdev --getsize64 /dev/asm-vote
blockdev --getsize64 /dev/asm-log
blockdev --getsize64 /dev/asm-data
#保证每节点能正常显示磁盘大小,说明磁盘绑定成功
3 搭建DSC
3.1 创建dmdcr_cfg.ini
A机器、B机器配置相同
[dmdba@~]# vi /dmdba/dmdsc/dmdcr_cfg.ini
DCR_N_GRP = 3 #集群环境有多少个GROUP,范围:1~16
DCR_VTD_PATH = /dev/asm-vote
DCR_OGUID = 45331
[GRP] #新建一个GROUP
DCR_GRP_TYPE = CSS #组类型(CSS/ASM/DB)
DCR_GRP_NAME = GRP_CSS #组名
DCR_GRP_N_EP = 2 #组内节点个数
DCR_GRP_DSKCHK_CNT = 120 #磁盘心跳容错时间,单位:秒
[GRP_CSS]
DCR_EP_NAME = CSS0 #CSS节点名
DCR_EP_HOST = 10.238.155.9 #心跳地址
DCR_EP_PORT = 5336 #CSS端口
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 10.238.155.10
DCR_EP_PORT = 5337
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 120
[GRP_ASM]
DCR_EP_NAME = ASM0 #ASM节点名,和dmasvrmal的MAL_INST_NAME一致
DCR_EP_SHM_KEY = 93360 #共享内存标识
DCR_EP_SHM_SIZE = 10 #共享内存大小
DCR_EP_HOST = 10.238.155.9 #心跳地址
DCR_EP_PORT = 5436 #ASM端口
DCR_EP_ASM_LOAD_PATH = /dev
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 10.238.155.10
DCR_EP_PORT = 5437
DCR_EP_ASM_LOAD_PATH = /dev
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = GRP_DSC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 120
[GRP_DSC]
DCR_EP_NAME = DSC0 #实例名,和dm.ini的INSTANCE_NAME一致
DCR_EP_SEQNO = 0 #组内序号,不能重复
DCR_EP_PORT = 5236 #实例端口,和dm.ini的PORT_NUM一致
DCR_CHECK_PORT = 5536 #DCR检查端口
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 5537
3.2 初始化磁盘组
A机器
[dmdba@~]# /dmdba/dmdbms/bin/dmasmcmd
ASM> create dcrdisk '/dev/asm-dcr' 'dcr'
ASM> create votedisk '/dev/asm-vote' 'vote'
ASM> create asmdisk '/dev/asm-log' 'LOG0'
ASM> create asmdisk '/dev/asm-data' 'DATA0'
ASM> init dcrdisk '/dev/asm-dcr' from '/dmdba/dmdsc/dmdcr_cfg.ini' identified by 'admin1234'
ASM> init votedisk '/dev/asm-vote' from '/dmdba/dmdsc/dmdcr_cfg.ini'
3.3 创建dmasvrmal.ini
A机器、B机器配置相同
[dmdba@~]# vi /dmdba/dmdsc/dmasvrmal.ini
[MAL_INST1]
MAL_INST_NAME = ASM0
MAL_HOST = 10.238.155.9 #心跳地址
MAL_PORT = 5636 #MAL监听端口
[MAL_INST2]
MAL_INST_NAME = ASM1
MAL_HOST = 10.238.155.10
MAL_PORT = 5637
3.4 创建dmdcr.ini
A机器
[dmdba@~]# vi /dmdba/dmdsc/dmdcr.ini
DMDCR_PATH = /dev/asm-dcr
DMDCR_MAL_PATH = /dmdba/dmdsc/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_AUTO_OPEN_CHECK = 90
#DMDCR_ASM_RESTART_INTERVAL = 30 #CSS认定ASM故障重启的时间
#DMDCR_ASM_STARTUP_CMD = /dmdba/dmdbms/bin/dmasmsvr dcr_ini=/dmdba/dmdsc/dmdcr.ini
#DMDCR_DB_RESTART_INTERVAL = 60 #CSS认定DSC故障重启的时间
#DMDCR_DB_STARTUP_CMD = /dmdba/dmdbms/bin/dmserver path=/dmdba/dmdsc/dsc0_config/dm.ini dcr_ini=/dmdba/dmdsc/dmdcr.ini
B机器
[dmdba@~]# vi /dmdba/dmdsc/dmdcr.ini
DMDCR_PATH = /dev/asm-dcr
DMDCR_MAL_PATH = /dmdba/dmdsc/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_AUTO_OPEN_CHECK = 90
#DMDCR_ASM_RESTART_INTERVAL = 30
#DMDCR_ASM_STARTUP_CMD = /dmdba/dmdbms/bin/dmasmsvr dcr_ini=/dmdba/dmdsc/dmdcr.ini
#DMDCR_DB_RESTART_INTERVAL = 60
#DMDCR_DB_STARTUP_CMD = /dmdba/dmdbms/bin/dmserver path=/dmdba/dmdsc/dsc1_config/dm.ini dcr_ini=/dmdba/dmdsc/dmdcr.ini
注意:当前为手动拉起A机器和B机器的ASM和DMSERVER服务。待集群配置完成后,再修改为自动拉起(删除dmdcr.ini中红色井号)。
3.5 启动CSS、ASM服务
A机器、B机器依次执行
[dmdba@~]# /dmdba/dmdbms/bin/dmcss DCR_INI=/dmdba/dmdsc/dmdcr.ini
...
DMCSS IS READY
A机器、B机器依次执行
[dmdba@~]# /dmdba/dmdbms/bin/dmasmsvr DCR_INI=/dmdba/dmdsc/dmdcr.ini
...
the ASM server is Ready.
3.6 创建DMASM磁盘组
A机器
[dmdba@~]# /dmdba/dmdbms/bin/dmasmtool DCR_INI=/dmdba/dmdsc/dmdcr.ini
ASM> create diskgroup 'DMLOG' asmdisk '/dev/asm-log'
ASM> create diskgroup 'DMDATA' asmdisk '/dev/asm-data'
3.7 创建dminit.ini
A机器、B机器配置相同
[dmdba@~]# vi /dmdba/dmdsc/dminit.ini
db_name = dsc
system_path = +DMDATA/data
main = +DMDATA/data/dsc/main.dbf
main_size = 128
roll = +DMDATA/data/dsc/roll.dbf
roll_size = 128
system = +DMDATA/data/dsc/system.dbf
system_size = 128
ctl_path = +DMDATA/data/dsc/dm.ctl
ctl_size = 8
log_size = 2048
dcr_path = /dev/asm-dcr
dcr_seqno = 0
auto_overwrite = 1
PAGE_SIZE = 32 #页大小
CASE_SENSITIVE = Y #大小写是否敏感,Y敏感,N不敏感
CHARSET = 0 #字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
EXTENT_SIZE = 32 #簇大小
BLANK_PAD_MODE = 0 #是否开启空格填充,默认0,0不开启,1开启
[DSC0]
config_path = /dmdba/dmdsc/dsc0_config
port_num = 5236
mal_host = 10.238.155.9
mal_port = 5736
log_path = +DMLOG/log/dsc0_log01.log
log_path = +DMLOG/log/dsc0_log02.log
[DSC1]
config_path = /dmdba/dmdsc/dsc1_config
port_num = 5236
mal_host = 10.238.155.10
mal_port = 5737
log_path = +DMLOG/log/dsc1_log01.log
log_path = +DMLOG/log/dsc1_log02.log
3.8 初始化实例
A机器
--初始化实例
[dmdba@~]# /dmdba/dmdbms/bin/dminit control=/dmdba/dmdsc/dminit.ini
...
create dm database success. 2020-11-14 21:25:31
--拷贝文件
[dmdba@~]# scp -r /dmdba/dmdsc/dsc1_config dmdba@10.238.155.10:/dmdba/dmdsc/
3.9 创建dmarch.ini
A机器
--修改dm.ini
[dmdba@~]# vi /dmdba/dmdsc/dsc0_config/dm.ini
ARCH_INI = 1
--创建dmarch.ini
[dmdba@~]# vi /dmdba/dmdsc/dsc0_config/dmarch.ini
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/arch/arch_0
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = +DMDATA/arch/arch_1
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
B机器
--修改dm.ini
[dmdba@~]# vi /dmdba/dmdsc/dsc1_config/dm.ini
ARCH_INI = 1
--创建dmarch.ini
[dmdba@~]# vi /dmdba/dmdsc/dsc1_config/dmarch.ini
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/arch/arch_1
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH = +DMDATA/arch/arch_0
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200
3.10 启动DMSERVER服务
A机器
[dmdba@~]# /dmdba/dmdbms/bin/dmserver /dmdba/dmdsc/dsc0_config/dm.ini dcr_ini=/dmdba/dmdsc/dmdcr.ini
B机器
[dmdba@~]# /dmdba/dmdbms/bin/dmserver /dmdba/dmdsc/dsc1_config/dm.ini dcr_ini=/dmdba/dmdsc/dmdcr.ini
3.11 注册CSS、ASM、DMSERVER后台服务
A机器
[root@~]# /dmdba/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dmdba/dmdsc/dmdcr.ini -p CSS
[root@~]# /dmdba/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dmdba/dmdsc/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@~]# /dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dmdba/dmdsc/dsc0_config/dm.ini -dcr_ini /dmdba/dmdsc/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC
B机器
[root@~]# /dmdba/dmdbms/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dmdba/dmdsc/dmdcr.ini -p CSS
[root@~]# /dmdba/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dmdba/dmdsc/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@~]# /dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dmdba/dmdsc/dsc1_config/dm.ini -dcr_ini /dmdba/dmdsc/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC
4 配置监视器
4.1 创建dmcssm.ini
A机器、B机器配置相同
[dmdba@~]# vi /dmdba/dmdbms/bin/dmcssm.ini
CSSM_OGUID = 45331
CSSM_CSS_IP = 10.238.155.9:5336
CSSM_CSS_IP = 10.238.155.10:5337
CSSM_LOG_PATH = /dmdba/dmdbms/log
CSSM_LOG_FILE_SIZE = 512
CSSM_LOG_SPACE_LIMIT = 2048
4.2 监视器使用
命令 | 含义 |
show | 查看所有组的信息 |
show config | 查看dmdcr_cfg.ini 的配置信息 |
show monitor | 查看当前连接到主 CSS 的所有监视器信息 |
5 启停服务
5.1 启动监视器
[dmdba@~]# /dmdba/dmdbms/bin/dmcssm INI_PATH=/dmdba/dmdbms/bin/dmcssm.ini
5.2 启停集群
启动:A/B机器CSS→A/B机器ASM→A/B机器DMSERVER
A/B机器:[dmdba@~]# /dmdba/dmdbms/bin/DmCSSServiceCSS start
A/B机器:[dmdba@~]# /dmdba/dmdbms/bin/DmASMSvrServiceASM start
A/B机器:[dmdba@~]# /dmdba/dmdbms/bin/DmServiceDSC start
停止: A/B机器DMSERVER→A/B机器ASM→A/B机器CSS
A/B机器:[dmdba@~]# /dmdba/dmdbms/bin/DmServiceDSC stop
A/B机器:[dmdba@~]# /dmdba/dmdbms/bin/DmASMSvrServiceASM stop
A/B机器:[dmdba@~]# /dmdba/dmdbms/bin/DmCSSServiceCSS stop
说明:1)DSC正常停库必须2节点同时停止,根据目前脚本配置,CSS启动后30秒自动拉起ASM,60秒自动拉起DMSERVER,所以停止DMSERVER和ASM后,要尽快停止CSS,避免被自动拉起。2)ASM服务在任意节点停止,2个节点的ASM服务都会停止,为了保险起见,可以两边都执行停止命令。3)服务全部停止后,要检查后台进程是否全部停止。