DMDSC搭建

DMDSC搭建

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

​ 本文开始进行DMDSC集群的搭建学习。

环境配置

虚拟机配置

  • 参数详情

    设备 摘要
    内存 2GB
    处理器 2
    硬盘(SCSI) 30G
    硬盘2(SCSI) 20G
    CD/DVD(IDE) 自动检测
    网络适配器 NAT
    网络适配器2 自定义(VMnet2)
    • 配置第二块磁盘:

      • 虚拟机点击设置>添加"硬盘"

      • 选择磁盘类型

      • 创建新磁盘

      • 指定磁盘大小(20G足够了),注意这里是用的单个磁盘文件

      • 指定磁盘文件

      • 完成后重新打开设置,点击硬盘2,选择高级选项,勾选模式为独立、永久

        • 如果独立勾选不了,说明虚拟机上存在快照,删掉就可以勾选
    • 在第二台虚拟机上同样添加这个磁盘

      • 使用现有磁盘

      • 选择前面创建好了的那个磁盘位置

      • 一样是在高级选项中选择独立、永久

    • 修改两台虚拟机的vmx配置

      • 找到虚拟机下的vmx文件,打开,添加如下内容

        shell 复制代码
        scsi1.sharedBus = "virtual" 
        scsi1:1.deviceType = "disk"
         
        disk.locking = "false"
        diskLib.dataCacheMaxSize = "0"
        diskLib.dataCacheMaxReadAheadSize = "0"
        diskLib.DataCacheMinReadAheadSize = "0"
        diskLib.dataCachePageSize = "4096"
        diskLib.maxUnsyncedWrites = "0"
        disk.EnableUUID = "TRUE"
    • 启动虚拟机查看情况

      shell 复制代码
      fdisk -l
      lsblk
      • sdb就是新增的共享磁盘,表示磁盘添加成功
  • 操作系统和数据库版本

    • 操作系统:CentOS7.9
    • 数据库版本:dm8_20240408_x86_rh7_64

磁盘及基本规划

目录规划
用途 目录路径
数据库软件安装目录 /home/dmdba/dmdbms
本地归档日志文件存放目录 /home/dmdba/dmarch
远程归档日志文件存放目录 /home/dmdba/remote_arch
备份文件存放目录 /home/dmdba/dmbak
共享磁盘规划
  • 将共享磁盘分为四个区,用途及大小如下:

    用途 磁盘/分区 空间大小
    存放dcr信息 /dev/sdb1 1GB
    存放vote信息 /dev/sdb2 1GB
    存放redo日志 /dev/sdb3 10GB
    存放数据文件 /dev/sdb4 8GB
端口规划
  • 两个主机最好使用相同用途的端口配置成相同的端口号

    端口 用途
    5236 数据库实例dmrw监听端口
    9741 DCR检查数据库实例监听端口
    9341 CSS进程TCP连接端口
    9351 ASM进程TCP连接端口
    7236 ASM的MAL系统TCP连接端口
    9236 数据库实例的MAL系统TCP连接端口
    • 防火墙需要开放以上的端口

      shell 复制代码
      netstat -ano | grep 5236
服务器规划
服务器 IP 心跳IP 数据库实例名
DSC1 192.168.19.130 10.10.10.7 dmrw/DSC1
DSC2 192.168.19.137 10.10.10.4 dmrw/DSC2

系统准备

  • 数据库安装

    • 每个DSC节点都要安装DM数据库,只用安装数据库即可,不太需要进行初始化数据库实例
  • 关闭系统防火墙

    • 查看防火墙状态,如果显示为active,需要关闭防火墙,禁用则开机不启动防火墙。

      shell 复制代码
      systemctl status firewalld.service
      systemctl stop firewalld.service
      systemctl disable firewalld.service
  • 关闭SELinux

    • 查看是否开启了SELinux,如果显示为Enforcing,需要改为Disabled,再重启系统使配置生效。

      shell 复制代码
      getenforce
      vi /etc/selinux/config     
      # 进入文件后修改 SELINUX = disabled
      # 保存退出文件
      reboot

磁盘分区及绑定

