DM DSC 集群是一个多实例、单数据库的系统。
DSC系统特性
- 高可用性:只要集群中有一个活动节点,就能正常提供数据库服务。
- 高吞吐量:多个节点同时提供数据库服务,有效提升集群的整体事务处理能力。
- 负载均衡:用户的连接请求被平均分配到集群中的各个节点,确保各个节点的负载大致平衡。
使用说明
- 支持定时器,但只有 控制节点上配置的定时器生效 。只支持脱机配置定时器,不支
持联机配置 - 支持作业,但只有控制节点上支持执行作业
- 不支持 HUGE 表
- 不支持外部表
- 不支持堆表
- 不支持类型别名相关操作
- 不支持 table 级别的 space limit 功能
- 不支持全文索引、词库相关操作
- 不支持安全版本
- 不支持 DBMS_ALERT 、 DBMS_LOCK 包
- 不支持数据复制
- 不能与 MPP 集群混合使用
- 不支持为表空间文件指定 mirror_path
- 不支持闪回查询,不允许打开闪回功能
DMCSS选取控制节点的原则:
- 先启动的 DMCSS 作为控制节点
- DMCSS 同时启动,则选择节点号小的节点为控制节点
DMDSC集群的搭建
安装DM8数据库
Linux系统创建用户组和用户:
(1) 创建安装用户组(root用户操作)
groupadd dinstall
(2) 创建安装用户(root用户操作)
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
(3) 初始化用户密码(root用户操作)
passwd dmdba
之后通过系统提示进行密码设置。
规划路径
切换到dmdba用户下,创建dmdbms目录,dmdbms目录下分别创建config目录存放所有配置文件,arch_0目录存放归档日志,另外一台机器创建为arch_1目录;arch_0_remote目录存放远程归档,另外一台机器创建为arch_1_remote
划分裸设备
2TB以下用fdisk命令划分
- 输入fdisk /dev/sdb
- 依次输入 n p 1 回车 +100M 回车,完成第一块磁盘划分
- 依次输入 n p 2 回车 +100M 回车,完成第二块磁盘划分
- 依次输入 n p 3 回车 +20480M 回车,完成第三块磁盘划分
- 依次输入 n p 4 回车回车回车,完成第四块磁盘划分
- 输入w命令,将裸设备划分的设置进行保存;
2TB以上用parted命令划分
- 输入parted /dev/sdb
- 输入 mklabel gpt 回车,将MBR磁盘磁盘转换为gpt格式
- 输入 mkpart primary 0 100 回车,完成第一块磁盘划分
- 输入 mkpart primary 100 200 回车,完成第二块磁盘划分
- 输入 mkpart primary 200 20680 回车,完成第三块磁盘划分
- 输入 mkpart primary 20680 5498G 回车,完成第四块磁盘划分
- 输入 quit 回车 完成磁盘划分工作
编辑/etc/udev/rules.d/60-raw.rules文件
ACTION=="add",KERNEL=="sdb1",RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add",KERNEL=="sdb2",RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add",KERNEL=="sdb3",RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add",KERNEL=="sdb4",RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add",KERNEL=="raw[1-4]",OWNER="dmdba",GROUP="dinstall",MODE="660"
或者
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="17", RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="18", RUN+="/bin/raw /dev/raw/raw2 %M %m"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="19", RUN+="/bin/raw /dev/raw/raw3 %M %m"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="20", RUN+="/bin/raw /dev/raw/raw4 %M %m"
ACTION=="add",KERNEL=="raw[1-4]",OWNER="dmdba",GROUP="dinstall",MODE="660"
执行下面语句,完成裸设备的绑定
partprobe /dev/sdb
配置dmdcr_cfg.ini
初始化磁盘组的时候会用到该配置文件
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/raw/raw2
DCR_OGUID = 63635
[GRP]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP_CSS
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_CSS]
DCR_EP_NAME = CSS0
DCR_EP_HOST = 192.168.255.11
DCR_EP_PORT = 9341
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.255.12
DCR_EP_PORT = 9343
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_ASM]
DCR_EP_NAME = ASM0
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 192.168.255.11
DCR_EP_PORT = 9349
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 192.168.255.12
DCR_EP_PORT = 9351
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = GRP_RAC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_RAC]
DCR_EP_NAME = RAC0
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9741
[GRP_RAC]
DCR_EP_NAME = RAC1
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9742
初始化磁盘组
启动dmasmcmd工具
cd /home/dmdba/dmdbms/dmdbms/bin
./dmasmcmd
依次执行
create dcrdisk '/dev/raw/raw1' 'dcr'
create votedisk '/dev/raw/raw2' 'vote'
create asmdisk '/dev/raw/raw3' 'LOG0'
create asmdisk '/dev/raw/raw4' 'DATA0'
init dcrdisk '/dev/raw/raw1' from '/home/dmdba/dmdbms/config/dmdcr_cfg.ini' identified by 'abcd'
init votedisk '/dev/raw/raw2' from '/home/dmdba/dmdbms/config/dmdcr_cfg.ini'
配置dmasvrmal.ini和dmdcr.ini文件
dmasvrmal.ini文件
[MAL_INST1]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.255.11
MAL_PORT = 7236
[MAL_INST2]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.255.12
MAL_PORT = 7237
dmdcr.ini文件
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH = /home/dmdba/dmdbms/config/dmasvrmal.ini
DMDCR_SEQNO = 0
#自动拉起设置
#DMDCR_ASM_RESTART_INTERVAL = 30
#DMDCR_ASM_STARTUP_CMD = service DmASMSvrService start
#DMDCR_DB_RESTART_INTERVAL = 60
#DMDCR_DB_STARTUP_CMD = service DmServiceRAC0 start
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH = /home/dmdba/dmdbms/config/dmasvrmal.ini
DMDCR_SEQNO = 1
#自动拉起设置
#DMDCR_ASM_RESTART_INTERVAL = 30
#DMDCR_ASM_STARTUP_CMD = service DmASMSvrService start
#DMDCR_DB_RESTART_INTERVAL = 60
#DMDCR_DB_STARTUP_CMD = service DmServiceRAC0 start
完成所有配置后,可取消注释,实现自动拉起功能
启动CSS、ASM服务
启动CSS
./dmcss DCR_INI=/home/dmdba/dmdbms/config/dmdcr.ini
启动ASM
./dmasmsvr DCR_INI=/home/dmdba/dmdbms/config/dmdcr.ini
创建DMASM磁盘组
[/home/dmdbms/bin]# ./dmasmtool DCR_INI=/home/dmdba/dmdbms/config/dmdcr.ini
#创建日志磁盘组,10s
create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
#创建数据磁盘组
create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'
配置dminit.ini文件
db_name = rac
system_path = +DMDATA/data
system = +DMDATA/data/rac/system.dbf
system_size = 128
roll = +DMDATA/data/rac/roll.dbf
roll_size = 128
main = +DMDATA/data/rac/main.dbf
main_size = 128
ctl_path = +DMDATA/data/rac/dm.ctl
ctl_size = 8
log_size = 2048
dcr_path = /dev/raw/raw1
dcr_seqno = 0
auto_overwrite = 1
PAGE_SIZE = 16
[RAC0]
config_path = /home/dmdba/dmdbms/config/rac0_config
port_num = 5236
mal_host = 192.168.255.11
mal_port = 9340
log_path = +DMLOG/log/rac0_log01.log
log_path = +DMLOG/log/rac0_log02.log
[RAC1]
config_path = /home/dmdba/dmdbms/config/rac1_config
port_num = 5236
mal_host = 192.168.255.12
mal_port = 9341
log_path = +DMLOG/log/rac1_log01.log
log_path = +DMLOG/log/rac1_log02.log
初始化数据库
./dminit control=/home/dmdba/dmdbms/config/dminit.ini
配置远程归档
达梦数据库提供了远程归档,解决了备份还原过程中访问其他节点归档日志文件的问题
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/arch_0
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = RAC1
ARCH_INCOMING_PATH =/home/dmdba/dmdbms/arch_0_remote
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/arch_1
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = RAC0
ARCH_INCOMING_PATH =/home/dmdba/dmdbms/arch_1_remote
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 40960
启动DMSERVER服务
./dmserver /home/dmdba/dmdbms/config/rac0_config/dm.ini dcr_ini=/home/dmdba/dmdbms/config/dmdcr.ini
./dmserver /home/dmdba/dmdbms/config/rac1_config/dm.ini dcr_ini=/home/dmdba/dmdbms/config/dmdcr.ini
创建后台启动脚本
cd /home/dmdba/dmdbms/dmdbms/script/root
创建CSS服务:
./dm_service_installer.sh -t dmcss -p _RAC0 -i /home/dmdba/dmdbms/config/dmdcr.ini
创建DMASM服务:
./dm_service_installer.sh -t dmasmsvr -p _RAC0 -i /home/dmdba/dmdbms/config/dmdcr.ini -y DmCSSService_RAC0
创建DMSERVER服务:
./dm_service_installer.sh -t dmserver -p _RAC0 -i /home/dmdba/dmdbms/config/rac0_config/dm.ini -d /home/dmdba/dmdbms/config/dmdcr.ini -y DmASMSvrService_RAC0
配置监视器
创建dmcssm.ini文件
CSSM_OGUID = 63635
CSSM_CSS_IP = 192.168.0.100:9341
CSSM_CSS_IP = 192.168.0.101:9343
CSSM_LOG_PATH = ../log
CSSM_LOG_FILE_SIZE = 32
CSSM_LOG_SPACE_LIMIT = 0
自动化部署DSC
DSC自动部署脚本的实现逻辑是通过配置文件dm8_dsc.conf,设置好搭建集群用到的目录、端口号、部署机器的IP 等各种信息,然后通过调用bin/config.py 来读取配置文件dm8_dsc.conf,创建与.conf 文件同名的目录dm8_dsc,生成集群的各种配置文件及操作文件Shell 脚本。然后通过调用Step_xx.sh 之类的shell 脚本,实现在远程linux 服务器部署DSC 集群的步骤。
该部署工具是串行的,前面的步骤必须成功,若某一步骤出错,则后面的步骤没有执行的必要性。
自动化部署目录结构:
裸设备的绑定同上
配置dm8_dsc.conf
#请养成用dmdba用户的习惯
#此部署工具需要在Linux系统上运行,确保该Linux机器具备python2.7的运行环境,并且可通过外网连接到集群所有机器。集群机器必须是linux机器,支持ssh。
#groupadd dinstall
#useradd -m -s /bin/bash -g dinstall dmdba
#passwd dmdba
#配置文件
[GLOBAL]
DM_HOME = /mppdata/dsc/bin #根据实际修改
DB_PATH = /mppdata/dsc/rac_config #DSC 节点的目录,里面存放控制文件、配置文件等
ARCH_PATH = /mppdata/dsc/arch #DSC 节点的本地归档、远程归档路径
BAK_PATH = /mppdata/dsc/dbbak #DSC 节点数据库备份的默认路径
DCR_ASM_PATH = /dev/raw/raw1 #操作系统绑定的dcr路径
VOTE_ASM_PATH = /dev/raw/raw2 #操作系统绑定的vote路径
LOG_ASM_PATH = /dev/raw/raw3 #操作系统绑定的redo日志路径
DATA_ASM_PATH = /dev/raw/raw4 #操作系统绑定的数据库数据文件路径
[ARCH]
ARCH_INI_OPEN = 1 #是否开启DSC节点的本地归档及远程归档,1开启,0不开启
ARCH_SPACE_LIMIT = 10240 #单个节点的本地归档或远程归档的大小空间限制,如是4节点DSC,则需要预留4*ARCH_SPACE_LIMIT的空间。
SSH_PORT = 22 #远程Linux服务器的ssh端口号,一般为22,某些客户出于安全考虑,会更改ssh的默认连接端口
[DSC_DMINIT] #初始化DSC实例的一些参数
DB_NAME = DSC #实例名称
SYS_PATH = data #在ASM存储中的数据文件路径,注意大小写
SYSTEM_SIZE = 128 #SYSTEM.dbf的大小
ROLL_SIZE = 10000 #Roll表空间的大小
MAIN_SIZE = 128 #MAIN表空间的大小
CTL_SIZE = 8 #dm.ctl文件的大小
LOG_SIZE = 2048 #redo文件的大小,由于dsc各个节点的redo文件名称不一致,后续更改redo大小需要每个节点依次修改,建议此处直接设置最大值2048
AUTO_OVERWRITE = 1 #ASM中的同名文件是否覆盖
PAGE_SIZE = 32 #初始化实例时的页大小
EXTENT_SIZE = 32 #初始化实例时的簇大小
DB_INIT_PARA = CASE_SENSITIVE=1,UNICODE_FLAG=0 #其它初始化参数,需要什么参数按格式增加即可,多个参数以逗号隔开
[DSC_CONF]
DCR_OGUID = 200826 #DCR的oguid,取6位数字即可,常用规律为当前日期
[DSC_PORT] #搭建集群时所用到的各个端口号
DB_INST_PORT = 11236 #DSC实例端口号
DB_MAL_PORT = 11246 #DSC实例的MAL通信端口号
DCR_CHECK_PORT = 11256 #DCR 检查端口号。检查实例是否活动的时候用,各实例不能冲突,故该端口会随着实例自动+1
ASM_MAL_PORT = 11266 #ASM 通信的端口号
ASM_DCR_EP_PORT = 11276 #ASM 节点 TCP 监听端口。各实例不能冲突,故该端口会随着实例自动+1
CSS_DCR_EP_PORT = 11286 #CSS 节点 TCP 监听端口
[DSC_TIME] #DSC集群一些心跳故障认证时间
DB_DCR_GRP_DSKCHK_CNT = 60 #心跳,DSC DB 故障认定时间
ASM_DCR_GRP_DSKCHK_CNT = 60 #心跳,DSC ASM 故障认定时间
CSS_DCR_GRP_DSKCHK_CNT = 60 #心跳,DSC CSS 故障认定时间
DMDCR_ASM_RESTART_INTERVAL = 0 #DMCSS 认定 DMASM 节点故障重启的时间间隔(取值 0~86400s),0则不会执行拉起
DMDCR_DB_RESTART_INTERVAL = 0 #DMCSS 认定 DMDSC 节点故障重启的时间间隔(取值 0~86400s),0则不会执行拉起
DMDCR_AUTO_OPEN_CHECK = 60 #指定时间内如果节点实例未启动,DMCSS 会自动将节点踢出集群环境,单位为秒
MAL_CHECK_INTERVAL = 61 #MAL 链路检测时间间隔,取值范围(0s-1800s)为了防止误判,DMDSC 集群中,建议将配置值>= DB_DCR_GRP_DSKCHK_CNT。
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间,取值范围(2s-1800s)
[ASM]
DCR_EP_SHM_KEY = 42424 #共享内存标识,不同实例的该值不一样,故该端口会随着实例自动+1
DCR_EP_SHM_SIZE = 10 #共享内存大小
[MAIL]#一般不用改参数,以128GB内存为例
MAL_SYS_BUF_SIZE=6000
MAL_BUF_SIZE=3000
MAL_VPOOL_SIZE=5000
MAL_COMPRESS_LEVEL=0
#各节点配置
[DSC1]
DSC_MAL_HOST = 192.168.18.18 #内网IP
DSC_INST_HOST = 192.168.104.18 #外网IP
DSC_INST_UID = dmdba
DSC_INST_PWD = hust4400
[DSC2]
DSC_MAL_HOST = 192.168.18.17
DSC_INST_HOST = 192.168.104.17
DSC_INST_UID = dmdba
DSC_INST_PWD = hust4400
操作流程
- 运行部署脚本dm8_dsc.py,输入配置文件dm8_dsc.conf
- 输入h ,打印帮助菜单
- 运行01,存储ssh 的相关host keys 等信息
- 运行02 ,检查集群机器间的网络是否正常
- 输入03 操作,即可一键部署集群
以上为手动和自动部署DSC集群的两种不同方式,各有利弊,自动化部署简单便捷,但需要了解脚本含义,以便报错可以修改调整修改;手动部署更能明确DSC集群实现的原理,按步骤操作,报错调整更为直接,但是配置较为麻烦。此外,两种方式后台脚本的创建原理还有所不同。