守护主备集群与读写分离集群的搭建

守护主备集群与读写分离集群的搭建 目录一、概念1、什么是守护主备集群2、什么是读写分离集群二、集群规划三、机器1的配置主机1、初始化主机实例2、开启归档与备份3、修改dm.ini配置文件4、修改dmarch.ini文件5、创建dmmal.ini文件6、创建dmwatcher.ini文件7、拷贝备份文件8、注册服务四、机器2的配置备机1、初始化实例2、恢复数据3、配置/创建相关文件4、注册服务五、监视器的配置1、配置监视器2、主备切换六、读写分离搭建七、总结一、概念1、什么是守护主备集群定义由多台机器组成的“主-备”架构。主机对外提供全部读写服务备机实时同步数据。一旦主机发生宕机或网络中断备机将在秒级内切换为主节点接管业务。核心机制心跳检测主备节点通过专用链路持续通信判断节点是否存活数据同步主机将业务产生的REDO日志实时传输给备机确保主备节点数据一致故障切换当心跳超时备机自动升级为主机并继续对外提供服务局限备机平时处于“只读”或不可用状态资源利用率较低仅50%。只解决“机器坏了不停服务”的问题无法解决高并发下的查询瓶颈。2、什么是读写分离集群定义主库负责写事务增删改从库负责读事务查。通过读写分离模式极大提升系统整体吞吐量。核心机制流量分发应用程序/中间件根据SQL类型将写操作发往主库读操作发往从库。总结读写分离集群 守护主备集群 SQL自动路由它是在保障高可用的基础上实现了读写负载均衡。二、集群规划本文实战采用经典的两节点架构一台主机 一台备机提前规划好IP、端口及实例名。机器1机器2业务IP192.168.159.131192.168.159.132心跳IP192.168.159.131192.168.159.132实例名DMOA_MDMOA_S实例端口52365236MAL端口53365336MAL守护进程端口54365436守护进程端口55365536OGUID4533145331守护组GRP1GRP1安装目录/home/dmdba/dmdbms/home/dmdba/dmdbms实例目录/dmdata/data/dmdata/data三、机器1的配置主机1、初始化主机实例进入达梦bin目录下使用dminit工具初始化数据库。cd /home/dmdba/dmdbms/bin./dminit PATH/dmdata/data INSTANCE_NAMEDMOA_M PAGE_SIZE32 EXTENT_SIZE32 LOG_SIZE2048 SYSDBA_PWD****** SYSAUDITOR_PWD******2、开启归档与备份首先启动前台服务然后通过disql工具开启归档与备份。./dmserver /dmdata/data/DAMENG/dm.ini开启本地归档。./disql SYSDBA/*****1localhost:5236SQL ALTER DATABASE MOUNT; # 将数据库挂载SQL ALTER DATABASE ARCHIVELOG; # 将数据库改为归档模式SQL ALTER DATABASE ADD ARCHIVELOG DEST/dmdata/data/DAMENG/arch, TYPELOCAL, FILE_SIZE1024, SPACE_LIMIT51200; # 开启本地归档SQL ALTER DATABASE OPEN; # 将数据库还原为OPEN模式进行全局备份用于备节点数据同步。SQL BACKUP DATABASE BACKUPSET /dmdata/data/DAMENG/bak/BACKUP_FILE;3、修改dm.ini配置文件通过数据库内置存储过程修改dm.ini参数其中MAL_INI1开启MAL通信链路。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,RLOG_SEND_APPLY_MON,64);4、修改dmarch.ini文件归档配置是本地归档实时归档本地归档用于本地日志留存实时归档用于将日志实时推送给备机DMOA_S。使用如下命令编辑归档配置文件vi /dmdata/data/DAMENG/dmarch.ini总体归档模式为高性能定义本地归档与实时归档本地归档填写归档路径实时归档填写目标实例。ARCH_WAIT_APPLY 0 # 0高性能 1事务一致[ARCHIVE_LOCAL]ARCH_TYPE LOCAL # 本地归档类型ARCH_DEST /dmdata/data/DAMENG/arch/ # 本地归档存放路径ARCH_FILE_SIZE 1024 # 单个归档大小单位 MBARCH_SPACE_LIMIT 51200 # 归档上限单位 MB[ARCHIVE_REALTIME1]ARCH_TYPE REALTIME # 实时归档类型ARCH_DEST DMAO_S # 实时归档目标实例名5、创建dmmal.ini文件MAL是达梦集群的内部通信协议。此处定义MAL链路信息、主备节点的IP、MAL端口以及守护进程监听端口相当于构建一条集群专用的“数据传输公路”。vi /dmdata/data/DAMENG/dmmal.iniMAL_CHECK_INTERVAL 10 # MAL链路检测时间间隔MAL_CONN_FAIL_INTERVAL 10 # 判定MAL链路断开的时间MAL_TEMP_PATH /dmdata/data/malpath/ # 临时文件目录MAL_BUF_SIZE 512 # 单个MAL缓存大小MAL_SYS_BUF_SIZE 2048 # MAL 总大小限制MAL_COMPRESS_LEVEL 0 # MAL 消息压缩等级0不压缩[MAL_INST1]MAL_INST_NAME DMOA_M # 实例名MAL_HOST 192.168.159.131 # MAL系统监听TCP连接的IP地址MAL_PORT 5336 # MAL系统监听TCP连接的端口MAL_INST_HOST 192.168.159.131 # 实例的对外服务IP地址MAL_INST_PORT 5236 # 实例对外服务端口MAL_DW_PORT 5436 # 守护进程监听TCP连接的端口MAL_INST_DW_PORT 5536 # 实例监听守护进程TCP连接的端口[MAL_INST2]MAL_INST_NAME DMOA_SMAL_HOST 192.168.159.132MAL_PORT 5336MAL_INST_HOST 192.168.159.132MAL_INST_PORT 5236MAL_DW_PORT 5436MAL_INST_DW_PORT 55366、创建dmwatcher.ini文件守护进程是实现自动故障切换的大脑。配置中DW_MODEAUTO表示开启自动切换INST_OGUID则是集群的唯一标识需与备机一致守护进程通过该ID识别合法成员。vi /dmdata/data/DAMENG/dmwatcher.ini[GRP1]DW_TYPE GLOBAL # 全局守护类型DW_MODE AUTO # MANUAL故障手切AUTO故障自切DW_ERROR_TIME 20 # 远程守护进程故障认定时间INST_ERROR_TIME 20 # 本地实例故障认定时间INST_RECOVER_TIME 60 # 主库守护进程启动恢复的间隔时间INST_OGUID 45331 # 守护系统唯一 OGUID 值INST_INI /dmdata/data/DAMENG/dm.ini # dm.ini 文件路径INST_AUTO_RESTART 1 # 打开实例的自动启动功能INST_STARTUP_CMD /home/dmdba/dmdbms/bin/dmserverRLOG_SEND_THRESHOLD 0 # 指定主库发送日志到备库的时间阈值RLOG_APPLY_THRESHOLD 0 # 指定备库重演日志的时间阈值7、拷贝备份文件将前面备份的全量文件拷贝到机器2作为备机恢复的基础。scp -r dmdata/data/DAMENG/bak/BACKUP_FILE dmdba192.168.159.132:/dmdata/data/DAMENG/bak8、注册服务/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMOA_M -dm_ini /dmdata/data/DAMENG/dm.ini -m mount/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini四、机器2的配置备机1、初始化实例cd /home/dmdba/dmdbms/bin./dminit PATH/dmdata/data INSTANCE_NAMEDMOA_S PAGE_SIZE32 EXTENT_SIZE32 LOG_SIZE2048 SYSDBA_PWD****** SYSAUDITOR_PWD******2、恢复数据备机的数据恢复分为三个步骤还原RESTORE将主机拷贝过来的全量备份文件中的数据页写入备机的数据文件./dmrman CTLSTMTRESTORE DATABASE /dmdata/data/DAMENG/dm.ini FROM BACKUPSET /dmdata/data/DAMENG/bak/BACKUP_FILE恢复RECOVER将备份集中的归档日志Redo日志重演到数据文件中使备库与主库在备份完成时刻的状态完全一致./dmrman CTLSTMTRECOVER DATABASE /dmdata/data/DAMENG/dm.ini FROM BACKUPSET /dmdata/data/DAMENG/bak/BACKUP_FILE更新魔数UPDATE MAGIC将备库的数据库魔数与备份文件中的魔数更新为一致./dmrman CTLSTMTRECOVER DATABASE /dmdata/data/DAMENG/dm.ini UPDATE DB_MAGIC3、配置/创建相关文件dm.ini、dmmal.ini、dmwatcher.ini这三个文件与机器1完全相同。dmarch.ini中的实时归档需要修改归档目标为主库实例名DMOA_MARCH_WAIT_APPLY 0[ARCHIVE_LOCAL]ARCH_TYPE LOCALARCH_DEST /dmdata/data/DAMENG/arch/ARCH_FILE_SIZE 1024ARCH_SPACE_LIMIT 51200[ARCHIVE_REALTIME1]ARCH_TYPE REALTIMEARCH_DEST DMAO_M4、注册服务/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMOA_S -dm_ini /dmdata/data/DAMENG/dm.ini -m mount/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini所有配置完成后依次启动主机和备机的数据库实例与守护进程。建议先启动数据库实例再启动守护进程确保守护进程能够正确识别实例的初始状态。/home/dmdba/dmdbms/bin/DmServiceDMOA_M start/home/dmdba/dmdbms/bin/DmServiceDMOA_S start/home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start五、监视器的配置1、配置监视器监视器负责监控集群所有节点的运行状态并在主机故障时协调备机执行自动切换。建议在第三台独立机器上部署监视器vi /home/dmdba/dmdbms/bin/dmmonitor.iniMON_DW_CONFIRM 1 # 0非确认故障手切 1确认故障自切MON_LOG_PATH ../log # 监视器日志文件存放路径MON_LOG_INTERVAL 60 # 每隔 60s 定时记录系统信息到日志文件MON_LOG_FILE_SIZE 512 # 单个日志大小单位 MBMON_LOG_SPACE_LIMIT 2048 # 日志上限单位 MB[GRP1]MON_INST_OGUID 45331 # 组GRP1的唯一OGUID值MON_DW_IP 192.168.159.131:5436 # 机器1的心跳IP和守护进程监听端口MON_DW_IP 192.168.159.132:5436 # 机器2的心跳IP和守护进程监听端口通过前台方式启动cd /home/dmdba/dmdbms/bin./dmmonitor ./dmmonitor.ini正常启动后监视器界面会显示类似如下信息也可注册为后台服务运行/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini/home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start2、主备切换守护主备集群的核心价值在于自动故障切换这里可以模拟主机宕机来验证这一能力。在机器1上手动停止数据库服务与守护进程触发故障检测/home/dmdba/dmdbms/bin/DmServiceDMOA_M stophome/dmdba/dmdbms/bin/DmWatcherServiceWatcher stop此时备机守护进程在DW_ERROR_TIME时间内监测不到主机心跳监视器与备机协商后将备机DMOA_S升为新主机角色从STANDBY切换到PRIMARY。原主机DMOA_M手动恢复并重新加入集群后它会被守护系统识别并降为备机作为新主机的同步副本。六、读写分离搭建前面完成了守护主备集群搭建读写分离集群是在此基础上在客户端应用的配置文件添加如下内容vi /etc/dm_svc.confTIME_ZONE(480)LANGUAGE(cn)# 定义集群服务名DMRW(192.168.159.131:5236,192.168.159.132:5236,172.16.1.3:5236)[DMRW]LOGIN_MODE(1) # 强制连接主库RW_SEPARATE(1) # 开启读写分离RW_PERCENT(0) # 完全读写分离SWITCH_TIMES(60) # 切换尝试次数SWITCH_INTERVAL(1000) # 切换间隔七、总结1、文章介绍了守护主备集群与读写分离集群的完整搭建流程2、配置确认监视器防止因网络分区导致集群出现脑裂3、更多细节及高级配置请参阅达梦官方文档https://eco.dameng.com