磁盘分区(DSC1)

  • 分区(DSC1)

    fdisk /dev/sdb
    
    • 依次输入下列信息:

      shell 复制代码
      n → p → 1 → "回车" → 1G           # dcr
      n → p → 2 → "回车" → 1G           # vote
      n → p → 3 → "回车" → 10G          # log0
      n → p → 4 → "回车" → 回车          # data0
      w                                 # 保存
      • 这里我输入1G不管用,所以参照着输入的扇区位置(正好都是想要的大小)
    • 查看分区(DSC1)

      shell 复制代码
      fdisk -l /dev/sdb
    • DSC2上查看分区

      • 如果DSC2没有显示分区,可能是共享磁盘挂载失败,需要删除之后重新加载

配置裸设备(DSC1 & DSC2)

​ 需要在两个节点上都操作

  • 新建udev规则文件(DSC1 & DSC2)

    shell 复制代码
    vi /etc/udev/rules.d/90-raw.rules
    • 添加以下内容:

      shell 复制代码
      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"
      KERNEL=="raw[1-4]", OWNER="dmdba", GROUP="dinstall", MODE="660"
    • 执行命令使udev生效

      shell 复制代码
      udevadm trigger --type=devices --action=change
    • 查看配置是否成功

      shell 复制代码
      ll /dev/raw/raw* 
      • 如果查看不到配置的裸设备,就重启一下服务器

添加配置文件

配置DRC初始化配置文件(DSC1 & DSC2)

创建配置文件存放目录

两个节点都要执行,使用dmdba用户

shell 复制代码
mkdir -p /home/dmdba/config 
新建dmdrc_cfg.ini文件
  • 节点1使用dmdba用户

    shell 复制代码
    vim /home/dmdba/config/dmdcr_cfg.ini
  • 添加以下内容:

    shell 复制代码
    DCR_N_GRP             = 3
    DCR_VTD_PATH          = /dev/raw/raw2
    DCR_OGUID         = 63635  
    [GRP]
     DCR_GRP_TYPE         = CSS  
     DCR_GRP_NAME         = CSS
     DCR_GRP_N_EP         = 2
     DCR_GRP_DSKCHK_CNT   = 60
    [CSS]
     DCR_EP_NAME          = CSS1
     DCR_EP_HOST          = 10.10.10.7
     DCR_EP_PORT          = 9341
    [CSS]
     DCR_EP_NAME          = CSS2
     DCR_EP_HOST          = 10.10.10.4
     DCR_EP_PORT          = 9341
      
    [GRP]
     DCR_GRP_TYPE         = ASM
     DCR_GRP_NAME         = ASM
     DCR_GRP_N_EP         = 2
     DCR_GRP_DSKCHK_CNT   = 60
    [ASM]
     DCR_EP_NAME          = ASM1
     DCR_EP_SHM_KEY       = 93360
     DCR_EP_SHM_SIZE      = 10
     DCR_EP_HOST          = 10.10.10.7
     DCR_EP_PORT          = 9351
     DCR_EP_ASM_LOAD_PATH  = /dev/raw
    [ASM]
     DCR_EP_NAME          = ASM2
     DCR_EP_SHM_KEY       = 93361
     DCR_EP_SHM_SIZE      = 10
     DCR_EP_HOST          = 10.10.10.4
     DCR_EP_PORT          = 9351
     DCR_EP_ASM_LOAD_PATH  = /dev/raw
      
    [GRP]
     DCR_GRP_TYPE         = DB
     DCR_GRP_NAME         = DSC
     DCR_GRP_N_EP         = 2
     DCR_GRP_DSKCHK_CNT   = 60
    [DSC]
     DCR_EP_NAME         = DSC1
     DCR_EP_SEQNO                 = 0
     DCR_EP_PORT         = 5236
     DCR_CHECK_PORT            = 9741  
    [DSC]
     DCR_EP_NAME         = DSC2
     DCR_EP_SEQNO                 = 1
     DCR_EP_PORT         = 5236
     DCR_CHECK_PORT            = 9741

创建ASM磁盘(DSC1)

  • 使用dmdba用户,到DM数据库安装目录下的bin目录中执行命令

    shell 复制代码
    ./dmasmcmd
  • 进入ASM提示符后执行以下命令:

    shell 复制代码
    create dcrdisk '/dev/raw/raw1' 'dcr'
    create votedisk '/dev/raw/raw2' 'vote'
    create asmdisk '/dev/raw/raw3' 'LOG0'
    create asmdisk '/dev/raw/raw4' 'DATA0'
  • 初始化磁盘

    • 使用编辑好的dmdrc_cfg.ini文件初始化drcdisk和votedisk,并在ASM提示符执行以下命令

      shell 复制代码
      init dcrdisk '/dev/raw/raw1' from '/home/dmdba/config/dmdcr_cfg.ini' identified by '1314520dsy'
      init votedisk '/dev/raw/raw2' from '/home/dmdba/config/dmdcr_cfg.ini' 

