1、概述
DM 共享存储数据库集群的英文全称 DM Data Shared Cluster,简称 DMDSC。
DM 共享存储数据库集群,允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。DMDSC 支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供。
DMDSC 集群主要由数据库和数据库实例、共享存储、DMASM 或 DMASM 镜像、本地存储、通信网络、集群控制软件 DMCSS、集群监视器 DMCSSM 组成。DMDSC 集群最多支持 8 个数据库实例节点。下图展示了一个两节点的 DMDSC 集群系统结构图。
DMDSC主要特点:
(1)高可用性
(2)高吞吐量
(3)负载均衡
2、搭建环境规划
本次DMDSC搭建共2台主机。
操作系统版本 | 银河麒麟Linux kylin10 4.19.90-24.4.v2101.ky10.x86_64 |
数据库版本 | DM Database Server 64 V8 |
2.1 IP地址和端口规划
主机1(dm01) | 主机2(dm02) | |
业务IP | 192.168.7.110 | 192.168.7.111 |
内部数据交换网络IP | 192.168.50.10 | 192.168.50.20 |
配置项 | 参数 | 主机1(dm01) | 主机2(dm02) | |
dmdcr_cfg | CSS | DCR_EP_NAME | CSS0 | CSS1 |
DCR_EP_HOST | 192.168.50.10 | 192.168.50.20 | ||
DCR_EP_PORT | 11286 | 11286 | ||
ASM | DCR_EP_NAME | ASM0 | ASM1 | |
DCR_EP_HOST | 192.168.50.10 | 192.168.50.20 | ||
DCR_EP_PORT | 11276 | 11276 | ||
DB | DCR_EP_NAME | DSC0 | DSC1 | |
DCR_EP_PORT | 5236 | 5236 | ||
DCR_CHECK_PORT | 11256 | 11256 | ||
dmasvrmal | MAL_INST_NAME | ASM0 | ASM1 | |
MAL_HOST | 192.168.50.10 | 192.168.50.20 | ||
MAL_PORT | 11266 | 11266 | ||
dminit | INSTANCE_NAME | DSC0 | DSC1 | |
PORT_NUM | 5236 | 5236 | ||
MAL_HOST | 192.168.50.10 | 192.168.50.20 | ||
MAL_PORT | 11246 | 11246 | ||
OGUID | 210715 |
2.2 本地磁盘规划
名称 | 主机1(dm01) | 主机2(dm02) |
数据库安装目录 | /dm8 | /dm8 |
数据库备份目录 | /dm8/backup | /dm8/backup |
数据库SQL日志目录 | /dm8/dmsqllog | /dm8/dmsqllog |
集群配置文件目录 | /dm8/dsc_config | /dm8/dsc_config |
2.3 共享磁盘规划
使用openfiler共享存储服务器。
用途 | 磁盘名 | 大小 | 共享磁盘映射路径 | UDEV配置路径 |
DCR盘 | DCR | 5G | /dev/sdb | /dev/dm/asm-diskb |
vote磁盘 | VOTE | 5G | /dev/sdc | /dev/dm/asm-diskc |
redo日志盘 | DMLOG | 50G | /dev/sdd | /dev/dm/asm-diskd |
data数据盘 | DMDATA | 500G | /dev/sde | /dev/dm/asm-diske |
arch归档盘 | DMARCH | 500G | /dev/sdf | /dev/dm/asm-diskf |
3、数据库软件安装
本章节的操作在集群的两个节点主机都需要进行,步骤相同
3.1 关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
3.2 创建数据库用户和组
groupadd dinstall
useradd -g dinstall dmdba
#用户密码Dameng123
passwd dmdba
3.3 安装数据库软件
#创建安装目录
mkdir -p /dm8
chown dmdba.dinstall -R /dm8
ls -ld /dm8/
#解压安装包,并挂载
unzip dm8_20240712_x86_rh7_64.zip
mount -o loop dm8_20240712_x86_rh7_64.iso /mnt
#命令行安装
cd /mnt
./DMInstall.bin -i
过程略,注意将软件安装到/dm8目录,主库和备库的安装步骤相同。
4、共享存储配置
本次搭建的存储使用openfiler映射的磁盘进行操作。
openfiler系统搭建和磁盘划分,请参考:
http://t.csdnimg.cn/QQC0Ehttp://t.csdnimg.cn/QQC0E
4.1 安装iSCSI启动器软件包
[root@DM01 opt]# yum -y install iscsi-initiator*
[root@DM01 ~]# rpm -qa | grep iscsi
iscsi-initiator-utils-iscsiuio-6.2.0.874-7.el7.x86_64
iscsi-initiator-utils-6.2.0.874-7.el7.x86_64
[root@DM01 ~]#
4.2 配置iSCSI
配置iSCSI配置文件
[root@DM01 ~]# vi /etc/iscsi/iscsid.conf
设置iSCSI自启
[root@DM01 opt]# systemctl enable iscsi.service
[root@DM01 opt]# systemctl list-unit-files|grep iscsi
4.3 注册openfiler存储
Kylin主机上扫描openfiler iscsi控制器,将客户端Kylin主机注册到openfiler存储上。
[root@DM01 opt]# iscsiadm -m discovery -t sendtargets -p 192.168.50.50
192.168.50.50:3260,1 iqn.2006-01.com.openfiler:tsn.fee309ff79a0
重启
[root@DM01 opt]#reboot
验证
[root@DM01 ~]# fdisk -l
Disk /dev/sda:80 GiB,85899345920 字节,167772160 个扇区
磁盘型号:VMware Virtual S
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4d59a9f1
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sda1 2048 6143 4096 2M 83 Linux
/dev/sda2 * 6144 2103295 2097152 1G 83 Linux
/dev/sda3 2103296 144726015 142622720 68G 8e Linux LVM
Disk /dev/mapper/klas-root:40 GiB,42949672960 字节,83886080 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/mapper/klas-swap:4 GiB,4294967296 字节,8388608 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/mapper/klas-home:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/mapper/klas-tmp:4 GiB,4294967296 字节,8388608 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sdb:5 GiB,5368709120 字节,10485760 个扇区
磁盘型号:VIRTUAL-DISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sdc:5 GiB,5368709120 字节,10485760 个扇区
磁盘型号:VIRTUAL-DISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sdd:50 GiB,53687091200 字节,104857600 个扇区
磁盘型号:VIRTUAL-DISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sde:500 GiB,536870912000 字节,1048576000 个扇区
磁盘型号:VIRTUAL-DISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sdf:500 GiB,536870912000 字节,1048576000 个扇区
磁盘型号:VIRTUAL-DISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@DM01 ~]#
4.4 使用UDEV挂载存储
使用脚本获取udev配置信息
for i in b c d e f;
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-disk$i\",OWNER=\"dmdba\", GROUP=\"dinstall\",MODE=\"0660\""
done;
编辑udev配置文件
[root@DM01 rules.d]# vi /etc/udev/rules.d/99-dameng-asmdevices.rules
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="14f504e46494c45526542485334382d6a4d32692d45396a53", SYMLINK+="dm/asm-diskb",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="14f504e46494c45523330506c57422d685030362d38496258", SYMLINK+="dm/asm-diskc",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="14f504e46494c45526f386a3376452d613577542d51516c58", SYMLINK+="dm/asm-diskd",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="14f504e46494c45526f5a66496b582d6b4457362d56354563", SYMLINK+="dm/asm-diske",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="14f504e46494c4552706b365767582d725349472d5877386f", SYMLINK+="dm/asm-diskf",OWNER="dmdba", GROUP="dinstall",MODE="0660"
重启udev
udevadm control --reload-rules
udevadm trigger
验证
[root@DM01 rules.d]# ll /dev/dm/asm*
lrwxrwxrwx 1 root root 6 9月 11 9:08 /dev/dm/asm-diskb -> ../sdb
lrwxrwxrwx 1 root root 6 9月 11 9:08 /dev/dm/asm-diskc -> ../sdc
lrwxrwxrwx 1 root root 6 9月 11 9:08 /dev/dm/asm-diskd -> ../sdd
lrwxrwxrwx 1 root root 6 9月 11 9:08 /dev/dm/asm-diske -> ../sde
lrwxrwxrwx 1 root root 6 9月 11 9:08 /dev/dm/asm-diskf -> ../sdf
两个主机都要进行配置,步骤相同。
5、搭建DMDSC集群
5.1 创建配置文件目录
用户:dmdba
主机1
mkdir -p /dm8/dsc_config/DSC0
主机2
mkdir -p /dm8/dsc_config/DSC1
与 DMDSC 相关的配置文件包括:
(1)DMDCR_CFG.INI 是格式化非镜像环境下 DCR DISK、VOTE DISK 和镜像环境下 DCRV 磁盘的配置文件。
(2)DMDCR.INI 是 DMCSS、DMASMSVR、DMASMTOOL 等工具的输入参数。记录了当前节点序列号以及 DCR 磁盘路径。
(3)DMINIT.INI是 DMINIT 工具初始化数据库环境的配置文件。
(4)MAL 系统配置文件(DMMAL.INI、DMASVRMAL.INI)。
(5)DM.INI是 DMSERVER 使用的配置文件。
(6)DMARCH.INI 是开启本地归档或远程归档时使用的配置文件。
(7)DMCSSM.INI 是 DMCSSM 监视器的配置文件。
5.2 创建dmdcr_cfg.ini
主机1(dm01)、主机2(dm02)配置相同
[dmdba@DM01 dsc_config]$ vi /dm8/dsc_config/dmdcr_cfg.ini
[dmdba@DM01 dsc_config]$ vi /dm8/dsc_config/dmdcr_cfg.ini
DCR_N_GRP = 3 ##集群环境有多少个 GROUP,范围:1~16
DCR_VTD_PATH = /dev/dm/asm-diskb ##规划为 vote 的磁盘路径
DCR_OGUID = 210715 ## 消息标识,一个组里面只有一个。
[GRP] #新建一个 GROUP
DCR_GRP_TYPE = CSS ##组类型(CSS/ASM/DB)
DCR_GRP_NAME = GRP_CSS ##组名
DCR_GRP_N_EP = 2 ##组内节点个数
DCR_GRP_DSKCHK_CNT = 65 ##磁盘心跳容错时间,单位:秒
[GRP_CSS]
DCR_EP_NAME = CSS0 ##CSS 节点名
DCR_EP_HOST = 192.168.50.10 ##心跳地址
DCR_EP_PORT = 11286 ##CSS 端口
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.50.20
DCR_EP_PORT = 11286
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 61
[GRP_ASM]
DCR_EP_NAME = ASM0 ##ASM 节点名,和 dmasvrmal 的 MAL_INST_NAME 一致
DCR_EP_SHM_KEY = 42424 ##共享内存标识
DCR_EP_SHM_SIZE = 1024 ##共享内存大小
DCR_EP_HOST = 192.168.50.10 ##心跳地址
DCR_EP_PORT = 11276 ##ASM 端口
DCR_EP_ASM_LOAD_PATH = /dev/dm ## ASM磁盘扫描路径
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 42425
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.50.20
DCR_EP_PORT = 11276
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 = 57
[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 = 11256 ##DCR 检查端口
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 11256
5.3 初始化磁盘
主机1 (dm01)进行操作
[dmdba@DM01 dsc_config]$ cd /dm8/bin
[dmdba@DM01 bin]$ ./dmasmcmd
dmasmcmd V8
create dcrdisk '/dev/dm/asm-diskb' 'dcr'
create votedisk '/dev/dm/asm-diskc' 'vote'
create asmdisk '/dev/dm/asm-diskd' 'LOG0'
create asmdisk '/dev/dm/asm-diske' 'DATA0'
create asmdisk '/dev/dm/asm-diskf' 'ARCH0'
init dcrdisk '/dev/dm/asm-diskb' from '/dm8/dsc_config/dmdcr_cfg.ini' identified by 'admin1234'
init votedisk '/dev/dm/asm-diskc' from '/dm8/dsc_config/dmdcr_cfg.ini'
5.4 创建dmasvrmal.ini
主机1(dm01)、主机2(dm02)配置相同
vi /dm8/dsc_config/dmasvrmal.ini
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.50.10 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.50.20
MAL_PORT = 11266
将该文件分别拷贝至 dm01 和 dm02 主机下的 /dm8/dsc_config/DSC0和/dm8/dsc_config/DSC1 目录下。
5.5 创建dmdcr.ini
主机1(dm01)配置
vi /dm8/dsc_config/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-diskb ##记录DCR磁盘路径
DMDCR_MAL_PATH = /dm8/dsc_config/DSC0/dmasvrmal.ini ##保存DMMAL.INI配置文件的路径,仅对DMASMSVR有效
DMDCR_SEQNO = 0 ##当前节点序列号
DMDCR_AUTO_OPEN_CHECK = 90 ##时间内节点实例未启动,节点将被踢出集群,大于30S,单位秒
##DMDCR_ASM_TRACE_LEVEL = 2
##DMDCR_ASM_RESTART_INTERVAL = 30
##DMDCR_ASM_STARTUP_CMD = /dm8/bin/dmasmsvr dcr_ini=/dm8/dsc_config/dmdcr.ini
##DMDCR_DB_RESTART_INTERVAL = 60
##DMDCR_DB_STARTUP_CMD = /dm8/bin/dmasmsvr path=/dm8/dsc_config/DSC0/dm.ini dcr_ini=/dm8/dsc_config/dmdcr.ini
主机2(dm02)配置
vi /dm8/dsc_config/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-diskb
DMDCR_MAL_PATH = /dm8/dsc_config/DSC1/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_AUTO_OPEN_CHECK = 90
##DMDCR_ASM_TRACE_LEVEL = 2
##DMDCR_ASM_RESTART_INTERVAL = 30
##DMDCR_ASM_STARTUP_CMD = /dm8/bin/dmasmsvr dcr_ini=/dm8/dsc_config/dmdcr.ini
##DMDCR_DB_RESTART_INTERVAL = 60
##DMDCR_DB_STARTUP_CMD = /dm8/bin/dmasmsvr path=/dm8/dsc_config/DSC1/dm.ini dcr_ini=/dm8/dsc_config/dmdcr.ini
当前为手动拉起两台主机的ASM和DMSERVER服务,待集群配置完成后,再修改为自动拉起,删除配置文件中的“##”
5.6 启动CSS、ASM服务
主机1(dm01)、主机2(dm02)依次执行
5.6.1 手动启动CSS服务
主机1(dm01)
[dmdba@DM01 bin]$ /dm8/bin/dmcss DCR_INI=/dm8/dsc_config/dmdcr.ini
主机2(dm02)
[dmdba@DM02 bin]$ /dm8/bin/dmcss DCR_INI=/dm8/dsc_config/dmdcr.ini
5.6.2 手动启动ASM服务
主机1(dm01)
[dmdba@DM01 ~]$ /dm8/bin/dmasmsvr DCR_INI=/dm8/dsc_config/dmdcr.ini
主机2(dm02)
[dmdba@DM02 ~]$ /dm8/bin/dmasmsvr DCR_INI=/dm8/dsc_config/dmdcr.ini
5.7 创建DMASM磁盘组
主机1(dm01)
create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-diskd'
create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-diske'
create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-diskf'
[dmdba@DM01 ~]$ /dm8/bin/dmasmtool DCR_INI=/dm8/dsc_config/dmdcr.ini
DMASMTOOL V8
ASM>
ASM>create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-diskd'
Used time: 244.463(ms).
ASM>
ASM>create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-diske'
Used time: 593.892(ms).
ASM>create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-diskf'
Used time: 620.568(ms).
ASM>
5.8 创建dminit.ini
主机1(dm01)、主机2(dm02)配置相同
vi /dm8/dsc_config/dminit.ini
vi /dm8/dsc_config/dminit.ini
DB_NAME = DSC ##数据库名称
SYSDBA_PWD = Dameng123
SYSTEM_PATH = +DMDATA/data ##初始化数据库存放的路径
SYSTEM = +DMDATA/data/SYSTEM.dbf ##SYSTEM表空间路径
SYSTEM_SIZE = 1024 ##SYSTEM表空间大小
ROLL = +DMDATA/data/ROLL.dbf
ROLL_SIZE = 10000
MAIN = +DMDATA/data/MAIN.dbf
MAIN_SIZE = 1024
CTL_PATH = +DMDATA/data/dm.ctl
CTL_SIZE = 8
LOG_SIZE = 2048
DCR_PATH = /dev/dm/asm-diskb
DCR_SEQNO = 0
AUTO_OVERWRITE = 1 ##是否覆盖建库目录下所有同名文件。0不覆盖、1部分覆盖、2完全覆盖
PAGE_SIZE = 32
EXTENT_SIZE = 16
BLANK_PAD_MODE = 1
[DSC0]
CONFIG_PATH = /dm8/dsc_config/DSC0
PORT_NUM = 5236
MAL_HOST = 192.168.50.10
MAL_PORT = 11246
LOG_PATH = +DMLOG/DSC0_LOG01.log
LOG_PATH = +DMLOG/DSC0_LOG02.log
[DSC1]
CONFIG_PATH = /dm8/dsc_config/DSC1
PORT_NUM = 5236
MAL_HOST = 192.168.50.20
MAL_PORT = 11246
LOG_PATH = +DMLOG/DSC1_LOG01.log
LOG_PATH = +DMLOG/DSC1_LOG02.log
5.9 初始化实例
主机1(dm01)
[dmdba@DM01 ~]$ /dm8/bin/dminit control=/dm8/dsc_config/dminit.ini
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-07-03
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: +DMLOG/DSC0_LOG01.log
log file path: +DMLOG/DSC0_LOG02.log
log file path: +DMLOG/DSC1_LOG01.log
log file path: +DMLOG/DSC1_LOG02.log
write to dir [+DMDATA/data/DSC].
create dm database success.
将主机1初始化实例产生的配置文件目录/dm8/dsc_config/DSC1,拷贝到主机2
[dmdba@DM01 dsc_config]$ scp -r /dm8/dsc_config/DSC1 dmdba@192.168.50.20:/dm8/dsc_config/
5.10 创建dmarch.ini
主机1(dm01)
修改dm.ini,打开归档
[dmdba@DM01 DSC0]$ pwd
/dm8/dsc_config/DSC0
将ARCH_INI参数值0改为1
[dmdba@DM01 DSC0]$ vi dm.ini
ARCH_INI = 1
编辑归档配置文件
[dmdba@DM01 DSC0]$ pwd
/dm8/dsc_config/DSC0
[dmdba@DM01 DSC0]$ vi dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC0/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE ##远程归档
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
主机2(dm02)
修改dm.ini,打开归档
[dmdba@DM02 DSC1]$ pwd
/dm8/dsc_config/DSC1
将ARCH_INI参数值0改为1
[dmdba@DM02 DSC1]$ vi dm.ini
ARCH_INI = 1
编辑归档配置文件
[dmdba@DM02 DSC1]$ pwd
/dm8/dsc_config/DSC1
[dmdba@DM02 DSC1]$ vi dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC0/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
5.11 手动启动DMSERVER服务
主机1(dm01)
[dmdba@DM01 DSC0]$ /dm8/bin/dmserver /dm8/dsc_config/DSC0/dm.ini dcr_ini=/dm8/dsc_config/dmdcr.ini
主机2(dm02)
[dmdba@DM02 DSC1]$ /dm8/bin/dmserver /dm8/dsc_config/DSC1/dm.ini dcr_ini=/dm8/dsc_config/dmdcr.ini
6、监视器配置
配置监视器,两个主机配置相同,监视器可以在任何一个主机上启动,也可以使用第三台主机。本次不使用第三台主机。
主机1(dm01)
[dmdba@DM01 ~]$ pwd
/home/dmdba
[dmdba@DM01 ~]$ vi dmcssm.ini
CSSM_OGUID = 210715 ##用于和 DMCSS 通信校验使用,和 DMDCR_CFG.INI 中的 DCR_OGUID 值保持一致
CSSM_CSS_IP = 192.168.50.10:11286 ##对应 DMDCR_CFG.INI 中 DMCSS 节点的 DCR_EP_HOST 和 DCR_EP_PORT。
CSSM_CSS_IP = 192.168.50.20:11286
CSSM_LOG_PATH = /dm8/log
CSSM_LOG_FILE_SIZE = 32
CSSM_LOG_SPACE_LIMIT = 2048
主机2(dm02)
[dmdba@DM02 ~]$ pwd
/home/dmdba
[dmdba@DM02 ~]$ vi dmcssm.ini
CSSM_OGUID = 210715
CSSM_CSS_IP = 192.168.50.10:11286
CSSM_CSS_IP = 192.168.50.20:11286
CSSM_LOG_PATH = /dm8/log
CSSM_LOG_FILE_SIZE = 32
CSSM_LOG_SPACE_LIMIT = 2048
手动前台启动
/dm8/bin/dmcssm INI_PATH=/home/dmdba/dmcssm.ini
6.1 监视器使用
命令 | 说明 |
show | 查看所有组的信息 |
show config | 查看dmdcr_cfg.ini的配置信息 |
show monitor | 查看当前连接到主CSS的所有监视器信息 |
说明
group[]行显示的内容为:
name: 集群名称。
seq: 集群编号。
type: 集群组类型。包含:CSS、ASM、DB。
control_node: 集群内控制节点。
ep 行显示的内容为:
inst_name:节点实例名。
seqno:节点编号。
port:实例对外提供服务的端口号。
mode:节点模式。包括:CONTROL(控制节点)、NORMAL(普通节点)。
inst_status:实例系统状态。包括:INSTALL(初始化数据库)、STARTUP(节点启动)、AFTER REDO(启动,REDO 完成)、MOUNT(挂载)、OPEN(正常打开)、SUSPEND(挂起)、SHUTDOWN(关闭)、CRASH_RECV(出现节点故障)、INVALID EP STATUS(集群非 OPEN 状态下,不支持故障处理,可能是集群同步服务 DMCSS 或监视器 DMCSSM 版本过旧导致)。
vtd_status:实例的集群状态。包括:STARTUP(启动)、STARTUP2(启动第二步)、WORKING(工作中)、TO SHUTDOWN(准备关闭)、SHUTDOWN(已经关闭)、SYSHALT(系统崩溃)、STOP(停止)、ADD_DCRV(添加 DCRV 磁盘)、DEL_DCRV(删除 DCRV 磁盘)。
is_ok:实例在集群内是否正常。OK 是,ERROR 否。ERROR 节点暂时从集群内踢出。
active: 实例是否活动。TRUE 是,FALSE 否。
guid:实例的 GUID 值。
集群关闭:
完整退出 DMDSC 集群的正确步骤为:依次退出 DMSERVER、DMASMSVR、DMCSS,未按照该顺序进行将导致节点异常退出。
先关闭主机1/主机2的 DMSERVER
关闭主机1/主机2的DMASM
关闭主机1/主机2的DMCSS
集群启动:
(1)手动启动依次是共享存储
-->主机1/主机2的DMCSS
-->主机1/主机2的DMASM
-->主机1/主机2的DMSERVER
(2)如果注册了后台服务,依次启动主机1/主机2的DMCSS,CSS启动后会自动拉起ASM和DMSERVER
7、相关视图
视图 | 说明 |
V$DSC_EP_INFO | 显示实例信息。 |
V$DSC_LOCK | 显示全局活动的事务锁信息 |
V$DSC_TRX | 显示所有系统中所有的事务以及相关信息,如锁信息等。 |
V$ASMGROUP | ASM磁盘组信息 |
V$ASMDISK | ASM磁盘信息 |
V$ASMFILE | 所有的ASM文件信息 |
V$DCR_INFO | 显示配置的全局信息 |
--示例 查看实例信息
SQL> select * from v$DSC_EP_INFO;
行号 EP_NAME EP_SEQNO EP_GUID EP_TIMESTAMP EP_MODE EP_STATUS
---------- ------- ----------- -------------------- -------------------- ------------ ---------
1 DSC0 0 1634 7920 Control Node OK
2 DSC1 1 1693 7957 Normal Node OK
--示例 查看ASM磁盘组信息
SQL> select * from v$ASMGROUP;
行号 GROUP_ID GROUP_NAME N_DISK AU_SIZE EXTENT_SIZE(AU) TOTAL_SIZE FREE_SIZE TOTAL_FILE_NUM TYPE REDO_SIZE(MB) RBL_STAT RBL_PWR AU_SIZE_MB TOTAL_MB
---------- ----------- ---------- ----------- ----------- --------------- ----------- ----------- -------------- ------ ------------- -------- ----------- ----------- -----------
FREE_MB
-----------
1 0 DMLOG 1 1048576 4 51167 42964 5 EXTERN 1 DISABLE 0 1 51167
42964
2 1 DMDATA 1 1048576 4 511967 499700 18 EXTERN 1 DISABLE 0 1 511967
499700
3 2 DMARCH 1 1048576 4 511967 507832 8 EXTERN 1 DISABLE 0 1 511967
507832
4 125 VOTE 1 1048576 4 5120 5096 2 EXTERN 1 DISABLE 0 1 5120
5096
5 126 DCR 1 1048576 4 5120 5096 2 EXTERN 1 DISABLE 0 1 5120
5096
已用时间: 1.741(毫秒). 执行号:104.
8、两节点 DSC + 实时备机集群安装部署
单机备库环境规划
名称 | 路径 |
数据库安装目录 | /dm8 |
数据库备份目录 | /dm8/backup |
数据库归档目录 | /dm8/arch |
数据文件目录 | /dm8/data |
配置项 | 信息 |
数据库服务器主机名 | DM03 |
业务IP | 192.168.7.112 |
内部数据交换IP | 192.168.50.30 |
INSTANCE_NAME | DW01 |
DB_NAME | DW01 |
PORT_NUM | 5236 |
MAL_PORT | 11246 |
MAL_DW_PORT | 52141 |
MAL_INST_DW_PORT | 5276 |
8.1 备库安装数据库软件
略,请参考本文章节3 进行安装。与DSC集群的两台安装方式相同。
8.2 搭建单机DW备库
8.2.1 备份DSC集群数据
DSC集群两个节点启动CSS和ASM。
CSS启动-主机1(dm01)
[dmdba@DM01 bin]$ /dm8/bin/dmcss DCR_INI=/dm8/dsc_config/dmdcr.ini
CSS启动-主机2(dm02)
[dmdba@DM02 bin]$ /dm8/bin/dmcss DCR_INI=/dm8/dsc_config/dmdcr.ini
ASM启动-主机1(dm01)
[dmdba@DM01 ~]$ /dm8/bin/dmasmsvr DCR_INI=/dm8/dsc_config/dmdcr.ini
ASM启动-主机2(dm02)
[dmdba@DM02 ~]$ /dm8/bin/dmasmsvr DCR_INI=/dm8/dsc_config/dmdcr.ini
DSC集群-主机1(dm01) 备份数据,并发送备份目录到备库(dm03)。
(1)备份 dm01 机器数据
backup database '/dm8/dsc_config/DSC0/dm.ini' full backupset '/dm8/backup/BACKUP_FILE' compressed level 5 parallel 8;
(2)检查备份文件的有效性
check backupset '/dm8/backup/BACKUP_FILE';
(3)将备份文件发送到主机dm03
scp -r /dm8/backup/BACKUP_FILE/ dmdba@192.168.50.30:/dm8/backup
8.2.2 备库初始化实例
/dm8/bin/dminit path=/dm8/data db_name=DW01 instance_name=DW01 sysdba_pwd=Dameng123 port_num=5236 page_size=32 extent_size=16
8.2.3 备库还原DSC集群数据
#登录dmrman
/dm8/bin/dmrman
#检查备份文件有效性
check backupset '/dm8/backup/BACKUP_FILE';
#还原
RESTORE DATABASE '/dm8/data/DW01/dm.ini' FROM BACKUPSET '/dm8/backup/BACKUP_FILE';
#恢复
RECOVER DATABASE '/dm8/data/DW01/dm.ini' FROM BACKUPSET '/dm8/backup/BACKUP_FILE';
更新魔数
RECOVER DATABASE '/dm8/data/DW01/dm.ini' UPDATE DB_MAGIC;
8.2.4 修改dm.ini
(1)修改dm01和 dm02主机中dm.ini参数。
dm01和 dm02主机配置相同。
主机1(dm01)
vi /dm8/dsc_config/DSC0/dm.ini
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
主机2(dm02)
vi /dm8/dsc_config/DSC1/dm.ini
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
(2)主机3(dm03)备库中的dm.ini参数
vi /dm8/data/DW01/dm.ini
INSTANCE_NAME = DW01 #实例名
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志发送信息
8.2.5 创建 dmmal.ini
dm01、dm02 和 dm03 主机配置 dmmal.ini(dmmal.ini 和 dm.ini 放在同一路径下),三台主机的 dmmal.ini 文件内容必须一致。
##主机1(dm01)
vi /dm8/dsc_config/DSC0/dmmal.ini
##主机2(dm02)
vi /dm8/dsc_config/DSC1/dmmal.ini
##主机3(dm03)
vi /dm8/data/DW01/dmmal.ini
##配置文件内容
MAL_CHECK_INTERVAL=87
MAL_CONN_FAIL_INTERVAL=33
[MAL_INST0]
MAL_INST_NAME = DSC0
MAL_HOST = 192.168.50.10
MAL_PORT = 11246
MAL_INST_HOST = 192.168.7.110
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 5276
[MAL_INST1]
MAL_INST_NAME = DSC1
MAL_HOST = 192.168.50.20
MAL_PORT = 11246
MAL_INST_HOST = 192.168.7.111
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 5276
[MAL_INST2]
MAL_INST_NAME = DW01
MAL_HOST = 192.168.50.30
MAL_PORT = 11246
MAL_INST_HOST = 192.168.7.112
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 5276
8.2.6 创建 dmarch.ini
(1)主机1(dm01) 节点配置 dmarch.ini
[dmdba@DM01 DSC0]$ vi /dm8/dsc_config/DSC0/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC0/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = DW01
(2)主机2(dm02) 节点配置 dmarch.ini
[dmdba@DM02 DSC1]$ vi /dm8/dsc_config/DSC1/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC0/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = DW01
(3)主机3(dm03) 节点配置 dmarch.ini
[dmdba@DM03 DW01]$ vi /dm8/data/DW01/dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DSC0/DSC1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 204800
8.2.7 创建 dmwatcher.ini
(1)主机1(dm01)节点配置 dmwatcher.ini
[dmdba@DM01 dsc_config]$ cat /dm8/dsc_config/DSC0/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 120
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 120
INST_OGUID = 453331
INST_INI = /dm8/dsc_config/DSC0/dm.ini
DCR_INI=/dm8/dsc_config/dmdcr.ini
INST_STARTUP_CMD = /dm8/bin/dmserver
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
[dmdba@DM01 dsc_config]$
(2)主机2(dm02) 节点配置 dmwatcher.ini
[dmdba@DM02 dsc_config]$ cat /dm8/dsc_config/DSC1/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 120
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 120
INST_OGUID = 453331
INST_INI = /dm8/dsc_config/DSC1/dm.ini
DCR_INI=/dm8/dsc_config/dmdcr.ini
INST_STARTUP_CMD = /dm8/bin/dmserver
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
(3)主机3(dm03) 节点配置 dmwatcher.ini
[dmdba@DM03 DW01]$ cat /dm8/data/DW01/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL#手动切换模式
DW_ERROR_TIME = 120 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 120 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm8/data/DW01/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 0 #设置实例不自动拉起
INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
8.2.8 启动数据库并修改参数
关闭已经启动的ASM和CSS服务,再分别依次重启 DSC 2 节点的 CSS及 ASM 服务,然后以 mount 方式分别启动 DSC 及备库 的DMSERVER 服务。
主机1(dm01)
/dm8/bin/dmserver /dm8/dsc_config/DSC0/dm.ini dcr_ini=/dm8/dsc_config/dmdcr.ini mount
主机2(dm02)
/dm8/bin/dmserver /dm8/dsc_config/DSC1/dm.ini dcr_ini=/dm8/dsc_config/dmdcr.ini mount
主机3(dm03)
/dm8/bin/dmserver /dm8/data/DW01/dm.ini mount
(1)主机1(dm01) 节点使用 disql 连接 DSC数据库执行:
[dmdba@DM01 dsc_config]$ /dm8/bin/disql sysdba/Dameng123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 3.849(ms)
disql V8
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 10.039(毫秒). 执行号:1.
SQL> sp_set_oguid(453331);
DMSQL 过程已成功完成
已用时间: 64.393(毫秒). 执行号:2.
SQL> alter database primary;
操作已执行
已用时间: 78.625(毫秒). 执行号:0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 9.616(毫秒). 执行号:3.
SQL>
(2)主机3(dm03) 节点使用 disql 连接备库数据库执行 :
[dmdba@DM03 DW01]$ /dm8/bin/disql sysdba/Dameng123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 3.175(ms)
disql V8
SQL>
SQL>
SQL>
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 4.470(毫秒). 执行号:1.
SQL> sp_set_oguid(453331);
DMSQL 过程已成功完成
已用时间: 1.653(毫秒). 执行号:2.
SQL> alter database standby;
操作已执行
已用时间: 16.899(毫秒). 执行号:0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 4.416(毫秒). 执行号:3.
SQL>
8.2.9 启动守护进程
主机1(dm01)
/dm8/bin/dmwatcher /dm8/dsc_config/DSC0/dmwatcher.ini
主机2(dm02)
/dm8/bin/dmwatcher /dm8/dsc_config/DSC1/dmwatcher.ini
主机3(dm03)
/dm8/bin/dmwatcher /dm8/data/DW01/dmwatcher.ini
8.2.10 配置监视器DSC+DW
主机1(dm01)、主机2(dm02)和主机3(dm03)的配置相同。
在DSC的2个节点和备库上分别创建配置文件dmmonitor.ini。
vi /dm8/bin/dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm8/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.7.110:52141/192.168.7.111:52141
MON_DW_IP = 192.168.7.112:52141
启动监视器
[dmdba@DM03 ~]$ /dm8/bin/dmmonitor /dm8/bin/dmmonitor.ini
8.2.11 主备库数据同步测试
(1)登录主库(DM01主机)和备库(DM03主机)的disql
(2) 主库创建表t1,插入数据,备库查询
(3)主库提交数据,备库查询
可以看到备库已经能够查询到主库提交的数据。
——.——
参考文档: