启动、关闭流程
DMDSC是基于共享存储的数据库集群系统,包含多个数据库实例,因此,与单节点的达梦数据库不同,DMDSC集群需要在节点间进行同步、协调,才能正常的启动、关闭。启动DMDSC集群之前,必须先启动集群同步服务。
DMASMSVR控制台执行exit命令,会通知所有节点一起退出。dmserver需要手动退出所有节点,没有同步功能;linux环境下DMASMSVR/DMSERVER都监控了操作系统SIGTERM信号,Linux环境执行不带参数的kill命令,DMASMSVR/DMSERVER都能正常退出。
如果DMCSS配置了DMASMSVR/DMSERVER自动拉起命令,可以先启动DMCSS,然后启动DMCSSM,在DMCSSM控制台执行命令“ep startup asm”启动DMASMSVR集群,执行“ep startup dsc”启动dmserver集群(其中asm/dsc为dmasmsvr/dmserver集群的组名)。类似执行“ep stop asm/dsc”可以关闭dmasmsvr/dmserver。
Linux环境中,dmcss/dmasmsvr/dmserver可以配置成操作系统服务,每次开机自动启动,或者通过Linux命令service xxx start/stop/restart完成服务的启动、关闭。服务脚本在达梦安装包里提供,可能还需要根据实际情况修改部分参数才能使用。
故障处理
DMDSC集群出现数据库实例、或者节点硬件故障时,dmserver的Voting disk心跳信息不再更新,DMCSS一旦监控到dmserver发生故障,会马上启动故障处理,各节点dmserver收到故障处理命令后,启动故障处理流程。
在DMDSC故障处理机制下,一旦产生节点故障,登录到故障节点的所有连接将会断开,所有未提交事务将被强制回滚,活动节点上的用户请求可以继续执行,但是一旦产生节点间信息传递(比如向故障节点发起GBS/LBS请求、或者发起remode read请求),当前操作就会被挂起;在DMDSC故障处理完成后,这些被挂起的操作可以继续执行。
DMDSC环境dmserver故障处理包括以下工作
1、暂停所有会话线程、工作线程、日志刷盘线程、检查点线程等,避免故障处理过程中产生并发错误。
2、收集所有节点的Buffer,丢弃无效数据页,获取最新数据页和需要重做故障节点redo日志的数据页信息,并在排查故障节点后重新构造LBG/GBS信息。
3、重做故障节点redo日志。
4、收集所有节点事务信息,重新构造锁对象,并重构相应的LLS/GLS/STV/GTV系统。
5、如果配置有VIP,进行必要的VIP配置操作。
6、控制节点执行故障节点活动事务回滚和故障节点已提交事务修改的PURGE操作。
DMDSC故障处理分为两个阶段:
第一阶段由所有活动节点共同参与,进行全局的信息收集、重构;第二阶段由控制节点执行,将故障节点的活动事务回滚、并purge故障节点已提交的修改。在第一阶段执行期间,数据库实例不提供数据库服务,所有用户请求将被挂起。在第二阶段操作之前,会唤醒所有活动节点,正常提供数据库服务。也就是说故障处理第二阶段的操作与正常的数据库操作在系统内部同时进行。但在第二阶段执行完成之前,DMDSC故障处理扔没有真正结束,再此期间,不能处理节点重加入,也不能处理新的节点故障,如果有新的节点故障会主动中止所有节点。
节点重加入
故障节点恢复正常后,DMCSS会启动节点重加入处理流程,将故障节点重新加入到DMDSC集群中。默认情况下,DMCSS自动监控并处理节点重加入,不需要用户干预;我们也可以通过DMCSSM关闭自动监控功能,改成手动处理节点重加入。