环境准备
(1)需要2台虚机,内存最好2G以上。每台虚机装好DM8,装好后不需要初始化。
(2)本文为机器起名,第一台叫节点1,第二台叫节点2,方便称呼。因为是学习使用,因此使用vmware搭建。
(3)为节点1挂载一块磁盘,需关机,然后vmware上编辑虚机设置,添加一块硬盘(生产上可以找运维帮忙挂,必须是裸设备)。生产上建议挂2块及以上,数据和日志分开存放。
这边建议该硬盘为单个文件,“虚拟设备节点”,选择1:0。
(4)第二个节点,关机,添加硬盘,选择现有硬盘,浏览并选择节点1的硬盘文件(.vmdk),“虚拟设备节点”选择0:1。
然后,进入每台虚机的目录,记事本打开“xxxx.vmx”文件,末尾处添加:
disk.locking="FALSE"
scsi0:1.SharedBus="Virtual"
scsi1:1.SharedBus="Virtual"
注:末尾必须是回车结尾。
(5)若有多块硬盘,基本都是这么挂载,“虚拟设备节点”右边数字递增或使用默认的即可。
(6)配置文件目录:因为DMDSC的共享磁盘,实际就是存放数据等内容的,所以许多软件的.ini配置文件,都得放在虚机的本地上,不能放在共享磁盘,因此需要规划个地方存放。本文使用/dmdate,作为配置文件目录
(7)本文说所的“bin目录”,均为DM8的安装目录下的bin目录,例安装目录是/dmdbms,那么bin目录就是/dmdbms/bin
注:DMDSC集群后面会初始化,并配置实例信息,同时自动拉起实例。因此只需提前制定好数据库名、端口等信息即可。到时候2个节点的数据库都会建在共享磁盘上(即vmware的那个磁盘文件),而库的配置文件(包括其他软件的配置文件)都会在本机上(即你操作的虚机),这也是为何会有(6)的原因
DM8试用版下载地址:https://eco.dameng.com/download/?_blank
1、共享磁盘(裸设备)分区
(1)两台虚机都开机,使用root用户,关闭防火墙
(2)节点1,执行fdisk -l,能看到刚才挂载的共享硬盘就可以(若只挂了1块,那名字默认叫sdb,挂2块是sdb和sdc,以此类推)
(3)节点2,同样执行fdisk -l,查看是否能看到共享磁盘
共享磁盘需要划分为4份,用于存放 dcr信息、vote信息、redo log、data,分别绑定为raw1~raw4
(4)节点1,执行fdisk /dev/sdb,进行磁盘分区
依次输入:
n→p→1→回车→+100M→回车
n→p→2→回车→+100M→回车
n→p→3→回车→+2048M→回车
n→p→回车→回车(即默认把剩余所有空间给分区4)
w→回车
(5)再次执行fdisk -l查看共享磁盘,下方是否有分区信息
(6)然后去节点2,也执行fdisk -l查看共享磁盘是否有分区信息,若没有,表示共享磁盘挂载有问题,没通,返回《1、环境准备》重新挂载
若挂了4个或以上磁盘,并且每个磁盘大小都足以存放上方内容,那可跳过这步
两个节点,执行:
vi /etc/udev/rules.d/60raw.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"
挂载多个磁盘的,注意修改KERNEL的磁盘名
完成后,两个节点,都执行以下命令,使裸设备绑定生效
udevadm trigger --type=devices --action=change
查看裸设备:
ll /dev/raw/*
返回以下:
crw-rw----. 1 dmdba dinstall 162, 1 12月 24 16:49 /dev/raw/raw1
crw-rw----. 1 dmdba dinstall 162, 2 12月 28 21:25 /dev/raw/raw2
crw-rw----. 1 dmdba dinstall 162, 3 12月 28 21:22 /dev/raw/raw3
crw-rw----. 1 dmdba dinstall 162, 4 12月 28 19:25 /dev/raw/raw4
crw-rw----. 1 root disk 162, 0 12月 24 16:49 /dev/raw/rawctl
#若看不到这些文件,或者文件的权限不对,没关系,暂时忽略
(7)两台机器,都重启
(8)重启后,再次查看:ll /dev/raw/*
若还是没变化,表示磁盘有问题,只能重新挂载了……
2、创建配置文件,切换回dmdba用户
su - dmdba
去配置文件目录,即/dmdata,创建配置文件
【dmdcr_cfg.ini】两个节点均配
vi dmdcr_cfg.ini
写入以下内容(除了ip要修改,其他基本不动):
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/raw/raw2
DCR_OGUID = 63635
[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 = 节点1的ip
DCR_EP_PORT = 9341
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 节点2的ip
DCR_EP_PORT = 9343
[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 = 93360
DCR_EP_SHM_SIZE = 10
DCR_EP_HOST = 节点1的ip
DCR_EP_PORT = 9349
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 = 节点2的ip
DCR_EP_PORT = 9351
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
DCR_EP_SEQNO = 0
DCR_CHECK_PORT = 9741
DCR_EP_PORT = 5238
[GRP_DSC]
DCR_EP_NAME = DSC1
DCR_EP_SEQNO = 1
DCR_CHECK_PORT = 9742
DCR_EP_PORT = 5238
【初始化dcr】1个节点配置即可
使用dmasmcmd初始化磁盘组,两个方法:
第一,写个文件,将下列内容粘贴保存(注意最后两条的配置文件目录)
vi asmcmd.txt
#asm script file
create dcrdisk '/dev/raw/raw1' 'dcr'
create votedisk '/dev/raw/raw2' 'vote'
create asmdisk '/dev/raw/raw3' 'LOG0'
create asmdisk '/dev/raw/raw4' 'DATA0'
init dcrdisk '/dev/raw/raw1' from '/dm8/data/dmdcr_cfg.ini' identified by 'abcd'
init votedisk '/dev/raw/raw2' from '/dm8/data/dmdcr_cfg.ini'
然后去dmdbms的bin目录,执行:
./dmasmcmd script_file=/dmdata/asmcmd.txt
第二,直接去bin目录,执行:
./dmasmcmd
然后依次输入上方每条命令,并回车(注意第一行不用执行,末尾也不需要写分号)
【dmasvrmal.ini】两个节点都配,内容完全一致
vi dmasvrmal.ini
写入以下内容(注意改ip):
[MAL_INST1]
MAL_INST_NAME = ASM0
MAL_HOST = 节点1的ip
MAL_PORT = 7236
[MAL_INST2]
MAL_INST_NAME = ASM1
MAL_HOST = 节点2的ip
MAL_PORT = 7237
【dmdcr.ini】两个节点都配
节点1:
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 = /dmdbms/bin/dmasmsvr dcr_ini=/dmdata/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /dmdbms/bin/dmserver path=/dmdata/dsc0_config/dm.ini dcr_ini=/dmdata/dmdcr.ini
节点2:
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 = /dmdbms/bin/dmasmsvr dcr_ini=/dmdata/dmdcr.ini
#DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /dmdbms/bin/dmserver path=/dmdata/dsc0_config/dm.ini dcr_ini=/dmdata/dmdcr.ini
DMDCR_SEQNO为0和1,对应节点1和节点2。末尾path是数据库名和配置文件,注意2个节点数据库名可能不一致,记得根据实际情况修改。
以上DMDCR_ASM_RESTART_INTERVAL、DMDCR_DB_RESTART_INTERVAL两个地方,是自动拉起dmasmsvr、dmserver。先配置0,即手动启动,后续配好后,再改成自动。
3、启动dmcss、dmasmsvr两个服务(前台启动,注意新开会话),两个节点均起
两个节点,都去bin目录,执行:
./dmcss dcr_ini=/dmdata/dmdcr.ini
然后,两个节点,开新会话:
./dmasmsvr dcr_ini=/dmdata/dmdcr.ini
返回dmcss启动的那个会话,看到节点1或节点2的返回,内容很多并且没有报错,表示成功
5、dmasmtool创建磁盘组
选择一个节点,再开个新会话,启动dmasmtool工具,在bin目录
./dmasmtool dcr_ini=/dmdata/dmdcr.ini
然后依次执行(同样无分号):
create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3'
create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'
exit
【配置dminit.ini】,1个节点即可
注意:这里就是初始化数据库的地方,dminit.ini文件里就是初始化参数,记得根据现场情况、需求去修改!!!
去配置文件目录,即/dmdata,创建配置文件
vi dminit.ini
写入以下内容(注意改ip):
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_seqno = 0
auto_overwrite = 1
page_size = 16
[DSC0]
config_path = /dmdata/dsc0_config
port_num = 5241
mal_host = 节点1的ip
mal_port = 9340
log_path = +DMLOG/log/dsc0_log01.log
log_path = +DMLOG/log/dsc0_log02.log
[DSC1]
config_path = /dmdata/dsc1_config
port_num = 5241
mal_host = 节点2的ip
mal_port = 9341
log_path = +DMLOG/log/dsc1_log01.log
log_path = +DMLOG/log/dsc1_log02.log
上方的 port_num = 5241,并不代表数据库的端口是5241,数据库端口是dmdcr_cfg.ini中的DCR_EP_PORT = 5238决定的,有点奇怪但实验证明确实如此……
6、初始化数据库(1个节点)
(1)去bin目录,启动dminit
./dminit control=/dmdata/dminit.ini
末尾返回success和时间,表示成功
(2)然后去/dmdata目录下,会看到成功初始化后生成的配置文件,共2个节点,分别用目录装着,目录名是两个节点的数据库名
(3)每个目录里面都包含着dm.ini和dmmal.ini
(4)将节点2的这个目录,拷贝到节点2的机器上,放在同样的位置即可
scp -r dsc1_config/ dmdba@节点2的ip:/dmdata/
(5)然后删掉节点1上的这个dsc1_config目录
7、启动数据库服务,去bin目录
节点1:
./dmserver /dmdata/dsc0_config/dm.ini dcr_ini=/dmdata/dmdcr.ini
节点2:
./dmserver /dmdata/dsc1_config/dm.ini dcr_ini=/dmdata/dmdcr.ini
同样都是前台启动,注意开新会话。
8、配置远程归档
先将2个节点的dm.ini文件,ARCH_INI设置为1,再往下走
vi dmarch.ini
节点1:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch/dsc0/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_INCOMING_PATH = /dmarch/dsc0/arch_remote
节点2:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch/dsc1/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_INCOMING_PATH = /dmarch/dsc1/arch_remote
这里需要预先建好归档日志存放的目录
9、配置后台启动
先将两个节点,数据库服务,停掉
然后dmcss会话都停掉,两个节点,输入exit,回车
再将dmasmsvr停掉,两个节点,输入exit,回车
去bin目录下的service_template目录下
节点1:
cp DmCSSService ../DmCSSService_dsc0
vi DmCSSService_dsc0
修改DCR_INI_PATH="/dm8/data/dmdcr.ini"
节点2:
cp DmCSSService ../DmCSSService_dsc1
vi DmCSSService_dsc1
修改DCR_INI_PATH="/dmdata/dmdcr.ini"
剩余的DmASMSvrService、DmService,也是如此操作
两个节点,返回配置文件目录,/dm8/data,修改dmdcr.ini
DMDCR_ASM_RESTART_INTERVAL = 10
DMDCR_DB_RESTART_INTERVAL = 30
数字表示秒,即过10秒后拉起。配为0则不拉,需手动拉
然后返回bin目录,执行:
节点1:
./DmCSSService_dsc0 start
节点2:
./DmCSSService_dsc1 start
使用ps -ef | grep dm8,过1分钟后查看dmcss是否正常拉起dmasmsvr和dmserver,正常拉起即可。时间根据实例启动耗时而定,需耐心等待一会。
之后启动,就直接执行这个DmCSSService就行了,dmcss会自动拉起dmasmsvr和dmserver
10、配置DMCSSM监视器(任选一个节点即可)
去配置文件目录,/dmdata
【dmcssm.ini】
vi dmcssm.ini
写入以下内容(注意改ip):
#和 dmdcr_cfg.ini 中的 DCR_OGUID 保持一致
CSSM_OGUID = 63635
#配置所有 CSS 的连接信息,
#和 dmdcr_cfg.ini 中 CSS 配置项的 DCR_EP_HOST 和 DCR_EP_PORT 保持一致
CSSM_CSS_IP = 节点1的ip:9341
CSSM_CSS_IP = 节点2的ip:9343
CSSM_LOG_PATH =/dmdbms/log #监视器日志文件存放路径
CSSM_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
CSSM_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
启动监视器,查看实例情况
./dmcssm ini_path=/dmdata/dmcssm.ini
输入show
最后一个,以 db 为例,inst_status 字段为 OPEN,vtd_status 字段为 WORKING,active 字段为 TRUE 说明 db 服务正常。
11、关闭dsc集群
【后台脚本关闭dsc】
按步骤,先关闭所有集群的数据库服务,可以直接去控制节点关闭,其他节点会跟着关闭。若不放心,那就所有节点都关闭。然后关闭asm,最后关闭css。注意:每台机器上必须等待上一个服务关闭后再继续关闭,不可同时关闭所有服务。css若配置了自动拉起功能,那操作要快一点,以防css拉起。
cd /dmdbms/bin
#先关闭数据库服务
./DmService stop
#然后关闭ASM
./DmASMSvrService stop
#最后关闭CSS
./DmCSSService stop
【监视器关闭dsc】推荐
顾名思义,使用dmcssm监视器关闭dsc,这种方法最适合配置了自动拉起的dsc集群。
## 启动监视器
./dmcssm ini_path=/dmdata/dmcssm.ini
在监视器中, 输入如下内容(带#的那行是注释,不要复制):
## 查看dsc集群状态
show
## 关闭节点组(按组关闭的,GRP_DSC就是组名,执行上方show命令后能看到dmserver的每个组)
ep stop GRP_DSC
## 此时会看到监视器通知CSS把自动拉起功能临时关闭(注意只是临时,dmcss.ini配置文件没有更改),当看到监视器返回“所有*****已退出”时,表示节点都关闭了,继续下一步操作。
## 关闭ASM组(同样也是按组关闭的,执行show命令后能看到asm的每个组)
ep stop GRP_ASM
## 退出监视器
exit
此时就关闭了所有节点的dmserver进程、所有节点的ASM进程,但是此时CSS进程不会关闭(因为它是大哥),只能手动关闭,执行后台脚本关闭即可,每台节点机器都执行。
## 关闭CSS
./DmCSSService stop