DM8两节点MPP部署
MPP集群:
MPP (Massively Parallel Processing),大规模并行处理系统,这样的系统是由许多松耦合的处理单元组成的,要注意的是这里指的是处理单元而不是处理器。每个单元内的CPU都有自己私有的资源,如总线,内存,硬盘等。在每个单元内都有操作系统和管理数据库的实例复本。这种结构最大的特点在于不共享资源。
通常情况下,MPP系统因为要在不同处理单元之间传送信息,所以它的效率要比SMP要差一点,但是这也不是绝对的,因为MPP系统不共享资源,因此对它而言,资源比SMP要多,当需要处理的事务达到一定规模时,MPP的效率要比SMP好。
MPP 主备
就是在 MPP 集群的基础上,为每一个 MPP 节点配置一套实时主备系统,这些 实时主备系统一起构成了 MPP 主备系统。MPP 主备系统包含多个守护进程组,每个守护进 程组都是一个相对独立的实时主备系统,具备实时主备的基本功能,可以进行主备切换、备 库接管等操作。
MPP 主备的主要目的
是为 DM MPP 集群提供数据可靠性保障,备库只做数据容灾、备 份,MPP 备库并不是 MPP 集群的一部分,只是某个 MPP 节点(主库)的镜像。MPP 备库不 参与 MPP 操作,与其他 MPP 备库之间也没有任何关系,MPP 备库只能以单节点方式提供只 读服务,但不提供全局的 MPP 只读服务。
MPP 主备系统中,一个守护进程 dmwatcher 可以监控、管理多个守护进程组的数据库 实例。一般来说,一台物理机器上,可以部署 1 个 MPP 节点的主库和多个其他 MPP 节点的 备库,充分利用硬件资源,节省投资。
- 部署前准备
A机器 | B机器 | |||
业务IP | 192.168.163.166 | 192.168.163.167 | ||
心跳IP | 192.168.157.129 | 192.168.163.180 | ||
实例名 | MPP1_01 | MPP1_02B | MPP1_02 | MPP1_01B |
实例端口 | 5236 | 5237 | 5236 | 5237 |
MAL端口 | 5336 | 5337 | 5336 | 5337 |
MAL守护进程端口 | 5436 | 5437 | 5436 | 5437 |
守护进程端口 | 5536 | 5537 | 5536 | 5537 |
OGUID | 45331 | 45332 | 45332 | 45331 |
守护组 | GMPP1_01 | GMPP1_02 | GMPP1_02 | GMPP1_01 |
安装目录 | /home/data/dmdbms | |||
实例目录 | /data/ | |||
归档上限 | 51200 | |||
确认监视器IP | 192.168.163.167 |
说明:具体规划及部署方式以现场环境为准。
心跳网络方面:①集群间的心跳网络要走数据,最好走两个交换机,来实现冗余和负载均衡。②需要把服务器多个心跳网卡绑定为一个逻辑网卡来使用(比如bond方式)。③交换机速度建议至少为千兆。
存储方面:①需要在每台机器上挂在独立存储,其中主机所在机器挂载的存储建议大一些。②需要格式化好,且所有机器挂载路径保持一致。③在空间不够用时,要求支持在挂载目录上直接进行扩充。④文件系统建议使用ext4。
心跳网络方面:①关闭其中一台交换机或者模拟其中一条线路故障,是否能做到网络方面的冗余。②测试心跳网络的稳定性,会不会出现断连或者丢包等情况。
存储方面:反复重启集群机器,检查存储是否会出现只读、脱挂、挂载路径是否会发生改变等情况。
--初始化实例
./dminit PATH=/opt/dmdbms/data/ DB_NAME=MPP1_01 INSTANCE_NAME=MPP1_01 PORT_NUM=5236 PAGE_SIZE=32 LOG_SIZE=2048
--启动服务
./dmserver /home/dmdba/dmdbms/data/MPP1_01/dm.ini
--开启归档
直接在dm.ini 中改动
--备份数据
SQL> BACKUP DATABASE BACKUPSET '/data/MPP1_01/bak/BACKUP_FILE';
--修改dm.ini
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
SQL> SP_SET_PARA_VALUE (2,'MPP_INI',1);
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
关闭前台实例服务
Vim dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/MPP1_01/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = MPP1_01B #实时归档目标实例名
MAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定MAL链路断开的时间
MAL_TEMP_PATH = /data/malpath/MPP1_01/ #临时文
件目录
MAL_BUF_SIZE = 512 #单个MAL缓存大小,单位MB
MAL_SYS_BUF_SIZE = 2048 #MAL总大小限制,单位MB
MAL_COMPRESS_LEVEL = 0 #MAL消息压缩等级,0表示不压>缩
[MAL_INST1]
MAL_INST_NAME = MPP1_01 #实例名,和 dm.ini中INSTANCE_NAME一致
MAL_HOST = 192.168.163.166 #MAL系统监听TCP连接的IP地址
MAL_PORT = 5336 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.157.129 #实例的对外服>务IP地址
MAL_INST_PORT = 5236 #实例对外服务端口,和dm.ini中PORT_NUM一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程TCP连接>的端口
[MAL_INST2]
MAL_INST_NAME = MPP1_01B
MAL_HOST = 192.168.163.167
MAL_PORT = 5337
MAL_INST_HOST = 192.168.163.180
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
[MAL_INST3]
MAL_INST_NAME = MPP1_02
MAL_HOST = 192.168.163.167
MAL_PORT = 5336
MAL_INST_HOST = 192.168.163.180
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST4]
MAL_INST_NAME = MPP1_02B
MAL_HOST = 192.168.163.166
MAL_PORT = 5337
MAL_INST_HOST = 192.168.157.129
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
Vim dmmpp.ini
[service_name1]
mpp_seq_no = 0
mpp_inst_name = MPP1_01
[service_name2]
mpp_seq_no = 1
mpp_inst_name = MPP1_02
/home/dmdba/dmdbms/bin/dmctlcvt t2c /data/MPP1_01/dmmpp.ini /data/MPP1_01/dmmpp.ctl
Vim dmwatcher.ini
[GMPP1_01]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #故障手动切换模式
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一OGUID值
INST_INI =/data/MPP1_01/dm.ini #dm.ini文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
[GMPP1_02]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 20
--拷贝实例到B机器
scp -r /opt/dmdbms/data/MPP1_01 dmdba@192.168.163.167:/opt/dmdbms/data/
./dm_service_installer.sh -t dmserver -p MPP1_01 -dm_ini /data/MPP1_01/dm.ini -m mount
./dm_service_installer.sh -t dmwatcher -p MPP1_01 -watcher_ini /data/MPP1_01/dmwatcher.ini
备注:删除自启
./dm_service_uninstaller.sh -n DmServiceMPP1_01
./dm_service_uninstaller.sh -n DmWatcherServiceMPP1_01
--初始化实例
/home/dmdba/dmdbms/bin/dminit PATH=/data/ DB_NAME=MPP1_02 INSTANCE_NAME=MPP1_02 PORT_NUM=5236 PAGE_SIZE=32 LOG_SIZE=2048
--启动服务
./dmserver /data/MPP1_02/dm.ini
--开启归档
/home/dmdba/dmdbms/bin/disql SYSDBA/SYSDBA
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/data/MPP1_02/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
--备份数据
SQL> BACKUP DATABASE BACKUPSET '/data/MPP1_02/bak/BACKUP_FILE';
--修改dm.ini
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
SQL> SP_SET_PARA_VALUE (2,'MPP_INI',1);
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
关闭前台实例服务
vim /data/MPP1_02/dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/MPP1_02/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = MPP1_02B #实时归档目标实例名
MAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定MAL链路断开的时间
MAL_TEMP_PATH = /data/malpath/MPP1_02/ #临时文
件目录
MAL_BUF_SIZE = 512 #单个MAL缓存大小,单位MB
MAL_SYS_BUF_SIZE = 2048 #MAL总大小限制,单位MB
MAL_COMPRESS_LEVEL = 0 #MAL消息压缩等级,0表示不压>缩
[MAL_INST1]
MAL_INST_NAME = MPP1_01 #实例名,和 dm.ini中INSTANCE_NAME一致
MAL_HOST = 192.168.163.166 #MAL系统监听TCP连接的IP地址
MAL_PORT = 5336 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.157.129 #实例的对外服>务IP地址
MAL_INST_PORT = 5236 #实例对外服务端口,和dm.ini中PORT_NUM一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程TCP连接>的端口
[MAL_INST2]
MAL_INST_NAME = MPP1_01B
MAL_HOST = 192.168.163.167
MAL_PORT = 5337
MAL_INST_HOST = 192.168.163.180
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
[MAL_INST3]
MAL_INST_NAME = MPP1_02
MAL_HOST = 192.168.163.167
MAL_PORT = 5336
MAL_INST_HOST = 192.168.163.180
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST4]
MAL_INST_NAME = MPP1_02B
MAL_HOST = 192.168.163.166
MAL_PORT = 5337
MAL_INST_HOST = 192.168.157.129
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
vim /home/dmdba/dmdbms/data/MPP1_02/dmmpp.ini
[service_name1]
mpp_seq_no = 0
mpp_inst_name = MPP1_01
[service_name2]
mpp_seq_no = 1
mpp_inst_name = MPP1_02
/home/dmdba/dmdbms/bin/dmctlcvt t2c /data/MPP1_02/dmmpp.ini /data/MPP1_02/dmmpp.ctl
vim /home/dmdba/dmdbms/data/MPP1_02/dmwatcher.ini
[GMPP1_01]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #故障手动切换模式
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一OGUID值
INST_INI = data/MPP1_01/dm.ini #dm.ini文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
[GMPP1_02]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45332
INST_INI = /data/MPP1_02/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
--拷贝实例到A机器
scp -r /opt/dmdbms/data/MPP1_02 dmdba@192.168.163.166: /data
./dm_service_installer.sh -t dmserver -p MPP1_02 -dm_ini /data/MPP1_02/dm.ini -m mount
./dm_service_installer.sh -t dmwatcher -p MPP1_02 -watcher_ini /data/MPP1_02/dmwatcher.ini
备注:删除自启
./dm_service_uninstaller.sh -n DmServiceMPP1_02
./dm_service_uninstaller.sh -n DmWatcherServiceMPP1_02
Vim /data/MPP1_01/dm.ini
INSTANCE_NAME = MPP1_01B #数据库实例名
PORT_NUM = 5237 #数据库实例监听端口
Vim /data/MPP1_01/dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/MPP1_01/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = MPP1_01 #实时归档目标实例名
与A机器MPP1_01的dmmal.ini、dmmpp.ini、dmmpp.ctl相同
./dm_service_installer.sh -t dmserver -p MPP1_01B -dm_ini /data/MPP1_01/dm.ini -m mount
备注:删除自启
./dm_service_uninstaller.sh -n DmServiceMPP1_01B
./dmrman
CTLSTMT="RESTORE DATABASE '/data/MPP1_01/dm.ini' FROM BACKUPSET '/data/MPP1_01/bak/BACKUP_FILE'"
CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/MPP1_01/dm.ini' FROM BACKUPSET '/opt/dmdbms/data/MPP1_01/bak/BACKUP_FILE'"
CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/MPP1_01/dm.ini' UPDATE DB_MAGIC"
Vim /data/MPP1_02/dm.ini
INSTANCE_NAME = MPP1_02B #数据库实例名
PORT_NUM = 5237 #数据库实例监听端口
Vim /data/MPP1_02/dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/MPP1_02/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = MPP1_02 #实时归档目标实例名
与B机器MPP1_02的dmmal.ini、dmmpp.ini、dmmpp.ctl相同
./dm_service_installer.sh -t dmserver -p MPP1_02B -dm_ini /data/MPP1_02/dm.ini -m mount
备注:删除自启
./dm_service_uninstaller.sh -n DmServiceMPP1_02B
./dmrman
CTLSTMT="RESTORE DATABASE '/data/MPP1_02/dm.ini' FROM BACKUPSET '/data/MPP1_02/bak/BACKUP_FILE'"
CTLSTMT="RECOVER DATABASE '/data/MPP1_02/dm.ini' FROM BACKUPSET ' /data/MPP1_02/bak/BACKUP_FILE'"
CTLSTMT="RECOVER DATABASE ' /data/MPP1_02/dm.ini' UPDATE DB_MAGIC"
1、在各节点数据库的bin目录中 存放非确认监视器配置文件。
2、在确认监视器机器上(非集群节点) 注册确认监视器自启服务。
Vim /dmmonitor.ini
MON_DW_CONFIRM = 0 #0为非确认,1为确认
MON_LOG_PATH = /data/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位MB
[GMPP1_01]
MON_INST_OGUID = 45331 #组GMPP1_01的唯一OGUID 值
MON_DW_IP = 192.168.1.1:5436 #IP对应MAL_HOST,PORT对应MAL_DW_PORT
MON_DW_IP = 192.168.1.2:5437
[GMPP1_02]
MON_INST_OGUID = 45332 #组GMPP1_02的唯一OGUID 值
MON_DW_IP = 192.168.1.2:5436
MON_DW_IP = 192.168.1.1:5437
./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini
备注:删除自启
./dm_service_uninstaller.sh -n DmMonitorServiceMonitor
命令 | 含义 |
list | 查看守护进程的配置信息 |
show mpp | 查看MPP节点信息 |
tip | 查看系统当前运行状态 |
login | 登录监视器 |
logout | 退出登录 |
choose switchover 守护组 | 主机正常:查看可切换为主机的实例列表 |
switchover 守护组.实例名 | 主机正常:使用指定组的指定实例,切换为主机 |
choose takeover 守护组 | 主机故障:查看可切换为主机的实例列表 |
takeover 守护组.实例名 | 主机故障:使用指定组的指定实例,切换为主机 |
choose takeover force 守护组 | 强制切换:查看可切换为主机的实例列表 |
takeover force 守护组.实例名 | 强制切换:使用指定组的指定实例,切换为主机 |
startup dmwatcher all | 启动所有组的守护进程监控功能 |
stop dmwatcher all | 关闭所有组的守护进程监控功能 |
startup instance all | 启动所有组的实例 |
stop instance all | 关闭所有组的实例 |
主机故障后,在备机执行SELECT SF_DW_CHECK_TAKEOVER();【1:可接管 0:不可接管】 |
- A机器-MPP1_01
./DmServiceMPP1_01 start
./disql SYSDBA/SYSDBA@172.16.1.1:5236
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE PRIMARY;
- B机器-MPP1_02
./DmServiceMPP1_02 start
./disql SYSDBA/SYSDBA
SQL> SP_SET_OGUID(45332);
SQL> ALTER DATABASE PRIMARY;
- A机器-MPP1_02B
./DmServiceMPP1_02B start
./disql SYSDBA/SYSDBA
SQL> SP_SET_OGUID(45332);
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> ALTER DATABASE STANDBY;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
- B机器-MPP1_01B
./DmServiceMPP1_01B start
./disql SYSDBA/SYSDBA
SQL> SP_SET_OGUID(45331);
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> ALTER DATABASE STANDBY;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
A机器:./DmWatcherServiceMPP1_01 start
B机器:./DmWatcherServiceMPP1_02 start
./DmMonitorServiceMonitor start
前台启动:./dmmonitor /home/dmdba/dmdbms/bin/dmmonitor.ini
- 启动
A机器:./DmWatcherServiceMPP1_01 start
B机器:./DmWatcherServiceMPP1_02 start
- 停止
A机器:./DmWatcherServiceMPP1_01 stop
B机器:./DmWatcherServiceMPP1_02 stop
A机器:./DmServiceMPP1_01 stop
B机器:./DmServiceMPP1_02 stop
B机器:./DmServiceMPP1_01B stop
A机器:./DmServiceMPP1_02B stop
- A机器
vi /home/dmdba/dmdbms/bin/stop.sh
/home/dmdba/dmdbms/bin/DmWatcherServiceMPP1_01 stop;
/home/dmdba/dmdbms/bin/DmServiceMPP1_01 stop;
/home/dmdba/dmdbms/bin/DmServiceMPP1_02B stop;
chmod 777 /home/dmdba/dmdbms/bin/stop.sh
- B机器
vi /home/dmdba/dmdbms/bin/stop.sh
/home/dmdba/dmdbms/bin/DmWatcherServiceMPP1_02 stop;
/home/dmdba/dmdbms/bin/DmServiceMPP1_02 stop;
/home/dmdba/dmdbms/bin/DmServiceMPP1_01B stop;
chmod 777 /home/dmdba/dmdbms/bin/stop.sh
- 停止服务
A机器:/home/dmdba/dmdbms/bin/stop.sh
B机器:/home/dmdba/dmdbms/bin/stop.sh