共享存储集群安装部署

共享存储集群(DSC)部署前应根据资源条件、前期适配情况,安装需求等因素,对硬件资源、软件环境等进行合理申请与规划。

一、两节点 DSC 集群安装部署

1.1 安装前准备

1.1.1 硬件环境

类别 推荐配置
服务器 两台数据库服务器,建议使用物理机。
内存 64 GB 以上
CPU 128 逻辑核以上
网卡 每台机器至少 3 块网卡。2 块必须为万兆网卡,分别连到不同的万兆交换机上,
并在服务器端做冗余,bond 给服务器 1 个 IP 地址。1 块为千/万兆网卡,对外提供服务。
交换机 (1)集群间的心跳网络要传输数据,最好使用两个交换机,来实现冗余和负载均衡。
交换机速度建议为万兆。
(2)需要把服务器多个心跳网卡绑定为一个逻辑网卡来使用 ( 比如 bond 方式 ) 。
本地磁盘 建议 100 GB 以上
HBA 卡 每台数据库服务器必须有两块 HBA 卡连接光纤交换机,做冗余和负载均衡。
磁盘阵列 (1)1 台共享存储,两台服务器都连接到同一个存储上 ( 共享存储只需要映射到
服务器端 fdisk -l 可以查看到就行,不需要格式化 ) 。
(2)主节点服务器可以单独挂第 2 台存储,用于备份数据等(需格式化好),文件系统建议使用 ext4。

1.1.2 软件环境

以下列举了在开始部署数据库之前,建议提前准备好的前置软件和操作系统配置,涉及 core 文件的生成路径和用来验证环境状态的相关命令工具等。

