DM 共享存储数据库集群(DSC)

  1. 概述

DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同 一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。

DMDSC 集群主要由数据库和数据库实例、共享存储、本地存储、通信网络、以及集群控制软件 DMCSS组成。

  1. 相关知识点

共享存储

物理存储器中一段可由两个以上的进程共享的存储空间。共享存储段具有大小和物理存储地址。想要访问共享存储段的进程可以连接这段存储区域到自己的地址空间中任何适合的地方,其他进程也一样。这样,多个进程便可以访问相同的物理存储。

DMDSC 集群中,为了实现多个实例同时访问、修改数据,要求将数据文件、控制文件、日志文件保存在共享存储上。配置 DMDSC 集群需要的 DCR、Voting disk 必须保存在 DMASM 文件系统管辖范围之外的共享存储上。

集群控制

集群控制是集群系统的重要组成部分。DMCSS 就是一款集群控制软件,专门负责监控 集群中各个节点的运行状态。DMCSS 主要功能包括:管理集群的启动和关闭,控制节点故障处理,以及管理节点重加入流程.

业务网卡,虚拟内部网络

虚拟内部网络:内部网络用于数据库实例之间交换信息和数据,MAL 链路使用的就是内部网络

心跳网卡,虚拟专用网络

虚拟专用网络:公共网络用于对外提供数据库服务,用户使用公共网络地址登录 DMDSC 集群,访问数据库。

共享内存

共享内存是一种快速、高效的进程间通信手段。所谓共享内存,就是同一块物理内存被 映射到多个进程的地址空间,进程 A 可以即时看到进程 B 对共享内存的修改,反之亦然。 DMASM 服务器进程和 DMASM 客户端进程之间通过共享内存方式共享 DMASM 文件到实际磁 盘的映射关系。

VIP

是一个不与特定计算机或者计算机中的网络接口相连的IP地址。 数据包被发送到这个 VIP 地址,但是所有的数据还是经过真实的网络接口。在集群环境中, 应用通过 VIP 连接数据库服务器,实例故障后,把实例配置的 VIP 设置到其他活动节点(叫 做 IP 漂移),这样应用可以不用修改配置,继续访问数据库服务。

  1. 搭建
  1. 1、集群规划


A机器

B机器

业务IP

192.168.56.101

192.168.56.105

心跳IP

192.168.56.101

192.168.56.105

软件目录

/opt/dsc/setup

/opt/dsc/setup

安装目录

/opt/dsc/dmdbms

/opt/dsc/dmdbms

配置文件目录

/opt/dsc/config

/opt/dsc/config

归档日志目录

/opt/dsc/arch_0

/opt/dsc/arch_1

远程归档目录

/opt/dsc/arch_0_remote

/opt/dsc/arch_1_remote

备份目录

/opt/dsc/bak

/opt/dsc/bak

dmdcr_cfg

CSS

DCR_EP_NAME

CSS0

CSS1

DCR_EP_HOST

192.168.56.101

192.168.56.105

DCR_EP_PORT

5336

5337

ASM

DCR_EP_NAME

ASM0

ASM1

DCR_EP_HOST

192.168.56.101

192.168.56.105

DCR_EP_PORT

5436

5437

DB

DCR_EP_NAME

DSC0

DSC1

DCR_EP_PORT

5236

5236

DCR_CHECK_PORT

5536

5537

dmasvrmal

MAL_INST_NAME

ASM0

ASM1

MAL_HOST

192.168.56.101

192.168.56.105

MAL_PORT

5636

5637

dminit

PORT_NUM

5236

5236

MAL_HOST

192.168.56.101

192.168.56.105

MAL_PORT

5736

5737

归档上限

51200

51200

OGUID

45331

说明:具体规划及部署方式以现场环境为准。

  1. 2、创建共享磁盘

测试操作系统为centos7.5两台机器IP分别为192.168.184.131(主节点dsc1),192.168.184.133 dsc2此次搭建DSC是测试环境,在虚拟机VM16.0pro上需要新建共享磁盘。

储存规划

用途

空间规划(总共6T)

