DSC 集群的搭建
1、 配置环境说明
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210713111116663.png)
2、 搭建2节点DMDSC(DMASM)
1) 新建共享存储
DW_P主机
编辑虚拟机设置->点击添加硬盘->选择SCSI->创建新虚拟磁盘->立即分配所有磁盘空间(20G)并选定将虚拟磁盘存储为单个文件->完成创建
DW_S主机
编辑虚拟机设置->点击添加硬盘->使用现有虚拟磁盘->完成创建
2) 在两个虚拟机路径下的.vmx文件中,添加disk.locking=“false”
DW_P
DW_S
3)在共享磁盘上裸设备划分
[root@DW_P ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xc2b0d4af 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):P
磁盘 /dev/sdb:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xc2b0d4af
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):N
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): P
分区号 (1-4,默认 1):1
起始 扇区 (2048-104857599,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-104857599,默认为 104857599):+100M
分区 1 已设置为 Linux 类型,大小设为 100 MiB
命令(输入 m 获取帮助):N
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): P
分区号 (2-4,默认 2):2
起始 扇区 (206848-104857599,默认为 206848):
将使用默认值 206848
Last 扇区, +扇区 or +size{K,M,G} (206848-104857599,默认为 104857599):+100M
分区 2 已设置为 Linux 类型,大小设为 100 MiB
命令(输入 m 获取帮助):N
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): P
分区号 (3,4,默认 3):3
起始 扇区 (411648-104857599,默认为 411648):
将使用默认值 411648
Last 扇区, +扇区 or +size{K,M,G} (411648-104857599,默认为 104857599):+2048M
分区 3 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):N
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): P
已选择分区 4
起始 扇区 (4605952-104857599,默认为 4605952):
将使用默认值 4605952
Last 扇区, +扇区 or +size{K,M,G} (4605952-104857599,默认为 104857599):
将使用默认值 104857599
分区 4 已设置为 Linux 类型,大小设为 47.8 GiB
命令(输入 m 获取帮助):P
磁盘 /dev/sdb:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xc2b0d4af
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 206847 102400 83 Linux
/dev/sdb2 206848 411647 102400 83 Linux
/dev/sdb3 411648 4605951 2097152 83 Linux
/dev/sdb4 4605952 104857599 50125824 83 Linux
命令(输入 m 获取帮助):W
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
4)编辑两节点下60-raw.rules文件,添加一下语句
vim /etc/udev/rules.d/60-raw.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="root", GROUP="root", MODE="660"
5)分别在两节点重启udev(重启操作系统也可以生效),使用绑定生效
[root@DW_P ~]# /sbin/udevadm trigger --type=devices --action=change
[root@DW_P ~]# /sbin/udevadm control --reload-rules
[root@DW_S ~]# /sbin/udevadm trigger --type=devices --action=change
[root@DW_S ~]# /sbin/udevadm control --reload-rules
6)两节点分别执行命令,通知已经划分了分区
7)查看裸设备的大小
[root@DW_P ~]# blockdev --getsize64 /dev/raw/raw1
[root@DW_P ~]# blockdev --getsize64 /dev/raw/raw2
[root@DW_P ~]# blockdev --getsize64 /dev/raw/raw3
[root@DW_P ~]# blockdev --getsize64 /dev/raw/raw4
[root@DW_S ~]# blockdev --getsize64 /dev/raw/raw1
[root@DW_S ~]# blockdev --getsize64 /dev/raw/raw2
[root@DW_S ~]# blockdev --getsize64 /dev/raw/raw3
[root@DW_S ~]# blockdev --getsize64 /dev/raw/raw4
准备 dmdcr_cfg.ini 配置文件,保存到/dmdata/目录下面。后续 DMASMCMD 工具执行 init 语句会使用到。 ( 一个节点配置即可,通常在节点一 )
[dmdba@DW_P dmdata]$ vim dmdcr_cfg.ini
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/raw/raw2
DCR_OGUID = 63635
[GRP] #[GRP]表示新建一个 Group
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP_CSS
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_CSS] #[]里的是组名,与 DCR_GRP_NAME 对应
DCR_EP_NAME = CSS0
DCR_EP_HOST = 172.16.25.77
DCR_EP_PORT = 9341
[GRP_CSS] #[]里的是组名,与 DCR_GRP_NAME 对应
DCR_EP_NAME = CSS1
DCR_EP_HOST = 172.16.25.88
DCR_EP_PORT = 9343
[GRP] #[GRP]表示新建一个 Group
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_ASM] #[]里的是组名,与 DCR_GRP_NAME 对应
DCR_EP_NAME = ASM0
DCR_EP_SHM_KEY = 93360
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 172.16.25.77
DCR_EP_PORT = 9349
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP_ASM] #[]里的是组名,与 DCR_GRP_NAME 对应
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 93361
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 172.16.25.88
DCR_EP_PORT = 9351
DCR_EP_ASM_LOAD_PATH = /dev/raw
[GRP] #[GRP]表示新建一个 Group
DCR_GRP_TYPE = DB
DCR_GRP_NAME = GRP_DSC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60
[GRP_DSC] #[]里的是组名,与 DCR_GRP_NAME 对应
DCR_EP_NAME = GRP_DSC01
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9741
[GRP_DSC] #[]里的是组名,与 DCR_GRP_NAME 对应
DCR_EP_NAME = GRP_DSC02
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9742
使用 DMASMCMD 工具初始化
[dmdba@DW_P bin]$ ./dmasmcmd
DMASMCMD V8
ASM>create dcrdisk '/dev/raw/raw1' 'dcr'
[Trace]The ASM initialize dcrdisk /dev/raw/raw1 to name DMASMdcr
Used time: 174.977(ms).
ASM>create votedisk '/dev/raw/raw2' 'vote'
[Trace]The ASM initialize votedisk /dev/raw/raw2 to name DMASMvote
Used time: 96.773(ms).
ASM>create asmdisk '/dev/raw/raw3' 'LOGO'
[Trace]The ASM initialize asmdisk /dev/raw/raw3 to name DMASMLOGO
Used time: 100.840(ms).
ASM>create asmdisk '/dev/raw/raw4' 'DATA0'
[Trace]The ASM initialize asmdisk /dev/raw/raw4 to name DMASMDATA0
Used time: 27.314(ms).
ASM>init dcrdisk '/dev/raw/raw1' from '/dmdata/dmdcr_cfg.ini' identified by 'abcd'
[Trace]DG 126 allocate 4 extents for file 0xfe000002.
Used time: 162.277(ms).
ASM>init votedisk '/dev/raw/raw2' from '/dmdata/dmdcr_cfg.ini'
[Trace]DG 125 allocate 4 extents for file 0xfd000002.
Used time: 120.264(ms).
准备 DMASM 的 MAL 配置文件(命名为 dmasvrmal.ini),使用 DMASM 的所有节点都 要配置,内容完全一样,保存到/dmdata 目录下
[dmdba@DW_P dmdata]$ vim dmasvrmal.ini
[MAL_INST1]
MAL_INST_NAME = ASM0
MAL_HOST = 172.16.25.77
MAL_PORT = 7236
[MAL_INST2]
MAL_INST_NAME = ASM1
MAL_HOST = 172.16.25.88
MAL_PORT = 7237
[dmdba@DW_S dmdata]$ vim dmasvrmal.ini
[MAL_INST1]
MAL_INST_NAME = ASM0
MAL_HOST = 172.16.25.77
MAL_PORT = 7236
[MAL_INST2]
MAL_INST_NAME = ASM1
MAL_HOST = 172.16.25.88
MAL_PORT = 7237
准备 dmdcr.ini 配置文件,保存到/dmdata 目录下面
[dmdba@DW_P dmdata]$ vim dmdcr.ini
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH =/dmdata/dmasvrmal.ini #dmasmsvr 使用的 MAL 配置文件路径
DMDCR_SEQNO = 0
#ASM 重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /opt/dmdbms/bin/dmasmsvr dcr_ini=/dmdata/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /opt/dmdbms/bin/dmserver path=/dmdata/dsc0_config/dm.ini dcr_ini=/dmdata/dmdcr.ini
[dmdba@DW_S dmdata]$ vim dmdcr.ini
DMDCR_PATH = /dev/raw/raw1
DMDCR_MAL_PATH =/dmdata/dmasvrmal.ini #dmasmsvr 使用的 MAL 配置文件路径
DMDCR_SEQNO = 1
#ASM 重启参数,命令行方式启动
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /opt/dmdbms/bin/dmasmsvr dcr_ini=/dmdata/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /opt/dmdbms/bin/dmserver path=/dmdata/dsc1_config/dm.ini dcr_ini=/dmdata/dmdcr.ini
启动 DMCSS、DMASM
服务程序 在 172.16.25.77、172.16.25.88 节点先后分别启动 dmcss、dmasmsvr 程序。
手动启动dmcss命令
[dmdba@DW_P bin]$ ./dmcss DCR_INI=/dmdata/dmdcr.ini
手动启动dmasmsvr命令
[dmdba@DW_P bin]$ ./dmasmsvr DCR_INI=/dmdata/dmdcr.ini
如果 DMCSS 配置有自动拉起 dmasmsvr 的功能,可以等待 DMCSS 自动拉起 dmasmsvr程序,不需要手动启动。
主 DMCSS 启动后屏幕打印如下:
[dmdba@DW_P bin]$ ./dmcss DCR_INI=/dmdata/dmdcr.ini
DMCSS V8
DMCSS IS READY
[CSS]: 设置EP CSS0[0]为控制节点
[ASM]: 设置EP ASM0[0]为控制节点
[ASM]: 设置命令[START NOTIFY], 目标站点 ASM0[0], 命令序号[2]
[ASM]: 设置命令[EP START], 目标站点 ASM0[0], 命令序号[3]
[ASM]: 设置命令[NONE], 目标站点 ASM0[0], 命令序号[0]
[ASM]: 设置命令[EP START], 目标站点 ASM1[1], 命令序号[5]
[ASM]: 设置命令[NONE], 目标站点 ASM1[1], 命令序号[0]
[ASM]: 设置命令[EP OPEN], 目标站点 ASM0[0], 命令序号[8]
[ASM]: 设置命令[EP OPEN], 目标站点 ASM1[1], 命令序号[9]
[ASM]: 设置命令[NONE], 目标站点 ASM0[0], 命令序号[0]
[ASM]: 设置命令[NONE], 目标站点 ASM1[1], 命令序号[0]
[ASM]: 设置命令[EP REAL OPEN], 目标站点 ASM0[0], 命令序号[11]
[ASM]: 设置命令[EP REAL OPEN], 目标站点 ASM1[1], 命令序号[12]
[ASM]: 设置命令[NONE], 目标站点 ASM0[0], 命令序号[0]
[ASM]: 设置命令[NONE], 目标站点 ASM1[1], 命令序号[0]
使用 dmasmtool 工具创建 DMASM 磁盘组
选择一个节点(172.16.25.77),启动 dmasmtool 工具。
输入下列语句创建 DMASM 磁盘组:
[dmdba@DW_P bin]$ ./dmasmtool DCR_INI=/dmdata/dmdcr.ini
DMASMTOOL V8
ASM>create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3' #创建日志磁盘组
Used time: 62.898(ms).
ASM>create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4' #创建数据磁盘组
Used time: 9.048(ms).
准备dminit.ini配置文件,保存到/dmdata目录
[dmdba@DW_P dmdata]$ vim dminit.ini
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 = 256
dcr_path = /dev/raw/raw1 #dcr 磁盘路径,目前不支持 asm,只能是裸设备
dcr_seqno = 0
auto_overwrite = 1
[GRP_DSC01] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应
config_path = /dmdata/dsc0_config
port_num = 5236
mal_host = 172.16.25.77
mal_port = 9340
log_path = +DMLOG/log/dsc0_log01.log
log_path = +DMLOG/log/dsc0_log02.log
[GRP_DSC02] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应
config_path = /dmdata/dsc1_config
port_num = 5237
mal_host = 172.16.25.88
mal_port = 9341
log_path = +DMLOG/log/dsc1_log01.log
log_path = +DMLOG/log/dsc1_log02.log
使用 dminit 初始化 DB 环境
选择一个节点(172.16.25.77),启动 dminit 工具初始化数据库。dminit 执行完成后,会在 config_path 目录(/dmdata/dsc0_config 和 /dmdata/dsc1_config)下生成配置文件 dm.ini 和 dmmal.ini。
[dmdba@DW_P bin]$ ./dminit control=/dmdata/dminit.ini
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2022-03-12
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: +DMLOG/log/dsc0_log01.log
log file path: +DMLOG/log/dsc0_log02.log
log file path: +DMLOG/log/dsc1_log01.log
log file path: +DMLOG/log/dsc1_log02.log
write to dir [+DMDATA/data/dsc].
create dm database success. 2021-06-25 16:16:20
将 172.16.28.77 机器/dmdata/dsc1_config 目录拷贝到 172.16.25.88 机器相同目录下
[dmdba@DW_P dmdata]$ scp -r dsc1_config 172.16.25.88:/dmdata/
The authenticity of host '172.16.25.88 (172.16.25.88)' can't be established.
ECDSA key fingerprint is SHA256:vpfHOl0m+2bNORtKGqG3IZtthNYGDC84tSdzEXN3BS8.
ECDSA key fingerprint is MD5:f3:b7:09:f3:c4:5c:b7:26:06:3a:87:ed:e6:48:70:ad.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.25.88' (ECDSA) to the list of known hosts.
dmdba@172.16.25.88's password:
dmmal.ini 100% 214 504.6KB/s 00:00
dm.ini 100% 50KB 25.0MB/s 00:00
sqllog.ini 100% 481 832.4KB/s 00:00
启动数据库
[dmdba@DW_P bin]$ ./dmserver /dmdata/dsc0_config/dm.ini dcr_ini=/dmdata/dmdcr.ini
[dmdba@DW_S bin]$ ./dmserver /dmdata/dsc1_config/dm.ini dcr_ini=/dmdata/dmdcr.ini
配置服务名,dm_svc.conf服务名文件(建议所有节点都配置)
[root@DW_P ~]# vim /etc/dm_svc.conf
dsc=(172.16.25.77:5236,172.16.25.88:5236)
SWITCH_TIME=(10000)
SWITCH_INTERVAL=(100)
TIME_ZONE=(480)
LANGUAGE=(cn)
连接测试
单节点连接测试
[dmdba@DW_P bin]$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 1.716(ms)
disql V8
SQL> select instance_name from v$instance;
行号 INSTANCE_NAME
---------- -------------
1 GRP_DSC01
已用时间: 5.493(毫秒). 执行号:500.
[dmdba@DW_S bin]$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 1.606(ms)
disql V8
SQL> select instance_name from v$instance;
行号 INSTANCE_NAME
---------- -------------
1 GRP_DSC02
已用时间: 6.903(毫秒). 执行号:200.
服务名测试
[dmdba@DW_P bin]$ ./disql SYSDBA/SYSDBA@dsc
服务器[172.16.25.77:5236]:处于普通打开状态
登录使用时间 : 2.133(ms)
disql V8
SQL> select * from v$dsc_ep_info;
行号 EP_NAME EP_SEQNO EP_GUID EP_TIMESTAMP EP_MODE EP_STATUS
---------- --------- ----------- -------------------- -------------------- ------------ ---------
1 GRP_DSC01 0 674632671 674642851 Normal Node OK
2 GRP_DSC02 1 674644252 674654413 Control Node OK
已用时间: 2.781(毫秒). 执行号:600.
1)完成 DSC 集群的部署,并测试建表和插入数据,2 个节点都可以查询到数据。
SQL> create table test1(id int); #建表
操作已执行
已用时间: 175.182(毫秒). 执行号:301.
SQL> insert into test1 values(001); #插入数据
影响行数 1
已用时间: 0.673(毫秒). 执行号:302.
SQL> insert into test1 values(123); #插入数据
影响行数 1
已用时间: 0.277(毫秒). 执行号:303.
SQL> commit;
操作已执行
已用时间: 0.697(毫秒). 执行号:304.
##查询数据
[dmdba@DW_P bin]$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.262(ms)
disql V8
SQL> SELECT * FROM TEST1;
行号 ID
---------- -----------
1 1
2 123
已用时间: 34.728(毫秒). 执行号:300.
[dmdba@DW_S bin]$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 9.323(ms)
disql V8
SQL> SELECT * FROM TEST1;
行号 ID
---------- -----------
1 1
2 123
已用时间: 30.474(毫秒). 执行号:200.
2)测试故障一个节点后,集群和持续提供服务。
1. 连接到 dsc
[dmdba@DW_P bin]$ ./disql SYSDBA/SYSDBA@dsc
2. 确认当前用户已经连接到的节点实例
SQL> select instance_name from v$instance;
行号 INSTANCE_NAME
---------- -------------
1 GRP_DSC01
已用时间: 1.418(毫秒). 执行号:500.
3. 关闭 GRP_DSC01 实例,或者将节点 01 所在这台主机关机。
[root@DW_P ~]# ps -ef | grep dm.ini
dmdba 1872 1 0 11:10 pts/0 00:00:52 /opt/dmdbms/bin/dmserver /dmdata/dsc0_config/dm.ini DCR_INI=/dmdata/dmdcr.ini -noconsole
root 2864 1661 0 15:04 pts/0 00:00:00 grep --color=auto dm.ini
[root@DW_P ~]# kill 1872
4. 等待几秒后,再次执行这条语句,还在会话 1 中执行。再次查询当前用户已连接到的节点实例。
SQL> select instance_name from v$instance;
行号 INSTANCE_NAME
---------- -------------
1 GRP_DSC02
已用时间: 0.380(毫秒). 执行号:303.