名称 版本 命令
操作系统 Linux 7 Cat /etc/*release
nkvers
系统时钟服务 ntp Chronyc sources -v
字符集 字符集: zh_CN echo $LANG
系统包 C 开发类 gcc:gcc-4.4.7-3.el6.x86_64 rpm –q gcc
系统 C 运行库 Linux(glibc 2.12 以上,内核 2.6) ldd --version
系统 C 开发类 gdb:gdb-7.2-60.el6.x86_64 gdb -v
系统包 JAVA 开发类 JDK:java version "1.7.0_09-icedtea Java -version
系统命令处理器 GNU bash, version 4.1.2(1)-release(x86_64-redhat-linux-gnu) bash --version
系统安全外壳协议 SSH ssh -V
远程终端协议 telnet telnet
输入/输出统计 iostat iostat
ODBC 组件 unixODBC odbc_config --version
跟踪进程栈 pstack pstack -V
性能分析工具 perf perf perf top
资源统计工具 nmon nmon nmon
磁盘监视工具 iotop Iotop iotop --version

1.1.3 集群架构

image.png

1.1.4 本地磁盘规划

名称 机器 A(db0) 机器 B(db1) 备注
数据库安装目录 /dm/dmdbms /dm/dmdbms 数据库安装路径,存放数据库运行日志等信息
数据库备份目录 /dm/dmbak /dm/dmbak 用于存放数据库备份文件
数据库 SQL 日志目录 /dm/dmsqllog /dm/dmsqllog 用于存放数据库 dmsql 日志
集群配置文件目录 /dm/dmdbms/dsc_config /dm/dmdbms/dsc_config 用于存放数据库集群配置文件
系统 core 目录 /dm/core /dm/core 用户存放系统的 core 文件

1.1.5 共享存储规划

DMDSC 集群为了实现多实例同时访问和修改数据,需要数据文件、控制文件和日志文件都放到共享存储上。DM 支持两种共享存储,裸设备和 DMASM,裸设备是未经过格式化的特殊字符设备,推荐使用 DMASM 共享存储。

其中,VOTE 是表决磁盘,一个集群一个表决磁盘。DCR 是 DM 集群注册表的简称,用于存储、维护集群配置的详细信息,一个集群一个注册表。生产环境中,共享存储一般由操作系统管理员进行划分。共享存储规划可参照下表:

名称 拟定配置 分区大小 备注
VOTE 磁盘 /dev/dm/asm-dmvote 5 GB 记录集群成员信息,集群通过 Voting Disk 进行心跳检测,确定集群中节点的状态
DCR 盘 /dev/dm/asm-dmdcr 5 GB 用于存储、维护集群配置的详细信息,整个集群环境共享 DCR 配置信息
Redo 日志盘 /dev/dm/asm-dmlog 50 GB 用于存储数据库集群 Redo log
数据盘 /dev/dm/asm-dmdata* 500 GB * X 用户存放数据
归档盘 /dev/dm/asm-dmarch 500 GB * 2 用于存储数据库集群各实例的归档日志
注意

以上磁盘大小可按照实际业务需要进行调整。Redo 日志盘的空间大小建议最小不少于 4G,否则会引起后面数据启动失败等问题。

1.1.6 端口规划

数据库服务器名称 db0 db1
业务服务名 [db_service_name]
业务 IP 192.168.100.1 192.168.100.2
内部数据交换网络 IP 10.10.10.1 10.10.10.2
dmdcr_cfg CSS DCR_EP_NAME CSS0 CSS1
DCR_EP_HOST 10.10.10.1 10.10.10.2
DCR_EP_PORT 11286 11286
ASM DCR_EP_NAME ASM0 ASM1
DCR_EP_HOST 10.10.10.1 10.10.10.2
DCR_EP_PORT 11276 11277
DB DCR_EP_NAME DSC0 DSC1
DCR_EP_PORT 5237 5237
DCR_CHECK_PORT 11256 11257
dmasvrmal MAL_INST_NAME ASM0 ASM1
MAL_HOST 10.10.10.1 10.10.10.1
MAL_PORT 11266 11266
dminit 实例名 DSC0 DSC1
PORT_NUM 5237 5237
MAL_HOST 10.10.10.1 10.10.10.1
MAL_PORT 11246 11246
OGUID 210715

1.1.7 块设备 UUID 绑定

本节主要介绍两种块设备 UUID 绑定方式:多路径方式绑定和无多路径方式绑定。裸设备绑定方式请参考数据库安装路径 doc 目录下《共享存储集群》使用手册。

方法一:多路径方式绑定

  • 通过以下命令可获取多路径。即搭建需要采用的 lun,其多路径名称依次为:/dev/mapper/mpatha 至/dev/mapper/mpathe,共 5 个 lun。
[root@RS1824 ~]# fdisk -l |grep mpath
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/mapper/mpatha: 2048 MB, 2147483648 bytes, 4194304 sectors
Disk /dev/mapper/mpathb: 2048 MB, 2147483648 bytes, 4194304 sectors
Disk /dev/mapper/mpathc: 20 GB, 25249710080 bytes, 49315840 sectors
Disk /dev/mapper/mpathd: 536.9 GB, 536870912000 bytes, 1048576000 sectors
Disk /dev/mapper/mpathe: 536.9 GB, 536870912000 bytes, 1048576000 sectors
  • 通过多路径 UUID 绑定。通过 mpath.sh 生成配置文件 88-dm-asmdevices.rules。
[root@RS1824 ~]# cat mpath.sh
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
for i in mpatha 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=\"0660\"" ''
done
##执行上述脚本
[root@RS1824 ~]# ./mpath.sh
##脚本执行成功后,会生成绑定配置文件,可以根据需求进行修改别名 SYMLINK,例如:
[root@RS1824 ~]# cat 88-dm-asmdevices.rules
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342697bdcefdae7fd52cfd1b00db",SYMLINK+="dm/asm-dmdcr",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342449774d0d2c16d990fd6300db",SYMLINK+="dm/asm-dmvote",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342a2b1bd08d28e0d58c5db300db",SYMLINK+="dm/asm-dmlog",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b34208f0b5c5d515dd41dfde300db",SYMLINK+="dm/asm-dmdata",OWNER="dmdba",GROUP="dinstall",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-3600b342dfa7bea6dc4c4dec06da300db",SYMLINK+="dm/asm-dmarch",OWNER="dmdba",GROUP="dinstall",MODE="0660"
  • 部署配置文件。复制 88-dm-asmdevices.rules 配置文件到 DSC 集群的所有节点的相关目录下。
cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules
  • 检查生效。

(1)重启服务器,建议使用该方法。
(2)如果无法重启,执行下述命令。

cd /usr/lib/systemd/system/systemd-udev-trigger.service.d/
##先修改以下文件的参数
vi systemd-udev-trigger-no-reload.conf
RefuseManualStop=false
##使其生效
Systemctl daemon-reload
##再执行命令
udevadm control --reload-rules
systemctl restart systemd-udev-trigger.service
##执行完后改回参数
RefuseManualStop=true
##再次执行
Systemctl daemon-reload

(3)授权。

chown  dmdba:dinstall /dev/mapper/mpath* -R
chown  dmdba:dinstall /dev/dm/asm-* -R

(4)检查生效。

blockdev --getsize64 /dev/dm/asm-dmdcr
blockdev --getsize64 /dev/dm/asm-dmvote
blockdev --getsize64 /dev/dm/asm-dmlog
blockdev --getsize64 /dev/dm/asm-dmdata
blockdev --getsize64 /dev/dm/asm-dmarch
##结果如下
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmdcr
2147483648
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmvote
2147483648
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmlog
25249710080
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmdata
536870912000
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmarch
536870912000

方法二:无多路径方式绑定

如没有配置多路径,采用 UUID 绑定多个 LUN 存储,可以通过 fdisk -l 命令查看 LUN 设备,这里以共享存储盘为 sda,sdb,sdc,sdd,sde 为例。

  • 绑定设备的 UUID。创建 uuid.sh 文件,使用脚本生成配置文件。
curr=$(cd "$(dirname "$0")";pwd)
rm -f $curr/88-dm-asmdevices.rules
for i in a b c d e;
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\"" >> $curr/88-dm-asmdevices.rules
done
##执行 uuid.sh 脚本
chmod +x uuid.sh
./uuid.sh

##脚本执行成功后,会生成绑定配置文件 88-dm-asmdevices.rules,可以根据自己的需求进行修改别名 SYMLINK,本文档修改如下:
vim 88-dm-asmdevices.rules

KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2929c3dab7d6dcf02e57ada868c", SYMLINK+="dm/asm-dmdcr",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b342449774d0d2c16d990fd6300db", SYMLINK+="dm/asm-dmvote",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b342a2b1bd08d28e0d58c5db300db", SYMLINK+="dm/asm-dmlog",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b34208f0b5c5d515dd41dfde300db", SYMLINK+="dm/asm-dmdata",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="3600b342dfa7bea6dc4c4dec06da300db", SYMLINK+="dm/asm-dmarch",OWNER="dmdba", GROUP="dinstall",MODE="0660"
  • 配置部署文件。生成配置文件后,把 88-dm-asmdevices.rules 配置文件 cp 到 DSC 的每个节点上。
cp 88-dm-asmdevices.rules /etc/udev/rules.d/88-dm-asmdevices.rules 
  • 检查生效。

(1)重启服务器,建议使用该方法。
(2)如果无法重启,执行下述命令。

udevadm control --reload-rules
systemctl restart systemd-udev-trigger.service

(3)授权。

chown  dmdba:dinstall /dev/dm/asm-* -R

(4)检查生效。

blockdev --getsize64 /dev/dm/asm-dmdcr
blockdev --getsize64 /dev/dm/asm-dmvote
blockdev --getsize64 /dev/dm/asm-dmlog
blockdev --getsize64 /dev/dm/asm-dmdata
blockdev --getsize64 /dev/dm/asm-dmarch
##结果如下
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmdcr
2147483648
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmvote
2147483648
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmlog
25249710080
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmdata
536870912000
[root@RS1824 ~]# blockdev --getsize64 /dev/dm/asm-dmarch
536870912000

1.1.8 实例初始化属性

对于不同系统,数据库初始化参数可能因数据、开发等因素存在差异性。最主要的几个实例初始化属性需要提前确认,见下表。

参数名 参数 参数值
数据页大小 PAGE_SIZE 通常 DM 8 建议 32K
大小写敏感 CASE_SENSITIVE 如果应用基于 Oracle 开发,通常采用默认值 1
数据库字符集 CHARSET/UNICOD E_FLAG 根据用户、系统开发具体情况而定
Varchar 类型单位 LENGTH_IN_CHAR 通常采用默认字节
空格填充模式 BLANK_PAD_MODE 如果应用基于 Oracle 开发,通常取值为 1,具体情况需根据用户、系统开发实际情况而定

1.1.9 安装前环境检查

共享存储集群部署前应进行完整的环境检查,详细内容可参考环境检查与修改。在 DSC 集群中应特别注意以下内容:

  • 检查共享存储设备绑定情况。如果使用了多路径软件,可对比 2 台服务器的多路径信息,重点确认 2 台服务器绑定的设备 uuid 是否一致,并检查绑定是否生效。
##检查设备 uuid 是否一致
multipath -ll

##检查绑定是否生效
blockdev --getsize64 /dev/dm/asm-dmvote
blockdev --getsize64 /dev/dm/asm-dmdcr
blockdev --getsize64 /dev/dm/asm-dmlog
blockdev --getsize64 /dev/dm/asm-dmarch
blockdev --getsize64 /dev/dm/asm-dmdata
  • 需进行共享磁盘测速。在部署 DSC 之前,将划分的磁盘挂载到本地,然后采用 dd / fio 方式进行磁盘 IO 测试。生产环境中,建议共享磁盘读写速度不低于 150M/s。Fio 测试方法如下:
##测试方法和脚本,以下三个命令分别测试随机写,随机读,随机读写:
f=/data2/1.g
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=8k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=$f -name=Rand_Write_Testing --output fio.log
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=8k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=$f -name=Rand_Read_Testing >> fio.log
fio -direct=1 -iodepth=128 -rw=randrw  -rwmixread=70  -ioengine=libaio -bs=8k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=$f -name=Mix_Read_Testing >> fio.log

1.2 集群搭建

1.2.1 创建用户、目录、安装数据库

db 0 和 db 1 机器均将数据库安装在 /dm/dmdbms 目录下,详细内容请参考创建数据库用户安装数据库软件

1.2.2 配置 dmdcr_cfg.ini

db0 和 db1 机器配置相同。

[dmdba@~]# vi /dm/dmdbms/dsc_config/dmdcr_cfg.ini
DCR_N_GRP                	= 3     ##集群环境有多少个 GROUP,范围:1~16
DCR_VTD_PATH               = /dev/dm/asm-dmvote   ##规划为 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              = 10.10.10.1   ##心跳地址
  DCR_EP_PORT              = 11286   ##CSS 端口
[GRP_CSS]
  DCR_EP_NAME            = CSS1
  DCR_EP_HOST             = 10.10.10.2
  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               = 10.10.10.1  ##心跳地址
  DCR_EP_PORT               = 11276  ##ASM 端口
  DCR_EP_ASM_LOAD_PATH   = /dev/dm
[GRP_ASM]
  DCR_EP_NAME              = ASM1
  DCR_EP_SHM_KEY         = 42425
  DCR_EP_SHM_SIZE        = 1024
  DCR_EP_HOST               = 10.10.10.2
  DCR_EP_PORT               = 11277
  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              = 5237  ##实例端口,和 dm.ini 的 PORT_NUM 一致
  DCR_CHECK_PORT       = 11256   ##DCR 检查端口
[GRP_DSC]
  DCR_EP_NAME             = DSC1
  DCR_EP_SEQNO           = 1
  DCR_EP_PORT              = 5237
  DCR_CHECK_PORT       = 11257

1.2.3 初始化磁盘组

在 db0 机器上进行如下操作。

[dmdba@~]#/dm/dmdbms/bin/dmasmcmd
#asm script file
ASM>create dcrdisk '/dev/dm/asm-dmdcr' 'dcr'
ASM>create votedisk '/dev/dm/asm-dmvote' 'vote'
ASM>init dcrdisk '/dev/dm/asm-dmdcr' from '/dm/dmdbms/dsc_config/init/dmdcr_cfg.ini' identified by 'hust4400'
ASM>init votedisk '/dev/dm/asm-dmvote' from '/dm/dmdbms/dsc_config/init/dmdcr_cfg.ini'
ASM>create asmdisk '/dev/dm/asm-dmdata' 'DATA0'
ASM>create asmdisk '/dev/dm/asm-dmlog' 'LOG0'
ASM>create asmdisk '/dev/dm/asm-dmarch' 'ARCH0'

1.2.4 配置 dmasvrmal.ini

[dmdba@~]# vi /dm/dmdbms/dsc_config/dmasvrmal.ini
[MAL_INST0]
MAL_INST_NAME            = ASM0
MAL_HOST                  = 10.10.10.1  #心跳地址
MAL_PORT                  = 11266  #MAL 监听端口
[MAL_INST1]
MAL_INST_NAME            = ASM1
MAL_HOST                  = 10.10.10.2
MAL_PORT                  = 11266

1.2.5 配置 dmdcr.ini 文件

  • db0 机器配置 dmdcr.ini,dmdcr_seqo 为 0。
[dmdba@~]# vi /dm/dmdbms/dsc_config/dmdcr.ini
DMDCR_PATH                   = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH           = /dm/dmdbms/dsc_config/DSC0/dmasvrmal.ini
DMDCR_SEQNO                  = 0
DMDCR_AUTO_OPEN_CHECK        = 111
DMDCR_ASM_TRACE_LEVEL        = 2

##DMDCR_ASM_RESTART_INTERVAL   = 60  #CSS 认定 ASM 故障重启的时间
##DMDCR_ASM_STARTUP_CMD     = /dm/dmdbms/dsc_config/DmAsmService_DSC0 start
##DMDCR_DB_RESTART_INTERVAL    = 60   ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
##DMDCR_DB_STARTUP_CMD      = /dm/dmdbms/dsc_config/DmService_DSC0 start
  • db1 机器配置 dmdcr.ini,dmdcr_seqo 为 1。
[dmdba@~]# vi /dm/dmdbms/dsc_config/dmdcr.ini
DMDCR_PATH                   = /dev/dm/asm-mpatha
DMDCR_MAL_PATH               = /dm/dmdbms/dsc_config/DSC1/dmasvrmal.ini
DMDCR_SEQNO                  = 1
DMDCR_AUTO_OPEN_CHECK        = 111
DMDCR_ASM_TRACE_LEVEL        = 2

##DMDCR_ASM_RESTART_INTERVAL   = 60
##DMDCR_ASM_STARTUP_CMD        = /dm/dmdbms/dsc_config/DmAsmServiceDSC1 start
##DMDCR_DB_RESTART_INTERVAL    = 60   
##DMDCR_DB_STARTUP_CMD         = /dm/dmdbms/dsc_config/DmServiceDSC1 start
注意

当前为手动拉起 db0 机器和 db1 机器的 ASM 和 DMSERVER 服务。待集群配置完成后,再修改为自动拉起(删除 dmdcr.ini 中的“##”号即可)。

1.2.6 启动 DMCSS、DMASM 服务

在 2 个节点分别启动 dmcss 命令:

[dmdba@]# /dm/dmdbms/bin/dmcss DCR_INI=/dm/dmdbms/dsc_config/DSC0/dmdcr.ini
[dmdba@]# /dm/dmdbms/bin/dmcss DCR_INI=/dm/dmdbms/dsc_config/DSC1/dmdcr.ini

在 2 个节点分别启动 dmasmsvr 命令:

[dmdba@]# /dm/dmdbms/bin/dmasmsvr DCR_INI=/dm/dmdbms/dsc_config/DSC0/dmdcr.ini
[dmdba@]# /dm/dmdbms/bin/dmasmsvr DCR_INI=/dm/dmdbms/dsc_config/DSC1/dmdcr.ini

说明:如果 DMCSS 配置有自动拉起 dmasmsvr 的功能,可以等待 DMCSS 自动拉起 dmasmsvr 程序,不需要手动启动。

1.2.7 创建 DMASM 磁盘组

##在 db0 节点启动 dmasmtool 工具
[dmdba@]# /dm/dmdbms/bin/dmasmtool DCR_INI=/dm/dmdbms/dsc_config/DSC0/dmdcr.ini

##输入下列语句创建 DMASM 磁盘组
##创建日志磁盘组
ASM> create diskgroup 'DMLOG' asmdisk '/dev/dm/asm-dmlog'
##创建数据磁盘组
ASM> create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata'
##创建归档磁盘组
ASM> create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-dmarch'

1.2.8 初始化 DB 环境

db0 和 db1 机器配置相同。

##创建 dminit.ini 文件
[dmdba@~]# vi /dm/dmdbms/dsc_config/dminit.ini
DB_NAME                  = DSC
SYSDBA_PWD               = SYSDBA_PWD
SYSTEM_PATH              = +DMDATA/data
SYSTEM                   = +DMDATA/data/SYSTEM.dbf
SYSTEM_SIZE              = 1024
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-dmdcr
DCR_SEQNO                = 0
AUTO_OVERWRITE           = 1
PAGE_SIZE                = 32
EXTENT_SIZE              = 16
BLANK_PAD_MODE           = 1

[DSC0]
CONFIG_PATH              = /dm/dmdbms/dsc_config/DSC0
PORT_NUM                 = 5237
MAL_HOST                 = 10.10.10.1
MAL_PORT                 = 11246
LOG_PATH                 = +DMLOG/DSC0_LOG01.log
LOG_PATH                 = +DMLOG/DSC0_LOG02.log
[DSC1]
CONFIG_PATH              = /dm/dmdbms/dsc_config/DSC1
PORT_NUM                 = 5237
MAL_HOST                 = 10.10.10.2
MAL_PORT                 = 11246
LOG_PATH                 = +DMLOG/DSC1_LOG01.log
LOG_PATH                 = +DMLOG/DSC1_LOG02.log

##在 db0 节点执行初始化 db 命令
[dmdba@~]# vi /dm/dmdbms/bin/dminit control=/dm/dmdbms/dsc_config/init/dminit.ini

##拷贝文件到 db1 节点
[dmdba@~]# scp -r /dm/dmdbms/dsc_config/DSC1 dmdba@10.10.10.2:/dm/dmdbms/dsc_config/

1.2.9 配置 dmarch.ini 文件

  • db0 节点
##修改 dm.ini
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC0/dm.ini
ARCH_INI                 = 1

##创建 dmarch.ini
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC0/dmarch.ini
ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=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
  • db1 节点
##修改 dm.ini
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC1/dm.ini
ARCH_INI                 = 1

##创建 dmarch.ini
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC1/dmarch.ini

ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=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

1.2.10 启动数据库集群

如果 DMCSS 配置有自动拉起 dmserver 的功能,可以等待 DMCSS 自动拉起实例,不需要手动启动。如果需要手动启动,可参考以下步骤:

##db0 机器
[dmdba@]# /dm/dmdbms/bin/dmserver /dm/dmdbms/dsc_config/DSC0/dm.ini dcr_ini=/dm/dmdbms/dsc_config/DSC0/dmdcr.ini
##db1 机器
[dmdba@~]# /dm/dmdbms/bin/dmserver /dm/dmdbms/dsc_config/DSC1/dm.ini dcr_ini=/dm/dmdbms/dsc_config/DSC1/dmdcr.ini

1.2.11 注册 CSS、ASM、DMSERVER 后台服务

##db0 机器
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -p CSS
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/dsc_config/DSC0/dm.ini -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -m -p DSC

##db1 机器
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -p CSS
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/dsc_config/DSC1/dm.ini -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -m -p DSC

备注:db0 机器、db1 机器删除自启可参考以下命令。

[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmCSSServiceCSS
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmASMSvrServiceASM
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDSC

1.2.12 配置监视器

  • 创建 dmcssm.ini
## A 机器、B 机器配置相同
[dmdba@~]# vi /dm/dmdbms/bin/dmcssm.ini
CSSM_OGUID                 = 210715
CSSM_CSS_IP                = 10.10.10.1:11286
CSSM_CSS_IP                = 10.10.10.2:11286
CSSM_LOG_PATH              = ../log
CSSM_LOG_FILE_SIZE         = 512
CSSM_LOG_SPACE_LIMIT       = 2048
  • 注册服务(选做)
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmcssm -cssm_ini /dm/dmdbms/bin/dmcssm.ini -p Monitor

##备注:删除自启
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmCSSMonitorServiceMonitor
  • 监视器使用
命令 含义
show 查看所有组的信息
show config 查看 dmdcr_cfg.ini 的配置信息
show monitor 查看当前连接到主 CSS 的所有监视器信息

1.2.13 启停服务

1. 启动监视器

--前台启动:
[dmdba@~]# /dm/dmdbms/bin/dmcssm INI_PATH=/dm/dmdbms/bin/dmcssm.ini
--后台启动:
[dmdba@~]# /dm/dmdbms/bin/DmCSSMonitorServiceMonitor start

通过以上命令,进入监视器执行 show 命令,可查看 DSC 集群运行状态。如下图所示。更多详细内容参考数据库安装目录 doc 路径下《共享存储集群》使用手册。

image.png

2. 启停集群

##启动:A/B 机器 CSS
A/B 机器:[dmdba@~]#/dm/dmdbms/bin/DmCSSServiceCSS start
##说明:CSS 启动后 30 秒自动拉起 ASM,60 秒自动拉起 DMSERVER。

##停止: A/B 机器 DMSERVER→A/B 机器 ASM→A/B 机器 CSS
A/B 机器:[dmdba@~]# /dm/dmdbms/bin/DmServiceDSC stop
A/B 机器:[dmdba@~]# /dm/dmdbms/bin/DmASMSvrServiceASM stop
A/B 机器:[dmdba@~]# /dm/dmdbms/bin/DmCSSServiceCSS stop

说明

  1. DSC 正常停库必须 2 节点同时停止,根据目前脚本配置,CSS 启动后 30 秒自动拉起 ASM,60 秒自动拉起 DMSERVER,所以停止 DMSERVER 和 ASM 后,要尽快停止 CSS,避免被自动拉起。或者在停库前,取消 dmdcr.ini 配置文件中 DMDCR_ASM_RESTART_INTERVAL、DMDCR_ASM_STARTUP_CMD 前面的 # 号。
  2. 服务全部停止后,要检查后台进程是否全部停止。

二、两节点 DSC + 实时备机集群安装部署

为增加共享存储集群的冗余性,建议可在共享存储集群构架上再增加一台实时备机,保障系统的数据安全和实时稳定。

2.1 安装前准备

2.1.1 集群架构

image.png

2.1.2 实时备机磁盘规划

名称 拟定配置 备注
数据库安装目录 /dm/dmdbms 数据库安装路径,存放数据库运行日志等信息
数据库备份目录 /dm/dmbak 用于存放数据库备份文件
数据库 SQL 日志目录 /dm/dmsqllog 用于存放数据库 dmsql 日志
集群配置文件目录 /dm/dsc_config 用于存放数据库集群配置文件
系统 core 目录 /dm/core 用于存放系统的 core 文件
数据目录 /dmdata 根据库数据量大小,申请磁盘
数据库归档目录 /dmarch 用于存放归档日志

2.1.3 实时备机端口规划

数据库相关配置 信息
数据库服务器名称 db2
业务 IP 192.168.100.3
内部数据交换网络 IP 10.10.10.3
实例名 DW01
PORT_NUM 5237
MAL_PORT 11246
MAL_DW_PORT 52141
MAL_INST_DW_PORT 5276

2.2 搭建步骤

2.2.1 搭建 2 节点 DSC 集群

搭建 2 节点 DSC 集群请参考 1.2 节内容。

注意

在搭建两节点 DSC+实时备机时,DMSERVER 后台服务要以 mount 方式注册

2.2.2 停止 DSC 集群 DMSERVER 服务

详细步骤参考 1.2.13 节内容。

2.2.3 备机创建用户、目录、安装数据库

db2 机器将数据库安装在 /dm/dmdbms 目录下,并初始化实例到 /dmdata 目录,且初始化实例参数应与 DSC 集群初始化参数保持一致。详细内容请参考创建数据库用户安装数据库软件初始化数据库实例

2.2.4 备份 DSC 集群数据

db0 机器:

##备份 db0 机器数据
[dmdba@~]# /dm/dmdbms/bin/dmrman  DCR_INI=/dm/dmdbms/dsc_config/DSC0/dmdcr.ini
RMAN> backup database '/dm/dmdbms/dsc_config/DSC0/dm.ini ' full backupset '/dm/dmbak/BACKUP_FILE'  compressed level 5 parallel 8;

##检查备份文件有效性
RMAN> check backupset '/dm/dmbak/BACKUP_FILE' ;

##将备份文件发送到 db2 机器
[dmdba@~]# scp -r /dm/dmbak/BACKUP_FILE dmdba@10.10.10.3:/dm/dmbak/

2.2.5 实时备机上还原 DSC 集群数据

##登录备机使用 rman 进行还原(注意:备机初始化参数要与主库一致)
[dmdba@~]# /dm/dmdbms/bin/dmrman 
RMAN> check backupset '/dm/dmbak/BACKUP_FILE' ;
RMAN>RESTORE DATABASE  '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/dmbak/BACKUP_FILE';
RMAN>RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/dmbak/BACKUP_FILE';
RMAN>RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

2.2.6 修改 dm.ini

1、修改 db0 和 db1 机器中 dm.ini 参数。

##db0 和db1 机器该配置相同
##db0 机器
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC0/dm.ini
##db1 机器
[dmdba@~]# vi /dm/dmdbms/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、修改 db2 机器(备库)中 dm.ini 参数。

##db2 机器
[dmdba@~]# vi /dmdata/data/DAMENG/dm.ini

INSTANCE_NAME = DW01
PORT_NUM = 5237 #数据库实例监听端口 
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.2.7 创建 dmmal.ini

db0、db1 和 db2 机器配置 dmmal.ini(dmmal.ini 和 dm.ini 放在同一路径下),三台机器的 dmmal.ini 文件内容必须一致。

## db0 机器
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC0/dmmal.ini

##db1 机器
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC1/dmmal.ini

##db2 机器
[dmdba@~]# vi /dmdata/data/DAMENG/dmmal.ini

MAL_CHECK_INTERVAL=87
MAL_CONN_FAIL_INTERVAL=180
MAL_SYS_BUF_SIZE=600
MAL_BUF_SIZE=300
MAL_VPOOL_SIZE=500
MAL_COMPRESS_LEVEL=0
[MAL_INST0]
MAL_INST_NAME   = DSC0
MAL_HOST   = 192.168.100.1
MAL_PORT   = 11246
MAL_INST_HOST            = 10.10.10.1
MAL_INST_PORT            = 5237
MAL_DW_PORT              = 52141
MAL_INST_DW_PORT         = 5276
[MAL_INST1]
MAL_INST_NAME            = DSC1
MAL_HOST                 = 192.168.100.2
MAL_PORT                 = 11246
MAL_INST_HOST            = 10.10.10.2
MAL_INST_PORT            = 5237
MAL_DW_PORT              = 52141
MAL_INST_DW_PORT         = 5276
[MAL_INST2]
MAL_INST_NAME            = DW01
MAL_HOST                 = 192.168.100.3
MAL_PORT                 = 11246
MAL_INST_HOST            = 10.10.10.3
MAL_INST_PORT            = 5237
MAL_DW_PORT              = 52141
MAL_INST_DW_PORT         = 5276

2.2.8 创建 dmarch.ini

1、在 db0 和 db1 机器配置 dmarch.ini,配置本地归档和实时归档。

##db0 节点配置 dmarch.ini
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC0/dmarch.ini

ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=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   #备库实例名

####db1 节点配置 dmarch.ini
[dmdba@~]# vi /dm/dmdbms/dsc_config/DSC1/dmarch.ini

ARCH_WAIT_APPLY = 0
ARCH_LOCAL_SHARE = 1
ARCH_LOCAL_SHARE_CHECK=0
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH = +DMARCH/ARCH/DSC0/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMARCH/ARCH/DSC1/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REALTIME1]
ARCH_TYPE         = REALTIME 
ARCH_DEST         = DW01

2、db2 机器配置 dmarch.ini。

[dmdba@~]# vi /dmdata/data/DAMENG/dmarch.ini

[ARCHIVE_REALTIME] 
ARCH_TYPE = REALTIME #实时归档类型 
ARCH_DEST = DSC0/DSC1  #实时归档目标实例名 
[ARCHIVE_LOCAL1] 
ARCH_TYPE = LOCAL #本地归档类型 
ARCH_DEST = /dm/dmarch  #本地归档文件存放路径 
ARCH_FILE_SIZE = 2048  
ARCH_SPACE_LIMIT = 204800#单位 Mb,0 表示无限制,范围 1024~4294967294M 

2.2.9 创建 dmwatcher.ini

1、在 db0 和 db1 机器配置 dmwatcher.ini。

##db0 节点配置 dmwatcher.ini
[dmdba@~]# vi /dm/dmdbms/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 = /dm/dmdbms/dsc_config/DSC0/dm.ini
DCR_INI=/dm/dmdbms/dsc_config/DSC0/dmdcr0.ini
INST_STARTUP_CMD = /dm/dmdbms/dsc_config/DmService_DSC0 start
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

##db1 节点配置 dmwatcher.ini
[dmdba@~]# vi /dm/dmdbms/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 = /dm/dmdbms/dsc_config/DSC1/dm.ini
DCR_INI=/dm/dmdbms/dsc_config/DSC1/dmdcr1.ini
INST_STARTUP_CMD = /dm/dmdbms/dsc_config/DmService_DSC1 start
INST_AUTO_RESTART = 0
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

2、配置 dmwatcher.ini。

##db2 节点配置 dmwatcher.ini
[dmdba@~]# vi /dmdata/data/DAMENG/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 = /dmdata/data/DAMENG/dm.ini #dm.ini 配置文件路径 
INST_AUTO_RESTART = 0 #设置实例不自动拉起
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动 
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭 

2.2.10 注册服务

##db0 机器
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm/dmdbms/dsc_config/DSC0//dmwatcher.ini

##db1 机器
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm/dmdbms/dsc_config/DSC0/dmwatcher.ini

##db2 机器
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DW1_01 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

备注:删除自启可采用如下命令。

##db0 机器、db1 机器:
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher
##db2 机器:
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDW1_01
##db2 机器:
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

2.2.11 配置 DSC+ 实时备机监视器

##db0 和 db1 机器配置监视器
[dmdba@~]# vi /dm/dmdbms/bin/dmmonitor.ini

##db2 机器配置监视器
[dmdba@~]# vi /dm/dmdbms/bin/dmmonitor.ini


MON_DW_CONFIRM         = 1
MON_LOG_PATH           = /dm/dmdbms/log
MON_LOG_INTERVAL       = 0 
MON_LOG_FILE_SIZE      = 32 
MON_LOG_SPACE_LIMIT    = 0 
[GRP1]
MON_INST_OGUID    = 453331
MON_DW_IP         = 192.168.100.1:52141/192.168.100.2:52141
MON_DW_IP         = 192.168.100.3:52141

2.2.12 注册 DSC+ 实时备机监视器服务(选做)

##db0 机器、db1 机器:
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dm/dmdbms/bin/dmmonitor.ini
##db2 机器:
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dm/dmdbms/bin/dmmonitor.ini

备注:若需删除自启可参考以下步骤。

##db1 机器、db1 机器:
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor
##db2 机器:
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor

2.2.13 DSC+DW 监视器使用

命令 含义
list 查看守护进程的配置信息
show global info 查看所有实例组的信息
tip 查看系统当前运行状态
login 登录监视器
logout 退出登录
choose switchover GDSCDW1 主机正常:查看可切换为主机的实例列表
switchover GDSCDW1.实例名 主机正常:使用指定组的指定实例,切换为主机
choose takeover GDSCDW1 主机故障:查看可切换为主机的实例列表
takeover GDSCDW1.实例名 主机故障:使用指定组的指定实例,切换为主机
choose takeover force GDSCDW1 强制切换:查看可切换为主机的实例列表
takeover force GDSCDW1.实例名 强制切换:使用指定组的指定实例,切换为主机
主机故障后,在备机执行SELECT SF_DW_CHECK_TAKEOVER();【1:可接管 0:不可接管】

2.2.14 配置 DSC 监视器

备机(db2)机器的 DSC 监视器配置与 db0 和 db1 机器相同。

##db2 机器:
[dmdba@~]# vi /dm/dmdbms/bin/dmcssm.ini

CSSM_OGUID                 = 210715
CSSM_CSS_IP                = 10.10.10.1:11276
CSSM_CSS_IP                = 10.10.10.2:11277
CSSM_LOG_PATH              = ../log
CSSM_LOG_FILE_SIZE         = 512
CSSM_LOG_SPACE_LIMIT       = 2048

2.2.15 注册 DSC 监视器服务(选做)

##db2 机器
[root@~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmcssm -cssm_ini /dm/dmdbms/bin/dmcssm.ini -p Monitor

备注:若要删除自启,可参考以下步骤:

##db2 机器
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmCSSMonitorServiceMonitor

2.2.16 DSC 监视器使用

命令 含义
show 查看所有组的信息
show config 查看 dmdcr_cfg.ini 的配置信息
show monitor 查看当前连接到主 CSS 的所有监视器信息

2.2.17 启动数据库并修改参数

以 mount 方式分别启动 DSC 及备库。

##使用 disql 连接 dsc 数据库执行:
SQL> sp_set_oguid(453331) ; 
SQL> alter database primary ;
##使用 disql 连接备库数据库执行:
SQL> sp_set_oguid(453331) ; 
SQL> alter database standby ;
##主备分别启动守护进程
./DmWatcherService start 

2.2.18 启动守护进程

## db0/db1 机器:
[dmdba@~]# /dm/dmdbms/bin/DmWatcherServiceWatcher start

##db2 机器:
[dmdba@~]# /dm/dmdbms/bin/DmWatcherServiceWatcher start

2.2.19 启动 DSC+DW 监视器

##db0 机器、db1 机器
前台启动:[dmdba@~]# /dm/dmdbms/bin/dmmonitor /dm/dmdbms/bin/dmmonitor.ini
后台启动:[dmdba@~]# /dm/dmdbms/bin/DmMonitorServiceMonitor start

##db2 机器
前台启动:[dmdba@~]# /dm/dmdbms/bin/dmmonitor /dm/dmdbms/bin/dmmonitor.ini
后台启动:[dmdba@~]# /dm/dmdbms/bin/DmMonitorServiceMonitor start

2.2.20 启动 DSC 监视器(选做)

##db0 机器、db1 机器
##前台启动:
[dmdba@~]# /dm/dmdbms/bin/dmcssm INI_PATH=/dm/dmdbms/bin/dmcssm.ini
##后台启动:
[dmdba@~]# /dm/dmdbms/bin/DmCSSMonitorServiceMonitor start

##db2 机器
##前台启动:
[dmdba@~]# /dm/dmdbms/bin/dmmonitor /dm/dmdbms/bin/dmmonitor.ini
##后台启动:
[dmdba@~]# /dm/dmdbms/bin/DmCSSMonitorServiceMonitor start

2.2.21 启停集群

##启动:db0/db1 机器 CSS→db0/db1/db2 机器守护进程
##db0/db1 机器:
[dmdba@~]# /opt/dsc/dmdbms/bin/DmCSSServiceCSS start
##db0/db1 机器:
[dmdba@~]# /opt/dsc/dmdbms/bin/DmWatcherServiceWatcher start
##db2 机器:
[dmdba@~]# /opt/dmdbms/bin/DmWatcherServiceWatcher start
##说明:CSS 启动后 30 秒自动拉起 ASM,60 秒自动拉起 DMSERVER。

##停止: db0/db1 机器 DMSERVER→db0/db1 机器 ASM→db0/db1 机器 CSS→db0/db1/db2 机器守护进程→db2 机器 DMSERVER
##db0/db1 机器:
[dmdba@~]# /opt/dsc/dmdbms/bin/DmServiceDSC stop
##db0/db1 机器:
[dmdba@~]# /opt/dsc/dmdbms/bin/DmASMSvrServiceASM stop
##db0/db1 机器:
[dmdba@~]# /opt/dsc/dmdbms/bin/DmCSSServiceCSS stop
##db0/db1 机器:
[dmdba@~]# /opt/dsc/dmdbms/bin/DmWatcherServiceWatcher stop
##db2 机器:
[dmdba@~]# /opt/dmdbms/bin/DmWatcherServiceWatcher stop
##db2 机器:
[dmdba@~]# /opt/dmdbms/bin/DmServiceDW1_01 stop

说明

  1. DSC 正常停库必须 2 节点同时停止,根据目前脚本配置,CSS 启动后 30 秒自动拉起 ASM,60 秒自动拉起 DMSERVER,所以停止 DMSERVER 和 ASM 后,要尽快停止 CSS,避免被自动拉起。
  2. 服务全部停止后,要检查后台进程是否全部停止。

三、配置应用连接

Linux 环境:dm_svc.conf 放在应用服务器 /etc 目录下。

Windows32 环境:dm_svc.conf 放在应用服务器 System32 目录下。

Windows64 环境:dm_svc.conf 放在应用服务器 System32 和 SysWOW64 目录下。

3.1 创建 dm_svc.conf

以 2 节点 DSC 集群为例,配置 dm_svc.conf 文件如下:

[root@~]# vi /etc/dm_svc.conf
TIME_ZONE=(+8:00)
LANGUAGE=(cn)
DSC1=(192.168.100.1:5237,192.168.100.2:5237)

[DSC1]
LOGIN_ENCRYPT=(0)
SWITCH_TIME=(20)
SWITCH_INTERVAL=(2000)

3.2 应用连接

<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://DSC1:5236?compatibleMode=oracle</URL>

四、数据库参数优化调整

共享集群完成安装部署后,一般需要进行参数优化,以便数据库集群能发挥最佳性能。本节列举了主要需要优化的参数,其他参数内容请参考数据库安装目录 doc 路径下《共享存储集群》使用手册。

4.1 dmdcr_cfg.ini

参数推荐配置 配置说明
DCR_EP_SHM_SIZE=1024 每个簇描述项大概占用 64byte 内存空间,每个簇描述项对应 4M 磁盘空间,
通过计算 10M /64 * 4M = 655G;655G 左右的磁盘,使用 10M 大小的共享
内存能保证使用过程中簇描述项不被淘汰。现场需要根据当前业务规模和后
期数据增量来规划共享内存的大小。注:若是调整了该参数需要检查共享内
存配置 (ipcs) 并需要清除原有的共享内存 (ipcrm)。
DCR_EP_ASM_LOAD_PATH=/dev/环境实际路径 ASM 磁盘扫描路径,Linux 下一般为 /dev/raw 或 /dev,文件模拟情况,必须
是全路径,不能是相对路径。建议使用单独的 asm 磁盘路径,避免 dmasmtool
在执行某些命令时会报错 xxx 不是共享存储,引起误判。
DCR_OGUID 消息标识,一个组里面只有一个。dmdcr_cfg.ini 中的 DCR_OGUID 应与 dmcssm.ini
中的 CSSM_OGUID 保持一致。

4.2 dmdcr.ini

参数推荐配置 配置说明
DMDCR_ASM_TRACE_LEVEL=2 指定日志级别。1:TRACE 级别;2:WARN 级别;3:ERROR 级别;4:FATAL 级别。默认为 1。
日志级别越低(参数值越小),输出的日志越详细。当设置日志级别为较低级别时,兼容输出
级别大的日志,如 WARN 级别也可输出 ERROR 级别的日志建议配置为 2,默认的 trace 级别会导致
asm 的日志一天就写满几十 GB,可能将磁盘撑满,影响数据库服务运行。
DMDCR_AUTO_OPEN_CHECK 当 DSC 集群异常,需要单节点启动时使用,集群正常状态不配置该参数。指定时间内如果节点实例
未启动,DMCSS 会自动将节点踢出集群环境,单位为秒,取值范围应大于等于 30s。不配置此参数
时表示不启用此功能当系统遇到某些故障不得不单节点提供服务时,使用次参数将该节点拉起。
DMDCR_ASM_RESTART_INTERVAL=0 DMCSS 认定 DMASM 节点故障重启的时间间隔(取值 0~ 86400s),DMCSS 只负责和
DMDCR_SEQNO 节点号相等的 DMASM 节点的故障重启,超过设置的时间后,如果 DMASM 节点
的 active 标记仍然为 FALSE,则 DMCSS 会执行自动拉起。如果配置为 0,则不会执行自动拉起操作,
默认为 60s。
DMDCR_DB_RESTART_INTERVAL=0 DMCSS 认定 DMDSC 节点故障重启的时间间隔(取值 0~ 86400s),DMCSS 只负责和 DMDCR_SEQNO
节点号相等的 DMDSC 节点的故障重启,超过设置的时间后,如果 DMDSC 节点的 active 标记仍然为 FALSE,
则 DMCSS 会执行自动拉起。如果配置为 0,则不会执行自动拉起操作,默认为 60s。

4.3 dm.ini

参数推荐配置 配置说明
DSC_N_POOLS 依据服务器
资源配置进行调整,一般取质数
LBS/GBS 池数目。有效值范围(2~1024),默认值 2。与 BUFFER_POOLS 类似,
DSC_N_POOLS 将系统中的 LBS/GBS 根据页号进行分组,以降低 LBS/GBS 处理的并发冲突;
MEMORY_N_POOLS 依据服务器
资源配置进行调整,一般取质数。
共享内存池个数,有效值范围(0~2048),0 与 1 等价,即共享池不分片。
分片时,每池的初始容量为 MEMORY_POOL / MEMORY_N_POOLS,但
受最小初始容量为 30M 限制,因此实际分片数可能会小于 MEMORY_N_POOLS。
对共享内存进行分片可以降低高并发情况下访问 mem pool 的冲突。
BUFFER_POOLS 依据服务器资源
配置进行调整,一般取质数
BUFFER 系统分区数,每个 BUFFER 分区的大小为 BUFFER/BUFFER_POOLS。对 BUFFER 进行
分片可以降低高并发情况下访问数据页的冲突。
MEMORY_EXTENT_SIZE=32 共享内存池每次扩充的大小,22 年的新版本中增加了共享池快速回收处理机制,需要将该
参数设置为 2 的次幂,建议值 16、32
FAST_POOL_PAGES=30000 快速缓冲区页数,在 DSC 架构中,由于不支持热页动态填充,所以该参数不能设置的太大,
防止启动时耗时较长。
ENABLE_FREQROOTS=0 DSC 架构下必须配置为 0,经典模式,系统启动时装入常用的描述页、索引的根、索引的
控制页、指定常驻内存的表以及索引第二层的节点,之后不再变化;
BUFFER_MODE=1 热页和动态填充能有效的解决单机的回表性能问题,dsc 架构下都不支持使用,所以为了
解决回表问题需要调整此参数。BUFFER 淘汰机制,默认为 0,采用 LRU 算法进行淘汰,
取值 1 时采用时钟算法进行淘汰当 buffer_mode = 0 时,每个读页请求对 buffer 分片都是
使用的 X 锁,在高并发访问时存在非常明显的热点冲突当 buffer_mode = 1 时,读页请求
可以并发的访问 buffer 分片中的数据页,仅在出现缺页的场景时才会对 buffer 分片上 X 锁
FAST_RW_LOCK=2 快速读写锁标记,0 不启用;1(默认值) 表示只有 FAST POOL 启用,2 表示所有 POOL
都启用。在 dsc 架构下设置为 2,传统的读写锁对于读是 S 锁,写是 X 锁,而快速读写锁是
我们自己实现的一种用于数据页的封锁机制,同样属于轻量级内存闩锁,但采用乐观封
锁机制,即直接申请 S 锁。在单机情况下放大 fast pool 并将数据页表放入 fast pool 可以有
效提升性能的原因也是在于 fast pool 在这个参数的默认值情况下启用了快速读写锁,但是
由于 dsc 不支持动态填充,我们需要将普通的 buffer 也启用这种机制,在高并发读的场景,
所有数据页都采用 os_inter_lock 原子操作方式实现增加/减少操作更高效。当数据页上有
写请求的时候,fast_rw_x_lock 会在底层实际调用传统的 rw_x_lock,相比直接采用 rw_x_lock,
会多一些额外的处理步骤。
FAST_LOGIN=1 是否在登录时记录登录失败历史信息。0 是,同步记录;1 否,不记录;2 是,异步记录
DSC 架构下设置为 1,避免在故障恢复、系统启动时出现登录失败引发双写性能问题导致
整个集群性能下降。

4.4 dmarch.ini

参数推荐配置 配置说明
ARCH_LOCAL_SHARE=1 当需要将归档放置在 ASM 中时,将此参数设置为 1,使用对端的本地归档作为远程归档,就不需要再配置多生成一份 remote 归档了。
ARCH_LOCAL_SHARE_CHECK=0 当需要将归档放在 ASM 中且需要生成多份 local 归档时,需要将该参数设置为 0,否则启动时会校验归档路径不在 asm 中会导致对
端节点无法访问到 remote 归档而启动失败。

4.5 dm_svc.conf

参数推荐配置 配置说明
常规配置:
DMDB=(IP1:端口,IP2:端口)
必要时非常规配置:
DMDB=(IP1:端口,IP2:端口)
[DMDB]
LOGIN_DSC_CTRL=(1)
LOGIN_DSC_CTRL=(1) 指定应用只连接控制节点,通常应
用无需配置此参数,在某些有大量读写的应用中建议配置,
规避 DSC 集群双节点写入性能。
微信扫码
分享文档
扫一扫
联系客服