(SERIES13)基于DMASM的DMDSC搭建

1 集群规划

1.1 规划内容

  在宿主机上创建磁盘映像、并使用该磁盘映像创建虚拟块设备,按照losetup -f可用顺序分别关联到loop0, loop1, loop2, loop3;也可以直接挂载四个云虚拟磁盘vdb, vdc, vdd, vde
  配置UDEV规则,通过.img磁盘映像文件名称(路径)/ 磁盘序列号作为其唯一特征,创建持久化软链接同样到/dev下有DMDATADMLOGVOTEDCR四个持久化软链接,以防当主机重启或其他情况时块设备名称重新分配,导致loop* / vd*指向改变软链接失效
  DMDSC包括两个节点,表现为容器DSCNode1DSCNode2;容器初始化时在自身文件系统的/dev目录下挂载持久化软链接,而非将宿主机的/dev目录全部挂载,which有悖于宿主机和Docker容器的设备管理和级别定位,同时也避免了/dev下磁盘很多,可能存在多套DMDSC系统,从而DMDSC在启动时扫描DCR_DISK_LOAD_PATH发现路径下有多套DMDSC系统,导致启动失败的情况;
  容器被设计为“即用即抛”的精简理念;在容器初始化时若没有使用--privileged参数,则大多数在宿主机/dev目录下的设备不会被挂载到容器文件系统的/dev目录下;在--privileged参数加持下,宿主机则是会将loop* / vd*以及大多数设备与容器/dev目录共享,但并不包括DCR, VOTE, DMDATADMLOG这些通过UDEV规则定义的持久化软链接,因此这些持久化链接需要手动挂载;
  四个持久化软链接从宿主机分别挂载到两个容器中后,还要在容器内部进行二次软链接到/dev_DSC2目录下,防止asmsvr启动时扫描到/dev下的其他块设备,但是因为在容器内对宿主机其他vda块设备只有只读权限而导致asm启动失败的情况发生。

  集群网络规划细节如表1-1,其中DSCNode1为控制节点:

表1-1 集群网络规划

节点容器实例名称IPPORT_NUM
DSC_Node1CSS0192.168.2.29836
ASM05836
DSC016636
DSC_Node2CSS1192.168.2.39837
ASM15837
DSC026637

  一般来说,在共享存储的四块磁盘中,2块较小的(1G)用于创建DCR, VOTE磁盘;2块较大的(2T)用于创建ASM磁盘组(数据磁盘组DMDATA和联机日志磁盘组DMLOG)。

  目录规划如表1-2所示:

表1-2 目录规划

目录用途
/opt/dmdbms/dmdsc使用dmdba用户创建用于DSC环境搭建的目录
/opt/dmdbms/dmdsc/binDM执行码和工具存放目录
/opt/dmdbms/dmdsc/data/DSC01DSC_Node1节点配置文件存放目录
/opt/dmdbms/dmdsc/data/DSC02DSC_Node2节点配置文件存放目录

1.2 规划内容的代码实现

  创建网络dmdsc-test;为避免与先前数据守护集群创建的网段冲突,此次子网为192.168.2.0/24

docker network create --driver=bridge --subnet=192.168.2.0/24 dmdsc-test

  在宿主机上初始化磁盘映像,并根据磁盘映像关联虚拟块设备到loop*

[root@VM-8-6-centos ~]$ dd if=/dev/zero of=/root/DCR.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.935396 s, 1.1 GB/s
[root@VM-8-6-centos ~]$ dd if=/dev/zero of=/root/VOTE.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.913526 s, 1.2 GB/s
[root@VM-8-6-centos ~]$ dd if=/dev/zero of=/root/DMDATA.img bs=1M count=1024
1024+0 records inc
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.951041 s, 1.1 GB/s
[root@VM-8-6-centos ~]$ dd if=/dev/zero of=/root/DMLOG.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.924813 s, 1.2 GB/s[root@VM-8-6-centos dev]$ losetup /dev/loop0 /root/DCR.img
[root@VM-8-6-centos dev]$ losetup /dev/loop1 /root/VOTE.img
[root@VM-8-6-centos dev]$ losetup /dev/loop2 /root/DMDATA.img
[root@VM-8-6-centos dev]$ losetup /dev/loop3 /root/DMLOG.img

  上述挂载仅为示例,其虚拟块设备的容量过小(均仅1G),在后续DMLOG磁盘初始化过程中可能会出现问题,建议还是尽量通过直接挂载大容量、真实磁盘的方式实现。
  若是直接挂载虚拟磁盘,查询其全局唯一磁盘序列号,有:

[root@VM-8-6-centos rules.d]$ udevadm info --name=/dev/vdb | grep -i serial
E: ID_SERIAL=disk-rglh5yxt
[root@VM-8-6-centos rules.d]$ udevadm info --name=/dev/vdc | grep -i serial
E: ID_SERIAL=disk-77ajhl0n
[root@VM-8-6-centos rules.d]$ udevadm info --name=/dev/vdd | grep -i serial
E: ID_SERIAL=disk-mg0ylaef
[root@VM-8-6-centos rules.d]$ udevadm info --name=/dev/vde | grep -i serial
E: ID_SERIAL=disk-7v5mxxet

  配置UDEV规则,在/etc/udev/rules.d下创建文件66-dmdevice.rules;其中66为加载顺序,同目录下数字越小,规则越先加载;数字相同的情况下,通过数字前缀后的第一个英文字母顺序来确定加载顺序:

[root@VM-8-6-centos rules.d]$ cat 66-dmdevices.rules
KERNEL=="vd*", SUBSYSTEM=="block", ENV{ID_SERIAL}=="disk-rglh5yxt", SYMLINK+="DCR", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="vd*", SUBSYSTEM=="block", ENV{ID_SERIAL}=="disk-77ajhl0n", SYMLINK+="VOTE", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="vd*", SUBSYSTEM=="block", ENV{ID_SERIAL}=="disk-mg0ylaef", SYMLINK+="DMDATA", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="vd*", SUBSYSTEM=="block", ENV{ID_SERIAL}=="disk-7v5mxxet", SYMLINK+="DMLOG", OWNER="dmdba", GROUP="dinstall", MODE="0660"

  配置完成后,重启systemd-udev-trigger服务以应用规则,UDEV会自动维护/dev目录下由其规则创建的symbolic link,包括创建、更新、删除等操作:

[root@VM-8-6-centos rules.d]$ systemctl restart systemd-udev-trigger

  此时,使用ls /dev命令可以发现持久化软链接已经成功创建。

  创建容器DSC_Node1DSC_Node2,同时在子网dmdsc-test内分别为其分配IP地址、挂载宿主机内的四个同名持久化软链接到宿主机文件系统/dev目录下:

docker run -d --restart=always --name=DSC_Node1 --network dmdsc-test --ip 192.168.2.2  --privileged=true -e LD_LIBRARY_PATH=/opt/dmdbms/bin -e PAGE_SIZE=32 -e EXTENT_SIZE=32 -e LOG_SIZE=2048 -e UNICODE_FLAG=1 -e INSTANCE_NAME=DSC_Node1 --mount type=bind,source=/dev/DCR,target=/dev/DCR --mount type=bind,source=/dev/VOTE,target=/dev/VOTE --mount type=bind,source=/dev/DMDATA,target=/dev/DMDATA --mount type=bind,source=/dev/DMLOG,target=/dev/DMLOG dm8_single:dm8_20240715_rev232765_x86_rh6_64docker run -d --restart=always --name=DSC_Node2 --network dmdsc-test --ip 192.168.2.3  --privileged=true -e LD_LIBRARY_PATH=/opt/dmdbms/bin -e PAGE_SIZE=32 -e EXTENT_SIZE=32 -e LOG_SIZE=2048 -e UNICODE_FLAG=1 -e INSTANCE_NAME=DSC_Node2 --mount type=bind,source=/dev/DCR,target=/dev/DCR --mount type=bind,source=/dev/VOTE,target=/dev/VOTE --mount type=bind,source=/dev/DMDATA,target=/dev/DMDATA --mount type=bind,source=/dev/DMLOG,target=/dev/DMLOG dm8_single:dm8_20240715_rev232765_x86_rh6_64

  由于DM8 Docker版创建后自动开启服务,我们分别在两个节点创建后先将其关闭:

root@a0d20641b3cc:/opt/dmdbms/bin$ ./DmService stop
Stopping DmService:                                        [ OK ]root@6fbff487ae8f:/opt/dmdbms/bin$ ./DmService stop
Stopping DmService:                                        [ OK ]

  按照目录规划分别在节点DSC_Node1和DSC_Node2中创建对应目录:

# DSC_Node1
root@a0d20641b3cc:/$ mkdir -p /opt/dmdbms/dmdsc/bin
root@a0d20641b3cc:/$ mkdir -p /opt/dmdbms/dmdsc/data/DSC01
root@a0d20641b3cc:/$ mkdir -p /dev_DSC2# DSC_Node2
root@6fbff487ae8f:/$ mkdir -p /opt/dmdbms/dmdsc/bin
root@6fbff487ae8f:/$ mkdir -p /opt/dmdbms/dmdsc/data/DSC02
root@6fbff487ae8f:/$ mkdir -p /dev_DSC2

  对/dev下挂载的宿主机软链接再次同名软链接到/dev_DSC2目录下:

