共享存储集群安装部署

共享存储集群(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 文件的生成路径和用来验证环境状态的相关命令工具等。

名称 版本 命令
操作系统 CentOS 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 与节点 2 之间心跳网络可采用双交换机并使用 bond 方式进行绑定(红色、绿色各代表其中一条心跳),各节点与共享存储之间分别进行连接(黄色),各节点的业务网络使用单独的网卡进行连接(黑色)。

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 文件
监控文件 nmon 目录 /dm/nmon_output /dm/nmon_output 用于存放服务器性能监控 nmon 日志文件。安装部署方式参考:NMON

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 11276
DB DCR_EP_NAME DSC0 DSC1
DCR_EP_PORT 5236 5236
dmasvrmal MAL_INST_NAME ASM0 ASM1
MAL_HOST 10.10.10.1 10.10.10.2
MAL_PORT 11266 11266
dminit 实例名 DSC0 DSC1
PORT_NUM 5236 5236
MAL_HOST 10.10.10.1 10.10.10.2
MAL_PORT 11246 11246
OGUID 210715

db0 与 db1 两台机器的端口规划可以根据实际需求设置。

1.1.7 块设备 UUID 绑定

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

目前市面上,共享存储绑定,基本上都是以多路径的方式来提供,可以保证绑定的 LUN 的可靠性,故搭建 DSC 首先推荐的就是多路径方式。

方法一:多路径方式绑定

  • 通过以下命令可获取多路径。即搭建需要采用的 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)如果无法重启,执行下述命令。

udevadm trigger --type=devices --action=change 
udevadm control --reload-rules

