一、DMDSC概念(Oracle:RAC、ASM):
DMDSC集群是一个多实例、单数据库的系统,具有高可用性、高吞吐量、负载均衡等特性。
多个数据库实例可以同时访问、修改同一个数据库的数据。
用户可以登录集群中的任意任意一个数据库实例,获得完整的数据库服务。
数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件。
各个节点有自己独立的联机日志和归档日志,这些文件就保存在共享存储上。
DMDSC集群得以实现的重要基础就是共享存储。
DM支持的共享存储有两种:裸设备、DMASM。
DMDSC集群主要由数据库和数据库实例、共享存储、本地存储、通信网络以及集群控制软件DMCSS组成。
共享存储:
DMDSC集群中,为了实现多个实例同时访问、修改数据,要求将数据文件、控制文件、日志文件保存在共享存储上;
DMDSC支持使用裸设备或DMASM文件系统作为共享存储;
配置DMDSC集群需要的DCR、Voting disk ,也必须保存在共享存储上,目前仅支持裸设备存放DCR和Voting disk 。
本地存储:
DMDSC集群中,本地存储用来保存配置文件记录数据库实例配置信息的dm.ini、dmarch.ini、dmmal.ini本地归档日志、远程归档日志。
通信网络:
DMDSC集群中,网络分为内部网络和公共网络两个部分。
实际应用中一般还存在服务器到共享存储的网络。
内部网络用于数据库实例之间交换信息和数据,MAL链路使用的就是内部网络。
公共网络用于对外提供数据库服务,用户使用公共网络地址登录DM DSC集群访问数据库。
DMASM:
DM分布式文件系统(DMASM),来管理裸设备的磁盘和文件,DMASM存储管理的最小单元,AU的大小为1M,DMASM提供了基本的数据文件访问接口,可以有效降低DMDSC共享存储的维护难度,DMASM提供的主要功能包括:
分布式管理(多台机器并发访问DMASM磁盘和文件,提供全局并发控制);
磁盘组管理(支持创建和删除磁盘组,一个磁盘组可以包含一个或多个DMASM磁盘;磁盘组支持在线增加DMASM磁盘,实现动态存储扩展);
文件系统(支持创建、删除、截断文件,支持创建目录,支持动态扩展文件);
完善、高效的访问接口(dmasmapi);
通用功能的管理工具(dmasmtool);
Voting disk(心跳):
DMCSS实例启动后,每隔1秒向Voting disk指定区域写入心跳信息(包括自身的状态、时间戳等),表示DMCSS节点处于活动状态。
DMCSS(集群控制):
DMCSS是一款集群控制软件,专门负责监控集群中各个节点的运行状态。
DMCSS主要功能包括:管理集群的启动和关闭、控制节点故障处理以及管理节点重新加入流程的管理。
DMCSS控制节点通过一系列的集群指令,控制被监控对象的启动、故障处理、状态切换等。
如何选举DMCSS控制节点:
DMCSS启动后向Voting disk写入信息,并读取其他DMCSS节点的信息,如果DMCSS集群中还没有活动的控制节点,则选举DMCSS控制节点。
DMCSS选举的原则有两条:
1.先启动的DMCSS作为控制节点
2.DMCSS同时启动,则选择节点号小的节点作为控制节点
选取监控对象控制节点:
DMCSS控制节点启动后,会为基于DMASM裸设备的DMDSC集群指定控制节点。DMCSS选取监控对象控制节点的原则有两条:
只有一个活动节点,则设置活动节点为控制节点;
存在多个控制节点,则选择节点号小的节点为控制节点;
节点故障处理与重新加入:
DMCSS控制节点检测到实例故障后,首先向故障实例的Voting disk区域写入kill命令(所有实例一旦发现kill命令,无条件自杀),避免故障实例仍然处于活动状态,引起脑裂,然后启动故障处理流程,不同类型实例的故障处理流程㛮一些差异;如果检测到故障节点恢复,DMCSS会通知控制节点启动节点重加入流程。
二、DMDSC安装前规划:
1 台(共享存储):4G 内存,2CPU,100G,win2019,192.168.63.130
2 台 ( DMDSC) : 4G 内 存, 2/4CPU , 100G, RHEL7.6,192.168.63.131/132
数据库名:wjdb
实例名:wjdb1/wjdb2
安装前的规划 :
操作系统:RHEL 7.6
软件名称:达梦8
时区:+0800
内存:4g
OS 用户名/密码:root/root,dmdba/dmdba
系统组:dinstall
数据库 SID:wjdb1/wjdb2
数据库名称:wjdb
归档文件:无
数据库版本:DM Database Server x64 V8
DM_HOME 目录:/dm/dmdbms/dm8
数据库监听端口:5236
数据库字符集:GB18030
数据库用户:sysdba 密码/dameng123
页大小:8k
日志组:3 个 256M
三、DMDSC共享存储安装与配置、DMDSC安装配置、日常维护:
数据库安装(略)
su - dmdba
vi /dm/dmdbms/dm8/data/dmdcr_cfg.ini
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/raw/raw2
DCR_OGUID = 63635
[GRP]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = wjcss
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[wjcss]
DCR_EP_NAME = wjcss1
DCR_EP_HOST = 192.168.63.131
DCR_EP_PORT = 9541
[wjcss]
DCR_EP_NAME = wjcss2
DCR_EP_HOST = 192.168.63.132
DCR_EP_PORT = 9542
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = wjasm
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[wjasm]
DCR_EP_NAME = wjasm1
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 192.168.63.131
DCR_EP_PORT = 9641
DCR_EP_ASM_LOAD_PATH = /dev/raw
[wjasm]
DCR_EP_NAME = wjasm2
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 192.168.63.132
DCR_EP_PORT = 9642
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = wjdsc
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[wjdsc]
DCR_EP_NAME = wjdsc1
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9741
[wjdsc]
DCR_EP_NAME = wjdsc2
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9742
su - dmdba
[dmdba@linux131 ~]$ dmasmcmd DMASMCMD V8
ASM>
create dcrdisk '/dev/raw/raw1' 'dcr'
create votedisk '/dev/raw/raw2' 'vote'
create asmdisk '/dev/raw/raw3' 'logdisk1'
create asmdisk '/dev/raw/raw4' 'datadisk1'
create asmdisk '/dev/raw/raw5' 'datadisk2' init dcrdisk '/dev/raw/raw1' from '/dm/dmdbms/dm8/data/dmdcr_cfg.ini' identified by 'dmdsc'
init votedisk '/dev/raw/raw2' from '/dm/dmdbms/dm8/data/dmdcr_cfg.ini
192.168.63.131/192.168.63.132:
vi /dm/dmdbms/dm8/data/dmasvrmal.ini
[MAL_INST1]
MAL_INST_NAME = wjasm1
MAL_HOST = 192.168.63.131
MAL_PORT = 7236
[MAL_INST2]
MAL_INST_NAME = wjasm2
MAL_HOST = 192.168.63.132
MAL_PORT = 7237
vi /dm/dmdbms/dm8/data/dmdcr.ini
DMDCR_PATH = /dev/raw/raw1 #dmasmsvr 使用的 MAL 配置文件路径
DMDCR_MAL_PATH =/dm/dmdbms/dm8/data/dmasvrmal.ini
DMDCR_SEQNO = 0
#第一台为 0,第二台改为 1
#DMDCR_SEQNO = 1
#ASM 重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /dm/dmdbms/dm8/bin/dmasmsvr
DCR_INI=/dm/dmdbms/dm8/data/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /dm/dmdbms/dm8/bin/dmserver
path=/dm/dmdbms/dm8/data/wjdsc1_config/dm.ini
DCR_INI=/dm/dmdbms/dm8/data/dmdcr.ini
#第二台:
#DMDCR_DB_STARTUP_CMD = /dm/dmdbms/dm8/bin/dmserver
path=/dm/dmdbms/dm8/data/wjdsc2_config/dm.ini
DCR_INI=/dm/dmdbms/dm8/data/dmdcr.ini
关闭 virbr0:
ifconfig,检查是不是有 virbr0,一定要禁用,否则影响后面的使用:
virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网
卡提供 NAT 访问外网的功能。
禁用端口
ifconfig virbr0 down
删除端口
brctl delbr virbr0
virbr0 是由 libvirtd 服务创建,关闭服务:
systemctl disable libvirtd
root:
192.168.63.131:
/dm/dmdbms/dm8/script/root/dm_service_installer.sh -t dmcss -dcr_ini
/dm/dmdbms/dm8/data/dmdcr.ini -p wjdsc1
/dm/dmdbms/dm8/script/root/dm_service_installer.sh -t dmasmsvr
-dcr_ini /dm/dmdbms/dm8/data/dmdcr.ini -p wjdsc1 -y DmCSSServicewjdsc1
第二台:192.168.63.132:
/dm/dmdbms/dm8/script/root/dm_service_installer.sh -t dmcss -dcr_ini
/dm/dmdbms/dm8/data/dmdcr.ini -p wjdsc2
/dm/dmdbms/dm8/script/root/dm_service_installer.sh -t dmasmsvr
-dcr_ini /dm/dmdbms/dm8/data/dmdcr.ini -p wjdsc2 -y DmCSSServicewjdsc2
192.168.63.131:
root:
systemctl start DmCSSServicewjdsc1
systemctl start DmASMSvrServicewjdsc1
or:
su - dmdba
DmCSSServicewjdsc1 start
DmASMSvrServicewjdsc1 start
192.168.63.132:
root:
systemctl start DmCSSServicewjdsc2
systemctl start DmASMSvrServicewjdsc2
or:
su - dmdba
DmCSSServicewjdsc2 start
DmASMSvrServicewjdsc2 start
su - dmdba
[dmdba@linux131 ~]$
dmasmtool
DCR_INI=/dm/dmdbms/dm8/data/dmdcr.ini
DMASMTOOL V8
ASM>
create diskgroup 'dglog' asmdisk '/dev/raw/raw3'
create diskgroup 'dgdata01' asmdisk '/dev/raw/raw4'
vi /dm/dmdbms/dm8/data/dminit.ini
db_name = wjdsc
system_path = +dgdata01/data
system = +dgdata01/data/wjdsc/system.dbf
system_size = 128
roll = +dgdata01/data/wjdsc/roll.dbf
roll_size = 128
main = +dgdata01/data/wjdsc/main.dbf
main_size = 128
ctl_path = +dgdata01/data/wjdsc/dm.ctl
ctl_size = 8
log_size = 256
dcr_path = /dev/raw/raw1
dcr_seqno = 0
auto_overwrite = 1
[wjdsc1]
#inst_name跟dmdcr_cfg.ini 中DB类型 group中DCR_EP_NAME对应
config_path = /dm/dmdbms/dm8/data/wjdsc1_config
port_num = 5236
mal_host = 192.168.63.131
mal_port = 9340
log_path = +dglog/log/wjdsc1_log01.log
log_path = +dglog/log/wjdsc1_log02.log
[wjdsc2]
#inst_name 跟 dmdcr_cfg.ini中DB类型group中DCR_EP_NAME对应
config_path = /dm/dmdbms/dm8/data/wjdsc2_config
port_num = 5236
mal_host = 192.168.63.132
mal_port = 9341
log_path = +dglog/log/wjdsc2_log01.log
log_path = +dglog/log/wjdsc2_log02.log
192.168.63.131:
dminit control=/dm/dmdbms/dm8/data/dminit.ini
scp -r /dm/dmdbms/dm8/data/wjdsc2_config
wj82:/dm/dmdbms/dm8/data/
192.168.63.131:
root:
/dm/dmdbms/dm8/script/root/dm_service_installer.sh -t dmserver
-dm_ini /dm/dmdbms/dm8/data/wjdsc1_config/dm.ini -dcr_ini
/dm/dmdbms/dm8/data/dmdcr.ini -p wjdsc1 -y
DmASMSvrServicewjdsc1
systemctl start DmServicewjdsc1
或者:
su - dmdba
DmServicewjdsc1 start
192.168.63.132:
root:
/dm/dmdbms/dm8/script/root/dm_service_installer.sh -t dmserver
-dm_ini /dm/dmdbms/dm8/data/wjdsc2_config/dm.ini -dcr_ini
/dm/dmdbms/dm8/data/dmdcr.ini -p wjdsc2 -y
DmASMSvrServicewjdsc2
systemctl start DmServicewjdsc2
or:
su - dmdba
DmServicewjdsc1 start
./disql
alter user sysdba identified by dameng123;
select * from v$dsc_ep_info;
select instance_name from v$instance;
select group_id,disk_id,disk_name,disk_path,size/1024 from V$ASMDISK;
select group_id,group_name,au_size,total_size from v$asmgroup;
select file_id,path,size_bytes/1024/1024 from v$asmfile;
192.168.63.131/192.168.63.132:都需要修改:
vi /etc/dm_svc.conf
wjdsc=(192.168.63.131:5236,192.168.63.132:5236)
SWITCH_INTERVAL=(3)
SWITCH_TIME=(10000)
TIME_ZONE=(480)
LANGUAGE=(cn)
dm_svc.conf 配置文件包含如下配置选项:
1.SERVERNAME:连接服务名,用户通过连接服务名访问数据库。
2.IP:数据库所在的 IP 地址,如果是 IPv6 地址,为了区分端口,需要
用[]封闭 IP 地址。
3.PORT:数据库使用的 TCP 连接端口,可选配置,不配置则使用连接
上指定的端口。
4.SWITCH_INTERVAL:检测到数据库实例故障时,接口在服务器之间切
换的次数;超过设置次数没有连接到有效数据库时,断开连接并报错。有
效值范围 1~9223372036854775807,默认值为 3。
5.SWITCH_TIME:表示在服务器之间切换的时间间隔,单位为毫秒,有
效值范围 1~9223372036854775807,默认值为 200。
[dmdba@linux132 ~]$ ./disql SYSDBA/dameng123@wjdsc
select * from v$dsc_ep_info;
Windows 上配置文件:
64 位 的 DM 安 装 在 Win64 操 作 平 台 下 , 此 文 件 位
于%SystemRoot%\system32
dm_svc.conf:
wjdsc=(192.168.63.131:5236,192.168.63.132:5236)
SWITCH_INTERVAL=(10)
SWITCH_TIME=(10000)
TIME_ZONE=(480)
LANGUAGE=(cn)
D:\dmdbms\bin>./disql sysdba/dameng123@wjdsc
select * from v$dsc_ep_info;
create tablespace wj datafile '+dgdata01/data/wjdsc/wj01.dbf'
size 100 autoextend off;
create tablespace wj_idx datafile
'+dgdata01/data/wjdsc/wj_idx01.dbf' size 100 autoextend off;
create user "wj" identified by "wj123456" default tablespace wj
default index tablespace wj_idx;
grant dba to wj;
conn wj/wj123456;
create table wj (id int,name varchar(50),create_date date);
insert into wj values(1,'shui','2021-04-01');
insert into wj values(2,'ku','2021-04-02');
commit;
select count(*) from wj;
wjdsc1:
vi /dm/dmdbms/dm8/data/wjdsc1_config/dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch/wjdsc1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = wjdsc2
ARCH_INCOMING_PATH = /dm/dmarch/wjdsc2
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
vi /dm/dmdbms/dm8/data/wjdsc1_config/dm.ini
ARCH_INI=1
wjdsc2:
vi /dm/dmdbms/dm8/data/wjdsc2_config/dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch/wjdsc2
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = wjdsc1
ARCH_INCOMING_PATH = /dm/dmarch/wjdsc1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
vi /dm/dmdbms/dm8/data/wjdsc2_config/dm.ini
ARCH_INI=1
call SF_SET_SYSTEM_PARA_VALUE ('MAX_OS_MEMORY',95,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('MAX_SESSIONS',1000,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('MAX_SESSION_STATEMENT',5000,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('BUFFER',1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('MAX_BUFFER',1024,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('BUFFER_POOLS',2,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('RECYCLE',512,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('RECYCLE_POOLS',1,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('HJ_BUF_GLOBAL_SIZE',500,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('HJ_BUF_SIZE',300,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('DICT_BUF_SIZE',50,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('TEMP_SIZE',200,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('VM_POOL_SIZE',256,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('SESS_POOL_SIZE',256,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('CACHE_POOL_SIZE',200,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('WORKER_THREADS',2,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('TASK_THREADS',2,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('USE_PLN_POOL',1,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('OLAP_FLAG',2,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('OPTIMIZER_MODE',1,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('VIEW_PULLUP_FLAG',1,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('COMPATIBLE_MODE',2,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('ENABLE_MONITOR',0,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('SVR_LOG',0,1,2);
DmServicewjdsc1 stop
DmServicewjdsc2 stop
DmServicewjdsc1 start
DmServicewjdsc2 start
./disql sysdba/dameng123
select arch_mode from v$database;
select * from v$dm_arch_ini;
SELECT NAME , FIRST_TIME , NEXT_TIME , FIRST_CHANGE# , NEXT_CHANGE# FROM V$ARCHIVED_LOG;
192.168.63.131:
systemctl start DmCSSServicewjdsc1
192.168.63.132:
systemctl start DmCSSServicewjdsc2
192.168.63.131:
root:
systemctl disable DmCSSServicewjdsc1
systemctl disable DmASMSvrServicewjdsc1
systemctl disable DmServicewjdsc1
systemctl start DmCSSServicewjdsc1
systemctl start DmASMSvrServicewjdsc1
systemctl start DmServicewjdsc1
or:
su - dmdba
DmCSSServicewjdsc1 start
DmASMSvrServicewjdsc1 start
DmServicewjdsc1 start
192.168.63.132:
root:
systemctl disable DmCSSServicewjdsc2
systemctl disable DmASMSvrServicewjdsc2
systemctl disable DmServicewjdsc2
systemctl start DmCSSServicewjdsc2
systemctl start DmASMSvrServicewjdsc2
systemctl start DmServicewjdsc2
or:
su - dmdba
DmCSSServicewjdsc2 start
DmASMSvrServicewjdsc2 start
DmServicewjdsc2 start
DMSERVICE—>DMASMSVR—>DMCSS
192.168.63.131:
root:
systemctl stop DmServicewjdsc1
systemctl stop DmASMSvrServicewjdsc1
systemctl stop DmCSSServicewjdsc1
or:
su - dmdba
DmServicewjdsc1 stop
DmASMSvrServicewjdsc1 stop
DmCSSServicewjdsc1 stop
192.168.63.132:
root:
systemctl stop DmServicewjdsc2
systemctl stop DmASMSvrServicewjdsc2
systemctl stop DmCSSServicewjdsc2
or:
su - dmdba
DmServicewjdsc2 stop
DmASMSvrServicewjdsc2 stop
DmCSSServicewjdsc2 stop