sdb1用于dcr信息

100M

sdb2用于存放vote信息

100M

sdb3用于存放redo log

20480M

sdb4用于存放data

剩下的全部空间

使用fdisk /dev/sdb 命令进行分区操作

只需要再DSC1节点处划分

[root@~]# fdisk /dev/sdb
  1) 依次输入  n  p  1  回车  +100M,完成第一块磁盘划分
  2) 依次输入  n  p  2  回车  +100M,完成第二块磁盘划分
  3) 依次输入  n  p  3  回车  +20480M,完成第三块磁盘划分
  4) 依次输入  n  p  回车  回车  回车,完成第四块磁盘划分
  5) 输入w命令,将裸设备划分的设置进行保存

输入fdisk -l查看是否同步

mysql keepalived共享存储 数据库共享存储_共享内存

已同步

绑定设备

[root@~]# vi /etc/udev/rules.d/70-persistent-ipoib.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"
[root@~]# partprobe /dev/sdb
[root@~]# reboot

注意:可通过blockdev --getsize64 /dev/raw/raw1 、2、3、4命令分别查看设备大小。看是否对应

mysql keepalived共享存储 数据库共享存储_服务器_02

对应,证明划分正确

    1. 搭建DSC 
        
    1. 改主机名1(2号机换成2)
    [root@~]# hostname dmdsc01
    [root@~]# vi /etc/sysconfig/network
      NETWORKING=yes
      HOSTNAME=dmdsc01
    [root@~]# vi /etc/hostsname
    dmdsc01
    1. 关防火墙
    [root@~]# systemctl stop firewalld
    [root@~]# systemctl disable firewalld
    [root@~]# systemctl status firewalld
    1. 网卡自启
    [root@~]# vi /etc/sysconfig/network-scripts/ifcfg-eth33
      ONBOOT=yes
    [root@~]# systemctl restart network
    1. 创建用户、目录、安装数据库安装到/opt/dsc/dmdbms目录下
    [root@~]# groupadd dinstall -g 2001;useradd -g dinstall dmdba -u 1001;passwd dmdba
    [root@~]# mkdir -p /opt/dsc/setup /opt/dsc/dmdbms /opt/dsc/config /opt/dsc/arch_0 /opt/dsc/arch_0_remote /opt/dsc/bak
    [root@~]# chown dmdba.dinstall /opt/dsc -R;chmod 777 /opt/dsc -R
    [dmdba@~]# /opt/dsc/setup/DMInstall.bin -i
    1. 创建dmdcr_cfg.ini(11、2配置相同)
    DCR_N_GRP                = 3  #集群环境有多少个GROUP,范围:1~16
      DCR_VTD_PATH             = /dev/raw/raw2
      DCR_OGUID                = 45331
    [GRP]  #新建一个GROUP
      DCR_GRP_TYPE             = CSS  #组类型(CSS/ASM/DB)
      DCR_GRP_NAME             = GRP_CSS  #组名
      DCR_GRP_N_EP             = 2  #组内节点个数
      DCR_GRP_DSKCHK_CNT       = 60  #磁盘心跳容错时间,单位:秒
    [GRP_CSS]
      DCR_EP_NAME              = CSS0  #CSS节点名
      DCR_EP_HOST              = 192.168.56.101  #心跳地址
      DCR_EP_PORT              = 5336  #CSS端口
    [GRP_CSS]
      DCR_EP_NAME              = CSS1
      DCR_EP_HOST              =192.168.56.105
      DCR_EP_PORT              = 5337
    [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  #ASM节点名,和dmasvrmal的MAL_INST_NAME一致
      DCR_EP_SHM_KEY           = 93360  #共享内存标识
      DCR_EP_SHM_SIZE          = 10  #共享内存大小
      DCR_EP_HOST              = 192.168.56.101 #心跳地址
      DCR_EP_PORT              = 5436  #ASM端口
      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.56.105
      DCR_EP_PORT              = 5437
      DCR_EP_ASM_LOAD_PATH     = /dev/raw
    [GRP]
      DCR_GRP_TYPE             = DB
      DCR_GRP_NAME             = GRP_DSC
      DCR_GRP_N_EP             = 2
      DCR_GRP_DSKCHK_CNT       = 60
    [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           = 5536  #DCR检查端口
    [GRP_DSC]
      DCR_EP_NAME              = DSC1
      DCR_EP_SEQNO             = 1
      DCR_EP_PORT              = 5236
      DCR_CHECK_PORT           = 5537
    1. 初始化磁盘
    1号机,在bin下面的./dmasmcmd
    ASM> create dcrdisk '/dev/raw/raw1' 'dcr'
    ASM> create votedisk '/dev/raw/raw2' 'vote'
    ASM> create asmdisk '/dev/raw/raw3' 'LOG0'
    ASM> create asmdisk '/dev/raw/raw4' 'DATA0'
    ASM> init dcrdisk '/dev/raw/raw1' from '/opt/dsc/config/dmdcr_cfg.ini' identified by 'admin1234'
    ASM> init votedisk '/dev/raw/raw2' from '/opt/dsc/config/dmdcr_cfg.ini'
    1. 创建dmasvrmal.ini
     两机器相同配置在/opt/dsc/config下
    [MAL_INST1]
      MAL_INST_NAME            = ASM0
      MAL_HOST                 = 192.168.56.101 #心跳地址
      MAL_PORT                 = 5636  #MAL监听端口
    [MAL_INST2]
      MAL_INST_NAME            = ASM1
      MAL_HOST                 = 192.168.56.105
      MAL_PORT                 = 5637 
    1. 创建dmdcr.ini
     1号机
    DMDCR_PATH                 = /dev/raw/raw1
    DMDCR_MAL_PATH             = /opt/dsc/config/dmasvrmal.ini
    DMDCR_SEQNO                = 0
    DMDCR_AUTO_OPEN_CHECK      = 90
    #DMDCR_ASM_RESTART_INTERVAL = 30  #CSS认定ASM故障重启的时间
    #DMDCR_ASM_STARTUP_CMD      = /opt/dsc/dmdbms/bin/dmasmsvr dcr_ini=/opt/dsc/config/dmdcr.ini
    #DMDCR_DB_RESTART_INTERVAL  = 60  #CSS认定DSC故障重启的时间
    #DMDCR_DB_STARTUP_CMD       = /opt/dsc/dmdbms/bin/dmserver path=/opt/dsc/config/dsc0_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini
    注:当前是手动拉起,等配置完成后将#删除,可自动拉起
    1. 启动CSS、ASM服务bin目录下1、2号机依次启动
    Css
    ./dmcss DCR_INI=/opt/dsc/config/dmdcr.ini
    Asm
    ./dmasmsvr DCR_INI=/opt/dsc/config/dmdcr.ini
    1. 创建DMASM磁盘组
    1号机器
    [dmdba@~]# /opt/dsc/dmdbms/bin/dmasmtool DCR_INI=/opt/dsc/config/dmdcr.ini
      ASM> create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
      ASM> create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'
    1. 创建dminit.ini
    1、2机器配置相同
    vi /opt/dsc/config/dminit.ini
      db_name                  = dsc
      system_path              = +DMDATA/data
      main                     = +DMDATA/data/dsc/main.dbf
      main_size                = 128
      roll                     = +DMDATA/data/dsc/roll.dbf
      roll_size                = 128
      system                   = +DMDATA/data/dsc/system.dbf
      system_size              = 128
      ctl_path                 = +DMDATA/data/dsc/dm.ctl
      ctl_size                 = 8
      log_size                 = 2048
      dcr_path                 = /dev/raw/raw1
      dcr_seqno                = 0
      auto_overwrite           = 1
      PAGE_SIZE                = 32
      CASE_SENSITIVE           = Y
      CHARSET                  = 0
    [DSC0]
      config_path              = /opt/dsc/config/dsc0_config
      port_num                 = 5236
      mal_host                 = 192.168.56.101
      mal_port                 = 5736
      log_path                 = +DMLOG/log/dsc0_log01.log
      log_path                 = +DMLOG/log/dsc0_log02.log 
    [DSC1]
      config_path              = /opt/dsc/config/dsc1_config
      port_num                 = 5236
      mal_host                 = 192.168.56.106
      mal_port                 = 5737
      log_path                 = +DMLOG/log/dsc1_log01.log
      log_path                 = +DMLOG/log/dsc1_log02.log
    1. 初始化实例
    --初始化实例
    [dmdba@~]# /opt/dsc/dmdbms/bin/dminit control=/opt/dsc/config/dminit.ini
      ...
      create dm database success. 2020-11-14 21:25:31
    --拷贝文件
    [dmdba@~]# scp -r /opt/dsc/config/dsc1_config dmdba@192.168.56.106:/opt/dsc/config/
    1. 创建dmarch.ini,开归档
    1号
    vi /opt/dsc/config/dsc0_config/dmarch.ini
    [ARCHIVE_LOCAL]
      ARCH_TYPE                = LOCAL
      ARCH_DEST                = /opt/dsc/arch_0
      ARCH_FILE_SIZE           = 1024
      ARCH_SPACE_LIMIT         = 51200
    [ARCHIVE_REMOTE]
      ARCH_TYPE                = REMOTE
      ARCH_DEST                = DSC1
      ARCH_INCOMING_PATH       = /opt/dsc/arch_0_remote
      ARCH_FILE_SIZE           = 1024
      ARCH_SPACE_LIMIT         = 51200
    2号
    vi /opt/dsc/config/dsc1_config/dmarch.ini
    [ARCHIVE_LOCAL]
      ARCH_TYPE                = LOCAL
      ARCH_DEST                = /opt/dsc/arch_1
      ARCH_FILE_SIZE           = 1024
      ARCH_SPACE_LIMIT         = 51200
    [ARCHIVE_REMOTE]
      ARCH_TYPE                = REMOTE
      ARCH_DEST                = DSC0
      ARCH_INCOMING_PATH       = /opt/dsc/arch_1_remote
      ARCH_FILE_SIZE           = 1024
      ARCH_SPACE_LIMIT         = 51200
    1.  启动DMSERVER服务
    /opt/dsc/dmdbms/bin/dmserver /opt/dsc/config/dsc0_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini
    看是否有报错。
    1. 注册CSS、ASM、DMSERVER后台服务
    [root@~]# /opt/dsc/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /opt/dsc/config/dmdcr.ini -p CSS
    [root@~]# /opt/dsc/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /opt/dsc/config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
    [root@~]# /opt/dsc/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /opt/dsc/config/dsc0_config/dm.ini -dcr_ini /opt/dsc/config/dmdcr.ini -y DmASMSvrServiceASM.service -p DSC
    1. 配置监视器
    1、2号机相同
    vi /opt/dsc/dmdbms/bin/dmcssm.ini
    CSSM_OGUID                 = 45331
    CSSM_CSS_IP                = 192.168.56.101:5336
    CSSM_CSS_IP                = 192.168.56.106:5337
    CSSM_LOG_PATH              = ../log
    CSSM_LOG_FILE_SIZE         = 512
    CSSM_LOG_SPACE_LIMIT       = 2048
    1. 启动监视器
    /opt/dsc/dmdbms/bin/dmcssm INI_PATH=/opt/dsc/dmdbms/bin/dmcssm.ini
    1. 启停集群
    启动:1/2机器CSS
    /opt/dsc/dmdbms/bin/DmCSSServiceCSS start

    CSS启动后30秒自动拉起ASM,60秒自动拉起DMSERVER。

    停止: 1/2机器DMSERVER→A/B机器ASM→A/B机器CSS

    说明:1)DSC正常停库必须2节点同时停止,根据目前脚本配置,CSS启动后30秒自动拉起ASM,60秒自动拉起DMSERVER,所以停止DMSERVER和ASM后,要尽快停止CSS,避免被自动拉起。2)ASM服务在任意节点停止,2个节点的ASM服务都会停止,为了保险起见,可以两边都执行停止命令。3)服务全部停止后,要检查后台进程是否全部停止。