配置ASM的MAL系统配置文件(DSC1 & DSC2)

​ 两个节点都要配置,且文件内容相同

  • 执行以下命令:

    shell 复制代码
    vi /home/dmdba/config/dmasvrmal.ini
    • 添加以下内容

      shell 复制代码
      [MAL_INST1]
      MAL_INST_NAME              = ASM1
      MAL_HOST                    = 10.10.10.7
      MAL_PORT                    = 7236
      
      [MAL_INST2]
      MAL_INST_NAME              = ASM2
      MAL_HOST                    = 10.10.10.4
      MAL_PORT                    = 7236

配置DRC启动配置文件(DSC1 & DSC2)

  • 两节点先创建dmdrc.ini文件

    • 两者在内容上主要是DMDSC_SEQNO和PATH中实例名有差距

    • 这里把ASM和DB的重启参数均设置为0,手动拉起ASM和DB服务

      shell 复制代码
      vi /home/dmdba/config/dmdcr.ini
  • 节点1添加内容

    shell 复制代码
    DMDCR_PATH     = /dev/raw/raw1
    DMDCR_MAL_PATH =/home/dmdba/config/dmasvrmal.ini  #dmasmsvr 使用的 MAL 配置文件路径
    DMDCR_SEQNO   = 0
    #ASM 重启参数,命令行方式启动
    DMDCR_ASM_RESTART_INTERVAL = 0
    DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr  dcr_ini=/home/dmdba/config/dmdcr.ini
    #DB 重启参数,命令行方式启动
    DMDCR_DB_RESTART_INTERVAL = 0
    DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver  path=/home/dmdba/config/dsc1/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini
  • 节点2添加内容

    shell 复制代码
    DMDCR_PATH     = /dev/raw/raw1
    DMDCR_MAL_PATH =/home/dmdba/config/dmasvrmal.ini  #dmasmsvr 使用的 MAL 配置文件路径
    DMDCR_SEQNO   = 1
    #ASM 重启参数,命令行方式启动
    DMDCR_ASM_RESTART_INTERVAL = 0
    DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr  dcr_ini=/home/dmdba/config/dmdcr.ini
    #DB 重启参数,命令行方式启动
    DMDCR_DB_RESTART_INTERVAL = 0
    DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver  path=/home/dmdba/config/dsc2/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini
    • 两个节点的DMDSC_SEQNO参数必须唯一,每个节点一个参数;DMDCR_DB_STARTUP_CMD 中启动脚本路径和配置文件路径要配置准确
    • 如果不配置 css 自动启动 asm 和 db ,则需要配置 DMDCR_ASM_RESTART_INTERVAL 和DMDCR_DB_RESTART_INTERVAL 为 0

启动DMDSC集群

启动DMCSS服务(DMDSC1 & DMDSC2)

  • 两个节点启动DMCSS,使用dmdba用户到数据库安装路径的bin目录下

    shell 复制代码
    # 前台方式启动
    ./dmcss dcr_ini=/home/dmdba/config/dmdcr.ini 
  • 或者使用服务方式启动

    shell 复制代码
    # 服务方式启动
    systemctl start DmCSSServicecss1/DmCSSServicecss2

    注:

    ​ 先启动的节点是控制节点。

启动ASM服务(DSC1 & DSC2)

  • 两个节点启动ASM,使用dmdba用户到数据库安装路径的bin目录下

    shell 复制代码
    ./dmasmsvr dcr_ini=/home/dmdba/config/dmdcr.ini
    • 出现ASM server is Ready即为启动成功

创建ASM磁盘组(DSC1)

  • ASM启动成功后,节点1在dmdba用户下启动dmasmtool工具

    • 在ASM提示符下创建ASM磁盘组,创建REDO日志磁盘组和数据文件磁盘组

      shell 复制代码
      ./dmasmtool dcr_ini=/home/dmdba/config/dmdcr.ini
      create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
      create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'
      exit   # 退出

初始化共享存储集群数据库实例(DSC1)

