一:failover功能:基于守护进程和监视器两个内在工具实现
守护进程
守护进程提供了数据库监控、故障检测、故障处理、故障恢复等各种功能。
监控数据库实例运行状态、发送状态信息给其他守护进程和所有监视器、并且要接收与解析其他守护进程发送的信息,接收监视器消息并通知实例进行相应操作。
例如,主备切换操作,监视器首先通知待切换主备库的守护进程修改为 Switchover 状态,设置成功以后,其他监视器将不能再进行命令操作。守护进程收到监视器将实例 Mount 的命令,转发到本地实例执行,实例执行完成后返回执行结果。执行结果包含在实例向守护进程发送的消息中,守护进程根据消息中的执行码判断是否执行成功,并响应监视器。
注意守护进程依赖超时机制,即用来判断实例是否故障,也用来判断远程守护进程是否故障,还用来判断监视器是否故障。
单机的自动重启由守护进程检测执行,DMDSC集群的自动重启由dmcss检测执行。
主库故障处理、备库故障处理、故障恢复处理等(守护进程 | 达梦技术文档)
守护进程支持自动与手动切换两种故障切换。
守护进程:
守护进程必须和被守护的数据库实例部署在同一台机器上。
监视器:
监视器用来监控守护系统内守护进程、数据库实例信息,执行用户输入命令、监控实例故障、实现自动切换等。监视器一般配置在数据库实例和守护进程以外的机器上。
数据守护和读写分离集群
DM 数据守护 (Data Watch) 是一种集成化的高可用、高性能数据库解决方案。
DM 数据守护提供多种解决方案,可以配置成实时主备、MPP 主备或读写分离集群。读写分离集群通过配置事务一致模式保证主、备库数据一致性,并配合 DM 数据库管理系统的各种接口(JDBC、DPI 等),将只读操作自动分流到备库,有效降低主库的负载,提升系统吞吐量。
DM 数据守护的主要特性包括:
1.高可用性
主库出现故障时,可以快速将备库切换为主库,继续提供数据库服务,确保数据库服务不中断。切换过程一般在数秒钟之内完成。
2.多种守护模式
提供自动切换和手动切换两种守护模式,满足用户不同需求。其中,配置自动切换的前提是已经部署确认监视器。在提供第三方机器部署确认监视器情况下,可以配置为故障自动切换模式,主库出现故障时,系统自动将备库切换为主库对外提供数据库服务。
3.多种守护类型
守护进程可以配置为全局守护(提供实时主备、MPP 主备、读写分离集群功能)或者本地守护,适应各种应用需求。
4.故障自动重连
配置、使用连接服务名访问数据库,在发生主备库切换后,接口会自动将连接迁移到新的主库上。
5.故障库自动重加入
主库故障,发生主备库切换。故障主库重启后,可以自动切换为 Standby 模式,作为备库重新加入数据守护系统。
共享存储集群
DM 共享存储数据库集群简称 (DMDSC)。DMDSC 允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供。
在 DMASM 自动存储管理方案 集群或 DMDSC 集群中,每个节点都需要配置一个 DMCSS 服务。这些 DMCSS 服务自身也构成一个集群,DMCSS集群中负责监控、管理整个 DMASM 集群和 DMDSC 集群的节点称为控制节点 (controlnode),其他 DMCSS 节点称为普通节点 (normal node)。DMCSS 普通节点不参与 DMASM 集群和 DMDSC 集群管理,当 DMCSS 控制节点故障时,会从活动的普通节点中重新选取一个 DMCSS 控制节点。
DMCSS 工作原理是:在 Voting disk 中,为每个被监控对象 (dmasmsvr、dmserver、DMCSS) 分配一片独立的存储区域,被监控对象定时向 Voting Disk 写入信息(包括时间戳、状态、命令、以及命令执行结果等);DMCSS 控制节点定时从 Voting Disk 读取信息,检查被监控对象的状态变化,启动相应的处理流程;被监控对象只会被动的接收 DMCSS 控制节点命令,执行并响应。
DMCSS 主要功能包括:写入心跳信息、选取 DMCSS 控制节点、选取 DMASM/DMDSC 控制节点、管理被监控对象的启动流程、集群状态监控、节点故障处理、节点重加入等,DMCSS 还可以接收并执行 DMCSSM 指令。
二:负载均衡:基于jdbc接口和客户端实现读写分离
基于独特的字典缓存技术和日志重演技术,备库在 Open 状态下执行数据同步,是真正意义上的热备库;在实现异地容灾的同时,用户可以只读访问备库,执行报表生成、数据备份等功能,减轻主库的系统负载,提高资源利用率。
读写分离集群:
备库全部去执行(即一个试错的过程)由接口层完成,对用户透明。
流程:
1.用户发起数据库连接请求。
2.接口(JDBC、DPI 等)根据服务名配置(在 dm_svc.conf 中进行配置)登录主库。
3.主库挑选一个有效即时备库的 IP/Port 返回给接口。
4.接口根据返回的备库 IP 和 Port 信息,向备库发起一个连接请求。(读写分离集群自动创建,对用户透明)
5.备库返回连接成功信息。
6.接口响应用户数据库连接创建成功。
读写分离集群语句分发流程:
1.接口收到用户的请求。
2.接口优先将 SQL 发送到备库执行。
3.备库执行并返回执行结果。如果接口收到的是备库执行成功消息,则转到第 6 步,如果接口收到的是备库执行失败消息,则转到第 4 步。
4.重新将执行失败的 SQL 发送到主库执行。只要第 3 步中的 SQL 在备库执行失败,则同一个事务后续的所有操作(包括只读操作)都会直接发送到主库执行。
5.主库执行并返回执行结果给接口。一旦主库上执行的写事务提交,则下次继续从第 1 步开始执行。
6.接口响应用户并将执行结果返回给用户。
当一个应用系统中只读事务占绝大多数情况下,可能出现备库高负载、高压力,主库反而比较空闲的情况。为了实现负载均衡,更好地利用主备库的硬件资源,JDBC 等数据库接口提供了配置项,允许将一定比例的只读事务分发到主库执行。因此,用户应该根据主备库的负载情况,灵活调整接口的分发比例 rwPercent 配置项,以获得最佳的数据库性能。
(由于备库作为分担主库的读操作而高负载后,可以采用主为从执行读操作。)
三:虚拟IP:配置应用服务名实现应用透明故障切换
达梦读写分离集群配置应用服务名
服务名配置文件(dm_svc.conf)。
达梦数据库在不同的平台下安装,dm_svc.conf所在目录有所不同。
连接服务名可以在 DM 提供的 JDBC、DPI 等接口中使用,应用连接数据库时指定连接服务名,接口会随机选择一个IP进行连接,如果连接不成功或者服务器状态不正确,则顺序获取下一个IP进行连接,直至连接成功或者遍历了所有IP。