root@a0d20641b3cc:/$ ln -s /dev/DCR /dev_DSC2/DCR
root@a0d20641b3cc:/$ ln -s /dev/VOTE /dev_DSC2/VOTE
root@a0d20641b3cc:/$ ln -s /dev/DMDATA /dev_DSC2/DMDATA
root@a0d20641b3cc:/$ ln -s /dev/DMLOG /dev_DSC2/DMLOGroot@6fbff487ae8f:/$ ln -s /dev/DCR /dev_DSC2/DCR
root@6fbff487ae8f:/$ ln -s /dev/VOTE /dev_DSC2/VOTE
root@6fbff487ae8f:/$ ln -s /dev/DMDATA /dev_DSC2/DMDATA
root@6fbff487ae8f:/$ ln -s /dev/DMLOG /dev_DSC2/DMLOG

2 配置dmdcr_cfg.ini

  dmdcr_cfg.ini分别放置在DSC_Node1DSC_Node2/opt/dmdbms/dmdsc/data/DSC01/opt/dmdbms/dmdsc/data/DSC02目录下。其内容为:

DCR_N_GRP				= 3
DCR_VTD_PATH			= /dev_DSC2/VOTE
DCR_OGUID				= 237589[GRP]
DCR_GRP_TYPE			= CSS
DCR_GRP_NAME			= GRP_CSS
DCR_GRP_N_EP			= 2
DCR_GRP_DSKCHK_CNT		= 60[GRP_CSS]
DCR_EP_NAME				= CSS0
DCR_EP_HOST				= 192.168.2.2
DCR_EP_PORT				= 9836[GRP_CSS]
DCR_EP_NAME				= CSS1
DCR_EP_HOST				= 192.168.2.3
DCR_EP_PORT				= 9837[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
DCR_EP_SHM_KEY			= 64735
DCR_EP_SHM_SIZE			= 512
DCR_EP_HOST				= 192.168.2.2
DCR_EP_PORT				= 5836
DCR_EP_ASM_LOAD_PATH	= /dev_DSC2[GRP_ASM]
DCR_EP_NAME				= ASM1
DCR_EP_SHM_KEY			= 54736
DCR_EP_SHM_SIZE			= 512
DCR_EP_HOST				= 192.168.2.3
DCR_EP_PORT				= 5837
DCR_EP_ASM_LOAD_PATH	= /dev_DSC2[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				= DSC01
DCR_EP_SEQNO			= 0
DCR_EP_PORT				= 6636[GRP_DSC]
DCR_EP_NAME				= DSC02
DCR_EP_SEQNO			= 1
DCR_EP_PORT				= 6637

3 DMASMCMD初始化磁盘

  在DSC_Node1上使用DMASMCMD工具初始化所有磁盘:

root@a0d20641b3cc:/opt/dmdbms/bin$ ./dmasmcmd
dmasmcmd V8ASM>create dcrdisk '/dev_DSC2/DCR' 'DCR'
[TRACE]The ASM initialize dcrdisk /dev_DSC2/DCR to name DMASMDCR
Used time: 13.898(ms).ASM>create votedisk '/dev_DSC2/VOTE' 'VOTE'
[TRACE]The ASM initialize votedisk /dev_DSC2/VOTE to name DMASMVOTE
Used time: 20.957(ms).ASM>create asmdisk '/dev_DSC2/DMDATA' 'DMDATA'
[TRACE]The ASM initialize asmdisk /dev_DSC2/DMDATA to name DMASMDMDATA
Used time: 22.817(ms).ASM>create asmdisk '/dev_DSC2/DMLOG' 'DMLOG'
[TRACE]The ASM initialize asmdisk /dev_DSC2/DMLOG to name DMASMDMLOG
Used time: 12.181(ms).ASM>init dcrdisk '/dev_DSC2/DCR' from '/opt/dmdbms/dmdsc/data/DSC01/dmdcr_cfg.ini' identified by 'SYSDBA'
[TRACE]DG 126 alloc extent for inode (0, 0, 1)
[TRACE]DG 126 alloc 4 extents for 0xfe000002 (0, 0, 2)->(0, 0, 5)
Used time: 261.193(ms).ASM>init votedisk '/dev_DSC2/VOTE' from '/opt/dmdbms/dmdsc/data/DSC01/dmdcr_cfg.ini'
[TRACE]DG 125 alloc extent for inode (0, 0, 1)
[TRACE]DG 125 alloc 4 extents for 0xfd000002 (0, 0, 2)->(0, 0, 5)
Used time: 175.005(ms).

  事实上,在哪里都可以通过DMASMCMD工具进行初始化,但由于实际的共享存储环境下DMASMCMD工具只存在于数据库实例的/opt/dmdbms/bin,所以需要在某一个连接到共享存储的数据库实例中才能使用的到DMASMCMD工具;
  如果只是像此次的“容器 - 宿主机”环境,且宿主机上有DMASMCMD工具,也可以使用宿主机的DMASMCMD工具完成上述过程,包括dmdcr_cfg.ini文件的路径也可以放置在宿主机的合适目录下。

4 配置dmasvrmal.ini

  分别在DSC_Node1DSC_Node2/opt/dmdbms/dmdsc/data/DSC01/opt/dmdbms/dmdsc/data/DSC02下配置相同内容的dmasvrmal.ini,内容如下:

[MAL_INST1]
MAL_INST_NAME			= ASM0
MAL_HOST				= 192.168.2.2
MAL_PORT				= 4836[MAL_INST2]
MAL_INST_NAME			= ASM1
MAL_HOST				= 192.168.2.3
MAL_PORT				= 4837

5 配置dmdcr.ini

  分别在DSC_Node1和DSC_Node2的/opt/dmdbms/dmdsc/data/DSC01/opt/dmdbms/dmdsc/data/DSC02下配置dmdcr.ini,两者内容分别如下:

# DSC_Node1
root@a0d20641b3cc:/opt/dmdbms/dmdsc/data/DSC01$ cat dmdcr.ini
DMDCR_PATH					= /dev_DSC2/DCR
DMDCR_MAL_PATH				= /opt/dmdbms/dmdsc/data/DSC01/dmasvrmal.ini
DMDCR_SEQNO					= 0
DMDCR_ASM_RESTART_INTERVAL	= 0
DMDCR_ASM_STARTUP_CMD		= /opt/dmdbms/bin/dmasmsvr dcr_ini=/opt/dmdbms/dmdsc/data/DSC01/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL	= 0
DMDCR_DB_STARTUP_CMD		= /opt/dmdbms/bin/dmserver path=/opt/dmdbms/dmdsc/data/DSC01/DSC01_conf/dm.ini dcr_ini=/opt/dmdbms/dmdsc/data/DSC01/dmdcr.ini
DMDCR_LINK_CHECK_IP			= 192.168.2.1# DSC_Node2
root@6fbff487ae8f:/opt/dmdbms/dmdsc/data/DSC02$ cat dmdcr.ini
DMDCR_PATH					= /dev_DSC2/DCR
DMDCR_MAL_PATH				= /opt/dmdbms/dmdsc/data/DSC02/dmasvrmal.ini
DMDCR_SEQNO					= 1
DMDCR_ASM_RESTART_INTERVAL	= 0
DMDCR_ASM_STARTUP_CMD		= /opt/dmdbms/bin/dmasmsvr dcr_ini=/opt/dmdbms/dmdsc/data/DSC02/dmdcr.ini
DMDCR_DB_RESTART_INTERVAL	= 0
DMDCR_DB_STARTUP_CMD		= /opt/dmdbms/bin/dmserver path=/opt/dmdbms/dmdsc/data/DSC02/DSC02_conf/dm.ini dcr_ini=/opt/dmdbms/dmdsc/data/DSC02/dmdcr.ini
DMDCR_LINK_CHECK_IP			= 192.168.2.1

6 向DMSERVER和DMASMSVR赋予ping权限

  由于在dmdcr.ini中设置了DMDCR_LINK_CHECK_IP,所以需要为DSC_Node1和DSC_Node2两个节点的DMSERVER和DMASMSVR赋予ping权限;
  容器的对应镜像内默认并不包含ping工具,因此需要分别在两个容器中执行如下命令以安装:

apt-get update
apt-get install iputils-ping

  安装后可以先尝试目标服务器能不能ping通,这里跳过该步骤;
  分别在DSC_Node1DSC_Node2两个容器中,通过以下命令赋予二进制文件能力,实现比“root”更细粒度的权限控制:

sudo setcap cap_net_raw,cap_net_admin=eip /opt/dmdbms/bin/dmserver
sudo setcap cap_net_raw,cap_net_admin=eip /opt/dmdbms/bin/dmasmsvr

  对上述“能力”设置的解释:

  • setcap工具用于为二进制可执行文件设置Linux能力,这是比root权限更加细粒度的权限控制,允许程序只获取需要的权限而不是完全超级用户权限;
  • cap_net_raw参数允许程序执行原始套接字工作(raw socket),这对于pingtraceroute这种需要低层网络通信的程序非常重要;
  • cap_net_admin参数允许程序执行网络管理相关的操作,比如修改网络接口、配置路由表等;
  • eipEffective, Inherited, Permitted三者的缩写。其中,Permitted代表表示程序允许拥有这些能力;Effective表示当程序执行时,这些能力将会生效;Inherited表示子进程可以从该父进程中继承这些能力;
  • 在setcap命令中,eip修饰的是所有指定的能力;即在该示例中,eip同时适用于cap_net_rawcap_net_admin两个能力。

7 启动DMCSS、DMASMSVR

  分别在DSC_Node1和DSC_Node2容器启动DMCSS和DMASMSVR;
  注意⚠️,启动顺序必须为先启动DMCSS,后启动DMASM

  1. 启动DSC_Node1的DMCSS:
root@a0d20641b3cc:/opt/dmdbms/bin$ ./dmcss dcr_ini=/opt/dmdbms/dmdsc/data/DSC01/dmdcr.ini
  1. 启动DSC_Node2的DMCSS:
root@6fbff487ae8f:/opt/dmdbms/bin$ ./dmcss dcr_ini=/opt/dmdbms/dmdsc/data/DSC02/dmdcr.ini
  1. 启动DSC_Node1的DMASMSVR:
root@a0d20641b3cc:/opt/dmdbms/bin$ ./dmasmsvr dcr_ini=/opt/dmdbms/dmdsc/data/DSC01/dmdcr.ini
  1. 启动DSC_Node2的DMASMSVR:
root@6fbff487ae8f:/opt/dmdbms/bin$ ./dmasmsvr dcr_ini=/opt/dmdbms/dmdsc/data/DSC02/dmdcr.ini

8 登录DMASMTOOL工具创建ASM磁盘组

  任意一个数据库实例登录DMASMTOOL工具都可以创建ASM磁盘组。这里选择在DSC_Node1上登录并操作,创建一个DMDATA磁盘组一个DMLOG磁盘组

root@a0d20641b3cc:/opt/dmdbms/bin$ ./dmasmtool dcr_ini=/opt/dmdbms/dmdsc/data/DSC01/dmdcr.ini
DMASMTOOL V8
ASM>CREATE DISKGROUP DMDATA asmdisk '/dev_DSC2/DMDATA'
Used time: 119.051(ms).
ASM>CREATE DISKGROUP DMLOG asmdisk '/dev_DSC2/DMLOG'
Used time: 111.002(ms).

9 配置dminit.ini

  在任意一个数据库实例上创建dminit.ini均可。此次选择在DSC_Node1上配置,保存在/opt/dmdbms/dmdsc/data/DSC01目录下;其文件内容有:

DB_NAME			= dsc2
SYSTEM_PATH		= +DMDATA/data
SYSTEM			= +DMDATA/data/dsc2/system.dbf
SYSTEM_SIZE		= 128
ROLL			= +DMDATA/data/dsc2/roll.dbf
ROLL_SIZE		= 128
MAIN			= +DMDATA/data/dsc2/main.dbf
MAIN_SIZE		= 128
CTL_PATH		= +DMDATA/data/dsc2/dm.ctl
LOG_SIZE		= 2048
DCR_PATH		= /dev_DSC2/DCR
DCR_SEQNO		= 0
AUTO_OVERWRITE		= 2
PAGE_SIZE		= 16
EXTENT_SIZE		= 16[DSC01]
CONFIG_PATH		= /opt/dmdbms/dmdsc/data/DSC01/DSC01_conf
PORT_NUM		= 6636
MAL_HOST		= 192.168.2.2
MAL_PORT		= 6536
LOG_PATH		= +DMLOG/log/DSC01_log1.log
LOG_PATH		= +DMLOG/log/DSC01_log2.log[DSC02]
CONFIG_PATH		= /opt/dmdbms/dmdsc/data/DSC02/DSC02_conf
PORT_NUM		= 6637
MAL_HOST		= 192.168.2.3
MAL_PORT		= 6537
LOG_PATH		= +DMLOG/log/DSC02_log1.log
LOG_PATH		= +DMLOG/log/DSC02_log2.log

10 初始化数据库环境

  使用上一章节创建的dminit.ini初始化数据库环境。在任何一个节点(此处选择DSC_Node1节点)执行如下命令:

root@a0d20641b3cc:/opt/dmdbms/bin$ ./dminit control=/opt/dmdbms/dmdsc/data/DSC01/dminit.ini
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-06-21
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLLlog file path: +DMLOG/log/DSC01_log1.loglog file path: +DMLOG/log/DSC01_log2.loglog file path: +DMLOG/log/DSC02_log1.loglog file path: +DMLOG/log/DSC02_log2.logwrite to dir [+DMDATA/data/dsc2].
create dm database success. 2024-09-25 16:40:14

  根据dminit.ini中的内容,dminit工具完成了数据库环境的初始化,在DSC_Node1节点下的/opt/dmdbms/dmdsc/data/DSC01/DSC01_conf/opt/dmdbms/dmdsc/data/DSC02/DSC02_conf路径下分别生成了两套配置文件,分别适用于DSC_Node1DSC_Node2两个节点。在DSC_Node1节点分别查看两个路径下生成的配置文件如下:

root@a0d20641b3cc:/opt/dmdbms/dmdsc/data/DSC01/DSC01_conf$ ls
dm.ini  dminit20240925164011.log  dmmal.ini  sqllog.iniroot@a0d20641b3cc:/opt/dmdbms/dmdsc/data/DSC02/DSC02_conf$ ls
dm.ini  dmmal.ini  sqllog.ini

  使用docker cp命令,借助宿主机文件系统,将DSC_Node1上根据dminit.ini初始化生成的DSC_Node2相关的内容拷贝到DSC_Node2的对应目录下:

[root@VM-8-6-centos ~]$ docker cp DSC_Node1:/opt/dmdbms/dmdsc/data/DSC02 /root/DSC02
Successfully copied 85kB to /root/DSC02[root@VM-8-6-centos ~]$ docker cp /root/DSC02/DSC02_conf DSC_Node2:/opt/dmdbms/dmdsc/data/DSC02
Successfully copied 84.5kB to DSC_Node2:/opt/dmdbms/dmdsc/data/DSC02

  在DSC_Node2中查看:

root@6fbff487ae8f:/opt/dmdbms/dmdsc/data/DSC02$ ls
DSC02_conf  dmasvrmal.ini  dmdcr.ini  dmdcr_cfg.iniroot@6fbff487ae8f:/opt/dmdbms/dmdsc/data/DSC02$ cd DSC02_confroot@6fbff487ae8f:/opt/dmdbms/dmdsc/data/DSC02/DSC02_conf$ ls
dm.ini  dmmal.ini  sqllog.ini

11 启动数据库服务器

  分别启动两个节点的服务器:

root@a0d20641b3cc:/opt/dmdbms/bin$ ./dmserver dcr_ini=/opt/dmdbms/dmdsc/data/DSC01/dmdcr.ini /opt/dmdbms/dmdsc/data/DSC01/DSC01_conf/dm.iniroot@6fbff487ae8f:/opt/dmdbms/bin$ ./dmserver dcr_ini=/opt/dmdbms/dmdsc/data/DSC02/dmdcr.ini /opt/dmdbms/dmdsc/data/DSC02/DSC02_conf/dm.ini

12 配置并启动DMCSSM

  DMCSSM 在任何机器上均可以启动,只要该台机器和 DMDSC 的真实机器网络是相通的,就可以监控 DMDSC 集群信息;
  这里我们选择在DSC_Node1节点上搭建DMCSSM。在/opt/dmdbms/dmdsc/data下创建dmcssm.ini内容如下:

root@a0d20641b3cc:/$ cat /opt/dmdbms/dmdsc/data/dmcssm.ini
CSSM_OGUID				= 237589CSSM_CSS_IP				= 192.168.2.2:9836
CSSM_CSS_IP				= 192.168.2.3:9837CSSM_LOG_PATH			= /opt/dmdbms/dmdsc/data/cssm_log
CSSM_LOG_FILE_SIZE		= 32
CSSM_LOG_SPACE_LIMIT	= 0

  注意保持dmcssm.iniCSSM_OGUID的值与dmdcr_cfg.ini中配置的DCR_OGUID的值一致;
  根据dmcssm.ini中的配置项的值,对应地创建 DMCSSM 的日志存放路径:

root@a0d20641b3cc:/opt/dmdbms/dmdsc/data$ mkdir cssm_log

  启动DMCSSM:

root@a0d20641b3cc:/opt/dmdbms/bin$ ./dmcssm ini_path=/opt/dmdbms/dmdsc/data/dmcssm.ini
[monitor]         2024-09-25 17:35:51: CSS MONITOR V8
[monitor]         2024-09-25 17:35:51: CSS MONITOR SYSTEM IS READY.[monitor]         2024-09-25 17:35:51: Wait CSS Control Node choosed...
[monitor]         2024-09-25 17:35:52: Wait CSS Control Node choosed succeed.

  使用show命令查看集群状态信息:

showmonitor current time:2024-09-25 17:37:06, n_group:3
=================== group[name = GRP_CSS, seq = 0, type = CSS, Control Node = 0] ========================================[CSS0] auto check = TRUE, global info:
[ASM0] auto restart = FALSE
[DSC01] auto restart = FALSE
[CSS1] auto check = TRUE, global info:
[ASM1] auto restart = FALSE
[DSC02] auto restart = FALSEep:	css_time               inst_name     seqno     port    mode         inst_status        vtd_status   is_ok        active       guid              ts              2024-09-25 17:37:06    CSS0          0         9836    Control Node OPEN               WORKING      OK           TRUE         1186081327        1186085368      2024-09-25 17:37:06    CSS1          1         9837    Normal Node  OPEN               WORKING      OK           TRUE         1186113029        1186116994      =================== 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 = NULLcrash process over flag is TRUE
ep:	css_time               inst_name     seqno     port    mode         inst_status        vtd_status   is_ok        active       guid              ts              2024-09-25 17:37:06    ASM0          0         5836    Control Node OPEN               WORKING      OK           TRUE         1186159387        1186163241      2024-09-25 17:37:06    ASM1          1         5837    Normal Node  OPEN               WORKING      OK           TRUE         1186173736        1186177556      =================== 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 = NULLcrash process over flag is TRUE
ep:	css_time               inst_name     seqno     port    mode         inst_status        vtd_status   is_ok        active       guid              ts              2024-09-25 17:37:06    DSC01         0         6636    Control Node OPEN               WORKING      OK           TRUE         94136539          94137304        2024-09-25 17:37:06    DSC02         1         6637    Normal Node  OPEN               WORKING      OK           TRUE         94142912          94143613        ==================================================================================================================

  至此,基于 DMASM 的 DMDSC 已经搭建完成。

  社区地址:https://eco.dameng.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2、electron vue3 怎么创建子窗口,并给子窗口路由传参

接上回初始化vue3 electron项目,创建完vue3 electron项目后,现在要实现在渲染进程中点击按钮创建一个新的子窗口 开始 子窗口创建操作只能在主线程内完成,而创建操作是在渲染线程触发,因此就需要进行两者间的通讯。 1、创建子窗…

性能监控之Python实战SkyWalking链路追踪

文章目录 一、介绍二、SkyWalking支持的语言三、SkyWalking安装3.1 前提准备3.2 先安装ElasticSearch7.X3.3 Skywalking-OAP 安装3.4 Skywalking-UI 界面安装3.5 访问页面检查SkyWalking是否可以访问 四、Python 项目接入SkyWalking4.1 演示项目代码4.2 验证 sw-python4.3 配置…

uviewui2.x上传的坑

<u-upload:fileList"fileList3"afterRead"afterRead"delete"deletePic"name"3"multiple:maxCount"10":previewFullImage"true" ></u-upload> 其中&#xff0c;afterRead&#xff0c;deletePic方法&a…

AI会议时代:企业如何搭上快车?

“我 们认为&#xff0c;AI绝不仅是会议的辅助工具&#xff0c;而更会是重塑会议流程的关键力量。通过AI的个性化定制、大规模支持、智能分析这些技术&#xff0c;AI会议将大大提升会议的智能化与高效性&#xff0c;进而成为企业数字化转型的核心驱动力。” 作者|斗斗 编辑…

webdav解说

WebDAV&#xff08;Web Distributed Authoring and Versioning&#xff09;是一种基于HTTP/1.1协议的扩展&#xff0c;它允许用户通过网络进行文件的上传、删除、编辑等操作&#xff0c;从而实现远程文件管理。 WebDAV 是一种网络文件共享协议&#xff0c;它扩展了HTTP协议&am…

golang context管理channel

如果多个协程之间有一定的生命周期关系&#xff0c;可以使用context去做退出管理。 如下图&#xff0c;上游的ctx只能执行很快就被cancel了&#xff0c;此时那启动的子协程也没有继续运行的必要&#xff0c;所以此时子协程也监控上游的状态&#xff0c;上游一结束&#xff0c;子…

THREE.JS法线Shader

以普通情况而论 vNormal normal;//...gl_FragColor vec4( vNormal, 1. );vNormal normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );vNormal normalMatrix * normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );normalMa…

为什么IP首部的源IP地址和目的IP地址不变而MAC层的源MAC地址和目的MAC地址变

IP首部的源IP地址和目的IP地址不变&#xff0c;而MAC层的源MAC地址和目的MAC地址变化的原因‌主要涉及到计算机网络中的分层结构和数据包传输过程。在OSI&#xff08;开放系统互联&#xff09;模型中&#xff0c;计算机网络被分为不同的层&#xff0c;每层都有其特定的功能。IP…

【Java异常】(简简单单拿捏)

【Java异常】&#xff08;简简单单拿捏&#xff09; 1. 异常的简单介绍2. 异常的抛出2.1 语法 3. 异常的处理3.1 异常声明throws3.2 try-catch捕获并处理 4. 例子&#xff08;try-catch自定义异常&#xff09; 1. 异常的简单介绍 程序员在运行代码时会遇到很多异常&#xff0c…

MySQL知识点复习 - 索引分类

索引 可以把书开头的目录比喻成索引&#xff0c;那么在数据库中&#xff0c;索引就可以理解为数据的目录。 索引的分类 可以按照四个角度来进行分类 数据结构&#xff1a;b&#x1f332;、hash、full-text索引物理存储&#xff1a;聚簇、二级索引字段特性&#xff1a;主键、…

Linux系统安装MySQL8.40(保姆级教程)

前言&#xff1a; 说明&#xff1a;本文章是在阿里云ecs上安装MySQL&#xff0c;即&#xff1a;Linux是在联网状态下。 一、安装前环境准备 1.查看MySQL应用是否已存在 rpm -qa |grep mysql说明&#xff1a;若返回空信息&#xff0c;就说明当前环境没有安装MySQL。 2.查看ma…

如何要进行源代码加密?源代码加密的必要性

由于研发人员比普通办公人员要精通电脑&#xff0c;除了常见的网络&#xff0c;邮件&#xff0c;U盘&#xff0c;QQ等数据扩散方法外&#xff0c;还有很多对于研发人员来说非常容易的方法&#xff08;未列全&#xff09;&#xff1a; 物理方法&#xff1a; — 网线直连&#…

解决方案:如何区分python里面绝对路径跟相对路径的不同

文章目录 一、现象二、解决方案 一、现象 在工作中&#xff0c;会经常混淆绝对路径跟相对路径的区别&#xff0c;我也是找了资料之后就懂了&#xff0c;但时间一长就混淆了&#xff0c;于是&#xff0c;我在这里记录下 二、解决方案 在Python中&#xff0c;绝对路径和相对路…

关于el-card的height设置100%后, el-card内容超出高度后,内容被隐藏这件事

1. 解决方法 全局样式添加以下代码 .el-card__body{height: 100%;width: 100%; }2. 问题原因 代码 <el-card style"height: 100%"><!-- ... --> </el-card>选中.el-card 元素发现这里的 .el-card 的 overflow:hidden 而内部 .el-card__body除…

WiFi无线连接管理安卓设备工具:WiFiADB

介绍 WiFi ADB 使您能够通过 WiFi TCP/IP 连接直接在设备上轻松调试和测试 Android 应用&#xff0c;无需使用 USB 数据线。在启用 WiFi 上的 ADB 后&#xff0c;打开控制台将电脑连接到设备。 手机和电脑在同一个WiFi然后电脑上运行adb connect x.x.x.x:x命令即可 下载 谷…

七段 LED 显示器(7段数码管)

7 段 LED 显示器, 通常简称为 LED 数码管 或 数码管. 通过 菜单--绘制--数字芯片--添加 7 段 LED 显示器 可以引入它. 普通模式 它内部其实就是七盏长条状的 LED 灯, 有的横着放, 有的竖着放. 七个灯用 a b c d e f g 分别表示. 灯的位置从上到下, 从里到外顺时针下来, 如上图…

青年女演员白澜闪耀亮相第五届庐山电影节红毯

2024年9月25日&#xff0c;演员白澜受邀出席了第五届庐山电影节盛典晚会&#xff0c;在这个星光熠熠的夜晚&#xff0c;青年演员白澜以一袭精心设计的礼服惊艳亮相&#xff0c;成为红毯瞩目的焦点。 整个第五届庐山国际爱情电影周以“庐山&#xff0c;你的爱情靠山”为主题&…

帆软通过JavaScript注入sql,实现数据动态查询

将sql语句设置为参数 新建数据库查询 设置数据库查询的sql语句 添加控件 JavaScript实现sql注入 添加事件 编写JavaScript代码 //获取评价人id var pjrid this.options.form.getWidgetByName("id").getValue();//显示评价人id alert("评价人&#xff1a;&…

微服务架构拆分策略与实践

微服务架构拆分策略与实践指南 随着互联网技术的发展&#xff0c;传统的单体应用逐渐显现出其局限性&#xff0c;特别是在扩展性和维护性方面。微服务架构作为一种解决这些问题的方法&#xff0c;通过将大型应用分解成一系列小型、独立的服务单元&#xff0c;每个单元负责单一…

PG数据库查询字段备注信息

在 PostgreSQL 数据库中&#xff0c;要查询某个表的字段名&#xff08;即列名&#xff09;及其备注信息&#xff0c;可以使用 information_schema.columns 视图来获取列名&#xff0c;并结合 pg_description 和 pg_class 等系统表来获取列的备注信息。下面是一个示例 SQL 查询&…