达梦实现高可用性的实现(failover功能/负载均衡/虚拟ip透明切换)

news/2024/7/10 2:59:45 标签: 负载均衡, tcp/ip, 网络, 服务器, 数据库

达梦实现高可用性的实现(failover功能/负载均衡/虚拟ip透明切换)

    • 一:failover功能:基于守护进程和监视器两个内在工具实现
        • 守护进程
        • 监视器:
        • 数据守护和读写分离集群
        • 共享存储集群
    • 二:负载均衡:基于jdbc接口和客户端实现读写分离
    • 三:虚拟IP:配置应用服务名实现应用透明故障切换

达梦支持的连接管理工具作用
守护进程 (dmwatcher)监控数据库实例的运行状态和主备库数据同步情况,在出现故障时启动各种处理预案
监视器(dmmonitor)监控守护系统内守护进程、数据库实例信息,执行用户输入命令、监控实例故障、实现自动切换等
DM web版数据库管理工具(DEM)DM web版数据库管理工具(DEM)提供数据守护的图形化搭建与管理功能
达梦集群同步服务DMCSS写入心跳信息、选举 DMCSS 控制节点、选取 DMASM/DMDSC 控制节点、管理被监控对象的启动流程、集群状态监控、节点故障处理、节点重加入等
基于jdbc接口和客户端实现读写分离负载均衡,集群组件,通过客户端来实现读、写事务的自动分离,读事务在备机执行,写事务在主机执行,减轻主机的负载
Jdbc接口加配置应用服务名文件实现透明故障切换

一: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。


http://www.niftyadmin.cn/n/50013.html

相关文章

Map和TreeMap的区别 1.测试Map中插入整形后,values()是否是字典序?答案是否 2.TreeMap用于跨服奖励配置查找

情景:配置的实现是:Map,然后插入sn,然后将values()转为List让程序使用,由于sn都是整形的,那么findAll()是有序的吗? 例子1:测试下 package org.example.TestSet;import com.google…

【代码随想录训练营】【Day07】第三章|哈希表|454.四数相加II|383. 赎金信|15. 三数之和|18. 四数之和|总结

454.四数相加II 题目详细:LeetCode.454 四数相加的解题思路很简单,其解题过程可以看作是先计算两个小的数组的两数之和,再整体计算一个大的两数之和的过程: 将nums1和nums2作为组合A、nums3和nums4作为一组合B定义一个Map&…

uni-app低成本封装一个取色器组件

在uni-ui中找不到对应的工具 后面想想也是 移动端取色干什么&#xff1f; 没办法 也挂不住特殊需求 因为去应用市场下载 这总东西 又不是很有必要 那么 下面这个组件或许能解决您的烦恼 <template><view class"content"><view class"dialog&…

ReentrantReadWriteLock、StampedLock

ReentrantLock、ReentrantReadWriteLock、StampedLock 读写锁 一个资源可以被多个读线程访问&#xff0c;或者被一个写线程访问&#xff0c;但是不能同时存在读写线程。 小口诀&#xff1a;读写互斥&#xff0c;读读共享 锁的演变 无锁-----> 独占锁----->读写锁---…

YSP的UI界面设计

文章目录一、准备工作二、UI设计1.QPushButton&#xff1a;三、遇到的bug一、准备工作 1.MSVC和MinGW上编译的项目&#xff0c;不能用另一个编译器进行编译 2.若要使用MSVC编译器&#xff0c;需要下载对应版本的VS 见此篇&#xff1a;https://blog.csdn.net/Copperxcx/article…

补天平台安全问题收录情况分享记录

声明 本文是学习2017年上半年 补天平台漏洞收录分析报告. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 补天平台及补天白帽大会介绍 “补天平台”&#xff0c;成立于2013年3月&#xff0c;全称为“补天漏洞响应平台”。平台旨在收集散落在民间的安…

互联网摸鱼日报(2023-02-09)

互联网摸鱼日报&#xff08;2023-02-09&#xff09; InfoQ 热门话题 ChatGPT进军B端&#xff1f;消息称微软将允许企业创建定制版ChatGPT Meta被曝向管理人员下“最后通牒”&#xff1a;要么加大产出&#xff0c;要么离职 2023年前端十大Web发展趋势 2023年构建前端应用时应…

你可能还不知道的 console.log 替代品

通过使用 javascript 对象的破坏能力&#xff0c;您可以这样做&#xff1a;const{ log } console; log("hi"); log("testing");你可以将log函数更改为您想要的任何其他名称&#xff0c;如下所示&#xff1a;const{log: myLog } console; myLog("hi&qu…