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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 达梦实现高可用性的实现(failover功能/负载均衡/虚拟ip透明切换)

微信截图_20230519025848.png


一: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.接口响应用户数据库连接创建成功。

12fb3ab98817412baee46a9f8828dd07.png

读写分离集群语句分发流程:


1.接口收到用户的请求。

2.接口优先将 SQL 发送到备库执行。

3.备库执行并返回执行结果。如果接口收到的是备库执行成功消息,则转到第 6 步,如果接口收到的是备库执行失败消息,则转到第 4 步。

4.重新将执行失败的 SQL 发送到主库执行。只要第 3 步中的 SQL 在备库执行失败,则同一个事务后续的所有操作(包括只读操作)都会直接发送到主库执行。

5.主库执行并返回执行结果给接口。一旦主库上执行的写事务提交,则下次继续从第 1 步开始执行。

6.接口响应用户并将执行结果返回给用户。

cb3598887e3544f88dcb785713391417.png

当一个应用系统中只读事务占绝大多数情况下,可能出现备库高负载、高压力,主库反而比较空闲的情况。为了实现负载均衡,更好地利用主备库的硬件资源,JDBC 等数据库接口提供了配置项,允许将一定比例的只读事务分发到主库执行。因此,用户应该根据主备库的负载情况,灵活调整接口的分发比例 rwPercent 配置项,以获得最佳的数据库性能。

(由于备库作为分担主库的读操作而高负载后,可以采用主为从执行读操作。)


三:虚拟IP:配置应用服务名实现应用透明故障切换


达梦读写分离集群配置应用服务名

服务名配置文件(dm_svc.conf)。

达梦数据库在不同的平台下安装,dm_svc.conf所在目录有所不同。

连接服务名可以在 DM 提供的 JDBC、DPI 等接口中使用,应用连接数据库时指定连接服务名,接口会随机选择一个IP进行连接,如果连接不成功或者服务器状态不正确,则顺序获取下一个IP进行连接,直至连接成功或者遍历了所有IP。


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3天前
|
弹性计算 tengine 负载均衡
slb高可用性
【11月更文挑战第4天】
15 1
|
3月前
|
负载均衡 网络协议 算法
【揭秘】IP负载均衡背后的神秘力量:如何让网站永不宕机?揭秘四大核心技术,解锁高可用性的秘密通道!
【8月更文挑战第19天】负载均衡技术保障互联网服务的高可用性和可扩展性。它像交通指挥官般按策略分配用户请求至服务器集群,提高响应速度与系统稳定性。本文轻松介绍IP负载均衡的工作原理、算法(如轮询、最少连接数)及实现方法,通过示例展示基于四层负载均衡的设置步骤,并讨论健康检查和会话保持的重要性。负载均衡是构建高效系统的关键。
47 2
|
16天前
|
弹性计算 运维 监控
SLB-Backend的高可用性
【10月更文挑战第19天】
30 5
|
3月前
|
负载均衡 网络协议 中间件
IP负载均衡技术
【8月更文挑战第17天】IP负载均衡技术
52 4
|
3月前
|
负载均衡 jenkins 应用服务中间件
大规模部署下的 Jenkins 高可用性与负载均衡
【8月更文第31天】随着软件开发流程的加速,持续集成/持续交付(CI/CD)工具的重要性日益凸显。Jenkins 作为最受欢迎的 CI/CD 平台之一,为企业提供了强大的自动化构建和部署功能。然而,在大规模部署场景下,单一的 Jenkins 实例可能无法满足高可用性和性能的需求。本文将探讨如何设计和实施 Jenkins 高可用集群,以支持大型组织的需求,并通过负载均衡技术来提高系统的稳定性和响应速度。
254 0
|
3月前
|
负载均衡 Cloud Native 容灾
阿里云负载均衡SLB价格_ALB、NLB和CLB区别_负载均衡功能和使用场景说明
阿里云负载均衡SLB分为应用型ALB、网络型NLB及传统型CLB。ALB与NLB仅支持按量付费,而CLB则提供包年包月和按量付费选项。ALB专长于7层HTTP/HTTPS/QUIC协议处理,支持丰富的内容路由功能;NLB聚焦于4层TCP/UDP/TCPSSL协议,擅长处理大规模并发连接。两者均基于NFV技术,支持自动弹性伸缩,并与云原生环境如ACK/SAE/K8S深度集成。此外,SLB提供多协议支持、多级容灾、安全防护等功能,确保服务的高可用性和安全性。具体收费方面,ALB的基础版实例费为0.049元/小时起,NLB实例费限时免费,两者还需支付性能容量单位LCU费及公网网络费(仅公网实例)
|
4月前
|
负载均衡 监控 Kubernetes
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
|
6月前
|
负载均衡 Kubernetes 网络协议
如何在集群的负载均衡过程保留请求源IP
本文探讨了在Kubernetes (k8s)集群中如何确保服务获取到请求的源IP。通常,源IP可能会因网络地址转换(NAT)和代理服务器而丢失。为保留源IP,文章建议在代理服务器层添加HTTP头`X-REAL-IP`字段。在K8s中,通过设置`externalTrafficPolicy: Local`可保留源IP,但这会牺牲负载均衡。使用Ingress时,可通过配置Ingress Controller的`use-forwarded-headers`并调整ConfigMap来同时保留源IP和实现负载均衡。文章适用于对网络和K8s感兴趣的读者。
149 3
|
5月前
|
XML 负载均衡 Java
Spring Boot 中实现负载均衡:概念、功能与实现
【6月更文挑战第28天】在分布式系统中,负载均衡(Load Balancing)是指将工作负载和流量分配到多个服务器或服务实例上,以提高系统可用性和响应速度。负载均衡器可以是硬件设备,也可以是软件解决方案。
282 0
|
6月前
|
负载均衡 应用服务中间件 nginx
服务器架构、分布式系统、负载均衡、微服务、高可用性
**分布式系统取代单体架构,以微服务实现高扩展性和灵活性。通过负载均衡技术增强性能,防止单点故障,结合冗余备份与故障切换保障高可用性,这种架构是支撑大规模在线业务的关键。**
142 3