配置dminit控制文件(DSC1)
  • 节点1使用dmdba用户执行命令

    shell 复制代码
    vi /home/dmdba/config/dminit.ini
  • 添加以下内容

    shell 复制代码
    db_name        = DSC
    system_path       = +DMDATA/data
    
    system        = +DMDATA/data/dsc/system.dbf
    system_size       = 128
    roll     = +DMDATA/data/dsc/roll.dbf
    roll_size     = 128
    main     = +DMDATA/data/dsc/main.dbf
    main_size     = 128
    ctl_path     = +DMDATA/data/dsc/dm.ctl
    ctl_size     = 8
    log_size     = 1024
    dcr_path     = /dev/raw/raw1   #dcr 磁盘路径,目前不支持 asm,只能是裸设备
    dcr_seqno     = 0
    auto_overwrite   = 1
    [DSC1] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应
    config_path    = /home/dmdba/config/dsc1
    port_num     = 5236
    mal_host     = 10.10.10.7
    mal_port     = 9236
    log_path     = +DMLOG/log/DSC1_log01.log
    log_path     = +DMLOG/log/DSC1_log02.log
    [DSC2] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应
    config_path    = /home/dmdba/config/dsc2
    port_num     = 5236
    mal_host     = 10.10.10.4
    mal_port     = 9236
    log_path     = +DMLOG/log/DSC2_log01.log
    log_path     = +DMLOG/log/DSC2_log02.log
  • 初始化实例(DSC1)

    • 节点1使用dmdba用户执行命令:

      shell 复制代码
      ./dminit control=/home/dmdba/config/dminit.ini
      • 显示create dm database success即说明初始化完成,并且会在ini控制文件目录下生成2个实例的配置文件
  • 复制相应配置文件(DSC1--->DSC2)

    • 将DSC2目录复制到节点2上对应的目录下

      shell 复制代码
      scp -r dsc2 192.168.19.137:/home/dmdba/config/
      • 注意要到对应的config目录下进行复制
  • 注册服务(DSC1 & DSC2)

    • 配置成功后需要注册为系统服务,方便启动和关闭集群,以及实现开机自动启动

    • 两个节点都要注册,使用root用户,到数据库安装的script/root目录

      • 节点1执行命令:

        shell 复制代码
        ./dm_service_installer.sh -t dmcss -p css1 -dcr_ini /home/dmdba/config/dmdcr.ini
      • 节点2执行命令:

        shell 复制代码
        ./dm_service_installer.sh -t dmcss -p css2 -dcr_ini /home/dmdba/config/dmdcr.ini
  • 关闭前台的CSS,以服务方式启动CSS

    • 节点1命令:

      shell 复制代码
      systemctl start DmCSSServicecss1
    • 节点2命令:

      shell 复制代码
      systemctl start DmCSSServicecss2

启动数据库实例(DSC1 & DSC2)

  • 两个节点启动DB,使用dmdba用户到数据库安装的bin目录下执行命令

    • 节点1:

      shell 复制代码
      ./dmserver path=/home/dmdba/config/dsc1/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini
    • 节点2:

      shell 复制代码
      ./dmserver path=/home/dmdba/config/dsc2/dm.ini dcr_ini=/home/dmdba/config/dmdcr.ini
    • 报错说明:

      1. ASM连接异常:[code:-11041] ASM connection exception

        • 原因:ASM服务未启动

        • 解决方法:启动ASM服务

          shell 复制代码
          ./dmasmsvr dcr_ini=/home/dmdba/config/dmdcr.ini
      2. 端口连接错误:comm_create_lsnr_sockets_low failed to create socket or listen port:5236,errno:107

        • 原因:5236端口被占用,估计是之前的数据库实例建立的时候给占用了
        • 解决:关闭已经启用了的数据库实例
      3. 不存在日志文件,无法启动数据库:+DMLOG/log/DSC_log01.log not exist,can not startup

        • 原因:创建ASM磁盘组时,创建DMLOG失败

        • 解决方法:启用dmasmtool工具,创建日志磁盘组(DSC1节点)

          shell 复制代码
          ./dmasmtool dcr_ini=/home/dmdba/config/dmdcr.ini
          create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
        • 重新创建数据库实例,目的是为了REDO日志可以指向磁盘组

        • 数据库实例创建好之后,再重新启动,可以成功(注意重新将DSC2文件夹给复制到节点2)