(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 方式

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

  • 绑定设备的 UUID。创建 uuid.sh 文件,使用脚本生成配置文件。
##创建uuid.sh文件,写入如下内容:
vim 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 trigger --type=devices --action=change 
udevadm control --reload-rules

(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 通常 DM8 建议 32K
大小写敏感 CASE_SENSITIVE 如果应用基于 Oracle 开发,通常采用默认值 1
数据库字符集 CHARSET/UNICOD E_FLAG 根据用户、系统开发具体情况而定
空格填充模式 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 创建用户、目录、安装数据库

db0 和 db1 机器均将数据库安装在 /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               = 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 一致
[GRP_DSC]
  DCR_EP_NAME             = DSC1
  DCR_EP_SEQNO           = 1
  DCR_EP_PORT              = 5236

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 '****'
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

将该文件分别拷贝至 db0 和 db1 机器下的 /dm/dmdbms/dsc_config/DSC0 和 /dm/dmdbms/dsc_config/DSC1 目录下。

1.2.5 配置 dmdcr.ini 文件

  • db0 机器配置 dmdcr.ini,dmdcr_seqno 为 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_seqno 为 1。
[dmdba@~]# vi /dm/dmdbms/dsc_config/dmdcr.ini
DMDCR_PATH                   = /dev/dm/asm-dmdcr
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 初始化实例

db0 和 db1 机器配置相同。

##创建 dminit.ini 文件
[dmdba@~]# vi /dm/dmdbms/dsc_config/dminit.ini
DB_NAME                  = DSC
##SYSDBA_PWD 和 SYSAUDITOR_PWD 为配置数据库 SYSDBA 用户和 SYSAUDITOR 用户的登录密码,需要用户自定义配置,且需保证一定的密码强度。详细参数解释可参考达梦数据库安装目录下 doc 目录中《DM8_dminit 使用手册》
SYSDBA_PWD            = ********  
SYSAUDITOR_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                 = 5236
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                 = 5236
MAL_HOST                 = 10.10.10.2
MAL_PORT                 = 11246
LOG_PATH                 = +DMLOG/DSC1_LOG01.log
LOG_PATH                 = +DMLOG/DSC1_LOG02.log

##在 db0 节点执行初始化 db 命令
[dmdba@~]# /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
[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
[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 启动 DMSERVER 服务

如果 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  -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  -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 的所有监视器信息
help 更多指令可通过 help 命令获取

1.2.13 授权 setcap

为了优化集群在操作系统假死时对节点状态的判断机制,设置 setcap 权限。

##root 用户执行:
sudo setcap cap_net_raw,cap_net_admin=eip  /dm/dmdbms/bin/dmserver
sudo setcap cap_net_raw,cap_net_admin=eip  /dm/dmdbms/bin/dmasmsvr
##验证 setcap,有输出则授权成功:
getcap /dm/dmdbms/bin/dmserver
getcap /dm/dmdbms/bin/dmasmsvr
每节点依次通过“kill -11 dmserver进程号”验证core文件可正常生成。

1.2.14 启停服务

1. 启动监视器

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

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

[dmdba@~]$ /dm/dmdbms/bin/dmcssm  INI_PATH=/dm/dmdbms/bin/dmcssm.ini
[monitor]         2023-12-11 11:37:43: CSS MONITOR V8
[monitor]         2023-12-11 11:37:43: CSS MONITOR SYSTEM IS READY.

[monitor]         2023-12-11 11:37:43: Wait CSS Control Node choosed...
[monitor]         2023-12-11 11:37:44: Wait CSS Control Node choosed succeed.

show

monitor current time:2023-12-11 11:37:48, n_group:3
=================== group[name = GRP_CSS, seq = 0, type = CSS, Control Node = 0] ========================================

[CSS0] auto check = TRUE, global info:
[ASM0] auto restart = TRUE
[DSC0] auto restart = TRUE
[CSS1] auto check = TRUE, global info:
[ASM1] auto restart = TRUE
[DSC1] auto restart = TRUE

ep:     css_time               inst_name     seqno     port    mode         inst_status        vtd_status   is_ok        active       guid              ts
        2023-12-11 11:37:47    CSS0          0         11286   Control Node OPEN               WORKING      OK           TRUE         4111              7050
        2023-12-11 11:37:47    CSS1          1         11286   Normal Node  OPEN               WORKING      OK           TRUE         5250              8182

=================== group[name = GRP_ASM, seq = 1, type = ASM, Control Node = 0] ========================================

n_ok_ep = 2
ok_ep_arr(index, seqno):
(0, 0)
(1, 1)

sta = OPEN, sub_sta = STARTUP
break ep = NULL
recover ep = NULL

crash process over flag is TRUE
ep:     css_time               inst_name     seqno     port    mode         inst_status        vtd_status   is_ok        active       guid              ts
        2023-12-11 11:37:47    ASM0          0         11276   Control Node OPEN               WORKING      OK           TRUE         10142             13065
        2023-12-11 11:37:47    ASM1          1         11276   Normal Node  OPEN               WORKING      OK           TRUE         11581             14496

=================== group[name = GRP_DSC, seq = 2, type = DB, Control Node = 0] ========================================

n_ok_ep = 2
ok_ep_arr(index, seqno):
(0, 0)
(1, 1)

sta = OPEN, sub_sta = STARTUP
break ep = NULL
recover ep = NULL

crash process over flag is TRUE
ep:     css_time               inst_name     seqno     port    mode         inst_status        vtd_status   is_ok        active       guid              ts
        2023-12-11 11:37:47    DSC0          0         5236    Control Node OPEN               WORKING      OK           TRUE         24418             27314
        2023-12-11 11:37:47    DSC1          1         5236    Normal Node  OPEN               WORKING      OK           TRUE         21417             24314

==================================================================================================================

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 启动后 60 秒自动拉起 ASM,60 秒自动拉起 DMSERVER,所以停止 DMSERVER 和 ASM 后,要尽快停止 CSS,避免被自动拉起。
  2. 服务全部停止后,要检查后台进程是否全部停止。

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

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

2.1 安装前准备

2.1.1 集群架构

image.png

在 2 节点 DSC 集群基础上,新增一台单机备库。备库需要配置一个心跳网络和一个业务网络,与 2 节点 DSC 分别进行连接。

2.1.2 实时备机磁盘规划

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

2.1.3 实时备机端口规划

数据库相关配置 信息
数据库服务器名称 db2
业务 IP 192.168.100.3
内部数据交换网络 IP 10.10.10.3
实例名 DW01
PORT_NUM 5236
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.10 章节 “注册服务”。

2.2.2 停止 DSC 集群 DMSERVER 服务

详细步骤参考 1.2.14 节内容。

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/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、修改 db2 机器(备库)中 dm.ini 参数。

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

INSTANCE_NAME = DW01
PORT_NUM = 5238 #数据库实例监听端口 
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=33
MAL_SYS_BUF_SIZE=6000
MAL_BUF_SIZE=3000
MAL_VPOOL_SIZE=5000
MAL_COMPRESS_LEVEL=0
[MAL_INST0]
MAL_INST_NAME   = DSC0
MAL_HOST   = 10.10.10.1
MAL_PORT   = 11246
MAL_INST_HOST            = 192.168.100.1
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 52141
MAL_INST_DW_PORT         = 5276
MAL_LINK_MAGIC            =1 #值一样,连接用的是MAL_HOST,值不一致则用的是MAL_INST_HOST。本例中同网段配置为1,是为了在不同网段搭配dsc+dw或dlink。如无此方面需求可使用默认值0,参数详解请参考使用手册。
[MAL_INST1]
MAL_INST_NAME            = DSC1
MAL_HOST                 = 10.10.10.2
MAL_PORT                 = 11246
MAL_INST_HOST            = 192.168.100.2
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 52141
MAL_INST_DW_PORT         = 5276
MAL_LINK_MAGIC            =1
[MAL_INST2]
MAL_INST_NAME            = DW01
MAL_HOST                 = 10.10.10.3
MAL_PORT                 = 11246
MAL_INST_HOST            = 192.168.100.3
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 52141
MAL_INST_DW_PORT         = 5276
MAL_LINK_MAGIC            =1

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
[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
[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、在 db2 机器上配置 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 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  -p DSC -m mount
[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 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  -p DSC -m mount
[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 DmCSSServiceCSS
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmASMSvrServiceASM
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDSC
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

##db2 机器:
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDW1_01
[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.实例名 强制切换:使用指定组的指定实例,切换为主机
help 更多指令可通过 help 命令获取

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:11286
CSSM_CSS_IP                = 10.10.10.2:11286
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 的所有监视器信息
help 更多指令可通过 help 命令获取

2.2.17 启动数据库并修改参数

先分别依次重启 DSC 2 节点的 ASM 及 CSS 服务,然后以 mount 方式分别启动 DSC 及备库 DMSERVER 服务。

##使用 disql 连接 dsc 数据库执行:
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453331);
SQL> alter database primary;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
##使用 disql 连接备库数据库执行:
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453331);
SQL> alter database standby;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

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. 服务全部停止后,要检查后台进程是否全部停止。

三、数据库其他基础配置

3.1 设置 core 路径

集群每个节点都需要配置 core 生成路径。

##使用 root 用户进行配置
su - root
echo "kernel.core_pattern=/dm/core/core-%e-%p-%t" >> /etc/sysctl.conf
sysctl -p
##使用 dmdba 用户进行测试
su - dmdba
 ##通过 kill -s 11 $$  命令来验证 core 路径是否配置成功,$$表示进程号,可以选择 kill 掉 disql 的进程来测试。
kill -s 11 $$ 
##检查是否有 core 生成
ll -rtl /dm/core 

3.2 开启 SQL 日志

集群每个节点都建议开启 SQL 日志。

##使用 dmdba 用户在 dm.ini 同级目录下配置 sqllog.ini 文件
vi  sqllog.ini

BUF_TOTAL_SIZE          = 10240         #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE                = 1024          #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT            = 6             #SQLs Log buffer keeped count(1~100)

[SLOG_ALL]
    FILE_PATH    = /dm/dmsqllog #根据实际配置
    PART_STOR    = 0
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 512  #根据实际配置
    ASYNC_FLUSH   = 1
    FILE_NUM = 1024			#根据实际配置
    ITEMS    = 0 
    SQL_TRACE_MASK  = 2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:22:24:25:26:27:28:29 
    MIN_EXEC_TIME = 100
    USER_MODE   = 2 
    USERS = 

##登录数据库执行以下命令动态修改 SVR_LOG=1 开启 SQL 日志
call SP_SET_PARA_VALUE(1,'SVR_LOG',1);

sqllog.ini 配置项说明可参考数据库安装目录下的 doc 目录中的《DM8 系统管理员手册》。

3.3 备份作业设置

备份作业设置可参考数据库备份进行配置。

3.4 调整 redo 大小

redo 一般设置 2G,检查确认是否配置为 2G。

--检查 redo 设置大小
select rlog_size/1024/1024 from v$rlogfile;
--修改 redo 可参考如下命令:
alter database resize logfile 'DMDB01.log' to 2048;
alter database resize logfile 'DMDB02.log' to 2048;

四、配置应用连接

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

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

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

4.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:5236,192.168.100.2:5236)

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

4.2 应用连接

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

五、数据库参数优化调整

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

5.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 保持一致。

5.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。

5.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,避免在故障恢复、系统启动时出现登录失败引发双写性能问题导致整个集群性能下降。

5.4 dm_svc.conf

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