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

参考

相关推荐
熬夜的咕噜猫33 分钟前
MySQL主从复制与读写分离
网络·数据库·mysql
道清茗34 分钟前
【MySQL知识点问答题】 备份技术、Invisible Indexes 和直方图的应用
数据库·mysql
芒果披萨34 分钟前
sql存储过程
java·开发语言·数据库
jnrjian41 分钟前
RAC 去除node的建议 dbca 和手动方法
数据库·oracle
TlYf NTLE1 小时前
redis分页查询
数据库·redis·缓存
翻斗包菜1 小时前
MySQL 全量、增量备份与恢复实战指南(含 mysqldump + binlog + XtraBackup)
数据库·oracle
报错小能手1 小时前
ios开发方向——对于实习开发的app(Robopocket)讲解
开发语言·学习·ios·swift
今儿敲了吗1 小时前
51| 八皇后
c++·笔记·学习·算法·深度优先
|华|1 小时前
MySQL主从复制与读写分离
数据库·mysql
_下雨天.1 小时前
MySQL 全量、增量备份与恢复
数据库·mysql