验证集群状态

配置监视器(DSC1)

  • 创建监视器配置文件

    • 任意节点都可以(这里我就在DSC1上),执行命令:

      shell 复制代码
      vi /home/dmdba/config/dmcssm.ini
    • 添加内容:

      shell 复制代码
      #和 dmdcr_cfg.ini 中的 DCR_OGUID 保持一致
      CSSM_OGUID = 63635
      #配置所有 CSS 的连接信息,
      #和 dmdcr_cfg.ini 中 CSS 配置项的 DCR_EP_HOST 和 DCR_EP_PORT 保持一致
      CSSM_CSS_IP = 10.10.10.7:9341
      CSSM_CSS_IP = 10.10.10.4:9341
      CSSM_LOG_PATH =/home/dmdba/dmdbms/log #监视器日志文件存放路径
      CSSM_LOG_FILE_SIZE = 1024 #每个日志文件最大 1024 MB
      CSSM_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
  • 启动监视器

    • 使用dmdba用户,到数据库安装目录的bin目录下执行命令:

      shell 复制代码
      ./dmcssm ini_path=/home/dmdba/config/dmcssm.ini
  • 输入命令查看状态

    • inst_status为OPEN,vtd_status为WORKING,active为TRUE,说明服务正常

数据库共享验证(DSC1 & DSC2)

  • DSC1 & DSC2都查询T1表,显示不存在

  • DSC1节点上创建T1表

    SQL 复制代码
    create table T1(id int,name varchar2(20));
  • DCS1节点向表格插入数据

    SQL 复制代码
    insert into T1 values (1,'name1'),(2,'name2');
  • DSC2节点上查询数据

    SQL 复制代码
    select * from T1;
  • DSC1节点commit提交数据,DSC2再次查询数据

    SQL 复制代码
    ##DSC1
    commit;
    
    ##DSC2
    select * from T1;
    • 成功查询到数据,说明可以同步

客户端验证(DSC1/DSC2)

  • 任意一个节点上配置dm_svc.conf文件,执行命令(我这里在DSC2节点上配置)

    shell 复制代码
    vi /etc/dm_svc.conf
    • 添加内容:

      shell 复制代码
      dmdsc=(192.168.19.130:5236,192.168.19.137:5236) 
  • 使用disql工具登录集群,查询视图v$dsc_ep_info,查看集群状态

    shell 复制代码
    ./disql SYSDBA/SYSDBA@dmdsc
    
    ##查询v$dsc_ep_info视图
    select * from v$dsc_ep_info;

归档配置

​ 共享存储集群归档需要配置本地归档和远程归档(保证每个节点都有所有归档日志)

  • 实例DSC1上配置

    SQL 复制代码
    alter database mount;
    alter database archivelog;
    alter database add archivelog 'DEST=/home/dmdba/dmarch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=102400';
    alter database add archivelog 'DEST=dsc2, TYPE=REMOTE, FILE_SIZE=1024, SPACE_LIMIT=102400, INCOMING_PATH=/home/dmdba/remote_arch';
    alter database open;
  • 实例DSC2上配置

    SQL 复制代码
    alter database mount;
    alter database archivelog;
    alter database add archivelog 'DEST=/home/dmdba/dmarch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=102400';
    alter database add archivelog 'DEST=dsc1, TYPE=REMOTE, FILE_SIZE=1024, SPACE_LIMIT=102400, INCOMING_PATH=/home/dmdba/remote_arch';
    alter database open;

关闭DMDSC集群

  1. 关闭数据库:监视器中执行ep stop dsc
  2. 关闭ASM:监视器中执行ep stop asm
  3. 关闭css:各节点关闭自己的css:systemctl stop DmCSSServicecss1/DmCSSServicecss2

注:

​ 关闭顺序:dmserver--->dmasmsvr--->dmcss

总结

  • 本次是进行了DMDSC的手动启动搭建,让我对磁盘划分、初始化有了一个新的认识。我主要的错误就是自己执行命令时想图方便,结果弄巧成拙,所以还是要一步一步来才好。

参考

相关推荐
Hacker_LaoYi1 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀1 小时前
Redis梳理
数据库·redis·缓存
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天1 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺2 小时前
分布式系统架构:服务容错
数据库·架构
南宫生2 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__2 小时前
Web APIs学习 (操作DOM BOM)
学习
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain3 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship3 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存