近年来,在“国产替代”、“安全发展”的战略推动下,我国信创产业发展迅速。操作系统和数据库管理软件作为IT行业的核心基础软件,也是信创产业的核心环节,在信息系统的软件和硬件之间起到承上启下的作用。基于此,云毅推出信创专栏,对信创操作系统与信创数据库进行调研和分享,赋能金融机构信创化管理升级增效。
引言
产线系统一般对业务的连续性要求较高,而单实例数据库存在单点故障风险。达梦数据库提供了共享存储数据库集群,允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供。
01
共享存储集群架构
一、架构原理
达梦共享存储数据库集群的英文全称 DM Data Shared Cluster,简称 DMDSC。
DMDSC集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。数据文件、控制文件在集群系统中只有一份,保存在共享存储上,每个实例节点平等地使用这些文件。每个节点有自己独立的联机日志和归档日志,其中联机日志保存在共享存储上,归档日志可以保存在本地存储上也可以保存在共享存储上。
DMDSC 集群主要由数据库和数据库实例、共享存储、本地存储、通信网络、以及集群控制软件 DMCSS 组成。
二、集群特点
达梦共享存储集群主要有以下特点:
高可用性
高吞吐量
负载均衡
高可用性
达梦共享存储集群提供了数据库实例的高可用,当其中一个实例节点出现故障时,DMCSS 检测故障、并自动将故障节点踢出集群,保证数据库服务的正常。原故障节点连接的用户会自动切换到正常的实例节点,这些连接上的未提交事务将被回滚,已提交事务不受影响。
高吞吐量
集群中包含多个数据库实例,数据库实例访问独立的处理器、内存,数据库实例之间通过缓存交换技术提升共享数据的访问速度,每个数据库实例都可以接收并处理用户的各种数据库请求。
与单节点数据库管理系统相比,DMDSC 集群可以充分利用多台物理机器的处理能力,支撑更多的用户连接请求,提供更高的吞吐量。
负载均衡
用户通过配置达梦数据库连接服务名来访问 DMDSC 集群,可以实现节点间的自动负载均衡,用户的数据库连接请求会被自动、平均地分配到 DMDSC 集群中的各个节点。并且连接服务名支持 JDBC、DPI、ODBC、DCI、.Net Provider 等各种数据库接口。
02
集群搭建
一、安装前准备
1.1 环境信息
两台机器上提前安装好DM8数据库软件
1.2 共享磁盘规划
DMDSC 集群为了实现多实例同时访问和修改数据,需要数据文件、控制文件和日志文件都放到共享存储上。DM 支持两种共享存储,裸设备和 DMASM,裸设备是未经过格式化的特殊字符设备,推荐使用 DMASM 共享存储。
其中,VOTE 是表决磁盘,一个集群一个表决磁盘。DCR 是 DM 集群注册表的简称,用于存储、维护集群配置的详细信息,一个集群一个注册表。
二、集群搭建
2.1 配置 dmdcr_cfg.ini
只需要在一个节点配置
在 db01 机器上配置:
[dmdba@db01 ~]$ mkdir /dm8/dsc_config
[dmdba@db01 ~]$ vim /dm8/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.100.11 #心跳地址
DCR_EP_PORT = 11286 #CSS 端口
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 10.10.100.12
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.100.11 #心跳地址
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.100.12
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 = 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 = 11257
2.2 初始化磁盘组
只需要在一个节点上配置
db01机器上配置:
[dmdba@db01 ~]$ dmasmcmd
DMASMCMD V8
ASM>create dcrdisk '/dev/dm/asm-dmdcr' 'dcr'
ASM>create votedisk '/dev/dm/asm-dmvote' 'vote'
ASM>init dcrdisk '/dev/dm/asm-dmdcr' from '/dm8/dsc_config/dmdcr_cfg.ini' identified by 'xxxxxx'
ASM>init votedisk '/dev/dm/asm-dmvote' from '/dm8/dsc_config/dmdcr_cfg.ini'
ASM>create asmdisk '/dev/dm/asm-dmdata' 'DATA0'
ASM>create asmdisk '/dev/dm/asm-dmarch' 'ARCH0'
2.3 配置 dmasvrmal.ini
db01机器上配置:
[dmdba@db01 ~]$ vim /dm8/dsc_config/dmasvrmal.ini
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 10.10.100.11 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 10.10.100.12
MAL_PORT = 11266
db02机器上配置:
[dmdba@db02 ~]$ vim /dm8/dsc_config/dmasvrmal.ini
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 10.10.100.11 #心跳地址
MAL_PORT = 11266 #MAL 监听端口
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 10.10.100.12
MAL_PORT = 11266
2.4 配置 dmdcr.ini 文件
db01机器上配置:
[dmdba@db01 ~]$ vim /dm8/dsc_config/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH = /dm8/dsc_config/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
db02机器上配置:
[dmdba@db02 ~]$ vim /dm8/dsc_config/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH = /dm8/dsc_config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
2.5 启动 DMCSS和DMASM 服务
db01和db02机器上分别启动DMCSS服务:
[dmdba@db01~]$ /dm8/bin/dmcss DCR_INI=/dm8/dsc_config/dmdcr.ini
[dmdba@db02~]$ /dm8/bin/dmcss DCR_INI=/dm8/dsc_config/dmdcr.ini
db01和db02机器上分别启动DMASM服务:
[dmdba@db01 ~]$ /dm8/bin/dmasmsvr DCR_INI=/dm8/dsc_config/dmdcr.ini
[dmdba@db02 ~]$ /dm8/bin/dmasmsvr DCR_INI=/dm8/dsc_config/dmdcr.ini
2.6 创建 DMASM 磁盘组
只需要在一个机器上操作
db01机器上配置:
[dmdba@db01 ~]$ /dm8/bin/dmasmtool DCR_INI=/dm8/dsc_config/dmdcr.ini
DMASMTOOL V8
ASM>create diskgroup 'DMDATA' asmdisk '/dev/dm/asm-dmdata'
ASM>create diskgroup 'DMARCH' asmdisk '/dev/dm/asm-dmarch'
2.7 初始化 DB 环境
只需要在一个节点操作
2.7.1 配置dminit.ini文件
db01机器上配置:
[dmdba@db01 ~]$ vim /dm8/dsc_config/dminit.ini
DB_NAME = DSC
SYSDBA_PWD = SYSDBA_123
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 = /dm8/dsc_config/DSC0
PORT_NUM = 5236
MAL_HOST = 10.10.100.11
MAL_PORT = 11246
LOG_PATH = +DMDATA/DSC0_LOG01.log
LOG_PATH = +DMDATA/DSC0_LOG02.log
[DSC1]
CONFIG_PATH = /dm8/dsc_config/DSC1
PORT_NUM = 5236
MAL_HOST = 10.10.100.12
MAL_PORT = 11246
LOG_PATH = +DMDATA/DSC1_LOG01.log
LOG_PATH = +DMDATA/DSC1_LOG02.log
2.7.2 执行DB初始化命令
db01机器上执行:
[dmdba@db01 ~]$ /dm8/bin/dminit control=/dm8/dsc_config/dminit.ini
2.7.3 拷贝配置文件到db02机器
拷贝上面生成的配置文件
/dm8/dsc_config/DSC1到db02机器。
db01机器上执行:
[dmdba@db01 ~]$ scp -rp /dm8/dsc_config/DSC1 192.168.203.145:/dm8/dsc_config/
2.8 配置 dmarch.ini 文件
db01机器上配置:
[dmdba@db01 ~]$ vim /dm8/dsc_config/DSC0/dm.ini
ARCH_INI = 1
[dmdba@db01 ~]$ vim /dm8/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/DSC0
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = +DMARCH/DSC1
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
db02机器上配置:
[dmdba@db02 ~]$ vim /dm8/dsc_config/DSC1/dm.ini
ARCH_INI = 1
[dmdba@db02 ~]$ vim /dm8/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/DSC1
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH = +DMARCH/DSC0
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
2.9 启动数据库服务
db01机器上执行:
[dmdba@db01 ~]$ /dm8/bin/dmserver /dm8/dsc_config/DSC0/dm.ini dcr_ini=/dm8/dsc_config/dmdcr.ini
db02机器上执行:
[dmdba@db02 ~]$ /dm8/bin/dmserver /dm8/dsc_config/DSC1/dm.ini dcr_ini=/dm8/dsc_config/dmdcr.ini
2.10注册CSS、ASM、DMSERVER 后台服务
db01机器上执行:
[root@db01 ~]# /dm8/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm8/dsc_config/dmdcr.ini -p CSS
[root@db01 ~]# /dm8/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm8/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@db01 ~]# /dm8/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm8/dsc_config/DSC0/dm.ini -dcr_ini /dm8/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -m open -p DSC
db02机器上执行:
[root@db02 ~]# /dm8/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm8/dsc_config/dmdcr.ini -p CSS
[root@db02 ~]# /dm8/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm8/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[root@db02 ~]# /dm8/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm8/dsc_config/DSC1/dm.ini -dcr_ini /dm8/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service -m open -p DSC
2.11 通过服务启动集群
前面的启动命令都是通过前台命令临时启动的,会话窗口关闭后服务也自动终止了。正式启动集群需要通过服务方式启动集群,为了使集群启动更简便,可以配置数据库服务以及ASM服务跟随CSS服务自动启动。
2.11.1 配置数据库服务和ASM服务自启动
db01机器上配置:
[dmdba@db01 ~]$ vim /dm8/dsc_config/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH = /dm8/dsc_config/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 = /dm8/bin/DmASMSvrServiceASM start
DMDCR_DB_RESTART_INTERVAL = 60 ##CSS认定DSC故障重启的时间,设置为0不自动拉起
DMDCR_DB_STARTUP_CMD = /dm8/bin/DmServiceDSC start
db02机器上配置:
[dmdba@db02 ~]$ vim /dm8/dsc_config/dmdcr.ini
DMDCR_PATH = /dev/dm/asm-dmdcr
DMDCR_MAL_PATH = /dm8/dsc_config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_AUTO_OPEN_CHECK = 111
DMDCR_ASM_TRACE_LEVEL = 2
DMDCR_ASM_RESTART_INTERVAL = 60
DMDCR_ASM_STARTUP_CMD = /dm8/bin/DmASMSvrServiceASM start
DMDCR_DB_RESTART_INTERVAL = 60
DMDCR_DB_STARTUP_CMD = /dm8/bin/DmServiceDSC start
2.11.2 启动集群
db01和db02机器上依次执行:
[dmdba@db01 ~]$ /dm8/bin/DmCSSServiceCSS start
[dmdba@db02 ~]$ /dm8/bin/DmCSSServiceCSS start
检查集群状态:
[dmdba@db01 ~]$ disql SYSDBA/xxxxxx
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 106.203(ms)
disql V8
SQL> select * from V$dsc_ep_info;
行号 EP_NAME EP_SEQNO EP_GUID EP_TIMESTAMP EP_MODE EP_STATUS
---------- ------- ----------- -------------------- -------------------- ------------ ---------
1 DSC0 0 3520257 3529090 Control Node OK
2 DSC1 1 3521053 3529887 Normal Node OK
已用时间: 159.330(毫秒). 执行号:300.
2.12 配置监视器
db01机器上配置:
[dmdba@db01 ~]$ vim /dm8/dsc_config/dmcssm.ini
CSSM_OGUID = 210715
CSSM_CSS_IP = 10.10.100.11:11286
CSSM_CSS_IP = 10.10.100.12:11286
CSSM_LOG_PATH = /dm8/log
CSSM_LOG_FILE_SIZE = 512
CSSM_LOG_SPACE_LIMIT = 0
db02机器上配置:
[dmdba@db02 ~]$ vim /dm8/dsc_config/dmcssm.ini
CSSM_OGUID = 210715
CSSM_CSS_IP = 10.10.100.11:11286
CSSM_CSS_IP = 10.10.100.12:11286
CSSM_LOG_PATH = /dm8/log
CSSM_LOG_FILE_SIZE = 512
CSSM_LOG_SPACE_LIMIT = 0
启动监视器,查看状态:
[dmdba@db01 ~]$ /dm8/bin/dmcssm INI_PATH=/dm8/dsc_config/dmcssm.ini
[monitor] 2023-10-17 13:42:53: CSS MONITOR V8
[monitor] 2023-10-17 13:43:03: CSS MONITOR SYSTEM IS READY.
[monitor] 2023-10-17 13:43:03: Wait CSS Control Node choosed...
[monitor] 2023-10-17 13:43:04: Wait CSS Control Node choosed succeed.
show
monitor current time:2023-10-17 13:43:09, n_group:3
=================== group[name = GRP_CSS, seq = 0, type = CSS, Control Node = 0] ========================================
[CSS0] auto check = TRUE, global info:
[ASM0] auto restart = FALSE
[DSC0] auto restart = FALSE
[CSS1] auto check = TRUE, global info:
[ASM1] auto restart = FALSE
[DSC1] auto restart = FALSE
ep: css_time inst_name seqno port mode inst_status vtd_status is_ok active guid ts
2023-10-17 13:43:08 CSS0 0 11286 Control Node OPEN WORKING OK TRUE 208270 216136
2023-10-17 13:43:08 CSS1 1 11286 Normal Node OPEN WORKING OK TRUE 216587 224489
=================== 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-10-17 13:43:08 ASM0 0 11276 Control Node OPEN WORKING OK TRUE 229680 237520
2023-10-17 13:43:08 ASM1 1 11277 Normal Node OPEN WORKING OK TRUE 239103 246951
=================== 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-10-17 13:43:08 DSC0 0 5236 Control Node OPEN WORKING OK TRUE 2287613 2289140
2023-10-17 13:43:08 DSC1 1 5236 Normal Node OPEN WORKING OK TRUE 2293305 2294817
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!