patroni+etcd+antdb高可用

news2024/11/25 15:28:24

patroni+etcd+antdb高可用架构图

  • Patroni组件功能

自动创建并管理主备流复制集群,并且通过api接口往dcs(Distributed Configuration Store,通常指etcd、zookeeper、consul等基于Raft协议的键值存储)读取以及更新键值来维护集群的状态。键值包括集群状态、master/slave的节点信息等。

  • Etcd组件功能

Dcs的一种,存储键值信息,基于Raft协议同步信息。

  • Raft协议介绍

Raft是一个共识算法(consensus algorithm)。所谓共识,就是多个节点对某个事情达成一致的看法,即使是在部分节点故障、网络延时、网络分割的情况下。这些年最为火热的加密货币(比特币、区块链)就需要共识算法,而在分布式系统中,共识算法用于提高系统的容错性,比如分布式存储中的复制集(replication)。

Patroni针对网络异常脑裂引起集群异常的优化

当antdb集群出现网络异常时(比如延迟、分割等),

此时etcd集群处于僵死等待恢复状态(Raft协议保证,必须大于1/2节点才能存活),

此时patroni不会改变其管理下的antdb集群状态,

每个antdb节点会维持当前集群的状态信息(而不是从dcs模块实时读取集群信息),

此时patroni将自己置为暂停状态,并允许antdb提供只读服务。

Patroni针对单节点异常引起集群异常的优化

当数据库hangup或者出现out-of-memory异常等原因,

导致antdb单节点的实例处于僵死状态时,

此时patroni支持watchdog 看门狗软件,

定时探测与数据库实例的心跳监测,

当在指定时间内未返回心跳信息后,

watchdog 看门狗重置该节点整个数据库实例的状态,

并从etcd同步集群的状态信息,

保证整个集群处于一致的运行状态。

Patroni流程说明

Patroni流程图

按照Patroni官方给的流程图,可以将整个流程划分为:

1.节点启动流程

2.节点拉起流程

3.处理健康集群流程

4.处理不健康集群流程

4.1节点启动

1.1:从DCS中加载集群信息

  • 判断条件2.1:如果在DCS中已经注册了节点,那么执行判断条件2.2,如果没有注册,则执行步骤1.2

1.2:在DCS中持久化节点信息

  • 判读条件2.2:判读当前节点Postgresql的状态,如果是开始中、停止中、重新启动中以及重新初始化中,那么进入判断条件2.3,否则就进入判断条件2.4
  • 判断条件2.3:判断该节点是否拥有领导者锁,如果拥有领导者锁,则执行步骤1.3,否则执行步骤1.4

1.3:更新领导者锁

1.4:持久化节点状态到DCS中

  • 判断条件2.4:集群是否还原状态,并且失败了,如果是执行步骤1.5,否则执行判断条件2.5

1.5: 如果当前节点是leader节点,则移除leader key。

  • 判断条件2.5:判断数据目录是否为空,如果是执行步骤1.6,否则执行判断条件2.6

1.6:执行②节点拉起流程

  • 判断条件2.6:集群信息在DCS中初始化,如果是则执行判断条件2.7,否则执行判断条件2.8
  • 判断条件2.7:数据目录是否属于集群,如果是执行判断条件2.9,否则执行步骤1.7
  • 判断条件2.8:集群是否有领导者,如果是执行判断条件2.9,否则执行步骤1.8

1.7:节点启动失败并退出

  • 判断条件2.9:节点是否健康状态(Postgresql运行中),如果是执行判断条件2.10,否则执行步骤1.9

1.8:初始化一个新集群

1.9:设置成只读节点及还原标志

  • 判断条件2.10:集群是否有一个领导者,如果是执行③处理健康集群流程,否则执行④处理不健康集群流程

4.2节点拉起

  • 判断条件2.1:集群是否有一个领导者,如果是执行步骤1.1,否则执行判断条件2.2

1.1:选择一个节点,并且获得备份,执行步骤1.2

1.2:执行pg_basebackup还原备份

  • 判断条件2.2:集群是否有一个初始键,如果是执行步骤1.3,否则执行步骤1.4

1.3:等待一个leader key

1.4:竞争初始键

  • 判断条件2.3:判断是否赢得了竞争初始键,如果是执行步骤1.5,否则执行步骤1.6

1.5:初始化数据库、运行Postgresql并且创建对应角色,执行判断条件2.4

1.6:需要等待leader key

  • 判断条件2.4:操作成功,执行步骤1.7,否则执行步骤1.8

1.7:将leader key存储到DCS中,执行步骤1.9

1.8:从DCS中移除初始化键,并且删除数据目录,执行步骤1.9

1.9:持久化节点状态到DCS中

4.3处理健康集群

  • 判断条件2.1:判断当前节点是否拥有领导者锁,如果是执行步骤1.1,否则执行步骤1.2

步骤1.1:尝试更新领导者锁,执行判断条件2.2

步骤1.2:跟随领导者

  • 判断条件2.2:如果执行成功,则执行判断条件2.3,否则执行步骤1.3
  • 判断条件2.3:当前节点是否作为主节点在运行,如果是执行步骤1.5,否则步骤1.4

1.3:执行节点降级操作

1.4:提升当前节点为主节点

1.5:持久化节点状态到DCS中

4.4处理不健康集群

  • 判断条件2.1:判断当前节点是否为健康状态,如果是执行步骤1.1,否则执行步骤1.2

1.1:创建leader key

1.2:尝试跟随其他节点

  • 判断条件2.2:是否可以获得锁,如果可以执行判断条件2.3,否则执行步骤1.2
  • 判断条件2.3:当前节点是否作为Postgresql主节点在运行,如果是执行步骤1.3,否则执行步骤1.4

1.3:持久化节点状态到DCS中

1.4:提升当前节点为主节点

Watchdog说明

watchdog 是一款内核自带的系统监控工具。普通情况下,它看似无关紧要,但却能在危机关头力挽狂澜。因为它能够在系统资源即将耗尽或即将崩溃时主动重启系统,避免由于硬件罢工而导致的被动重启或宕机造成的数据损失和业务损失。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL ibdata1 文件“减肥”记

夏天来了,没想到连 ibdata1 文件也要开始“减肥”了~ 作者:杨彩琳 爱可生华东交付部 DBA,主要负责 MySQL 日常问题处理及 DMP 产品支持。爱好跳舞,追剧。 本文来源:原创投稿 有句话是这么说的:“在 InnoDB…

深入分析 Java IO (一)概述

目录 一、前言 二、基于字节操作的接口 2.1、字节输入流 2.2、字节输出流 三、基于字符操作的接口 3.1、字符输入流 3.2、字符输出流 四、字节与字符的转化 4.1、输入流转化过程 4.2、输出流转化过程 五、基于磁盘操作的接口 六、基于网络操作的接口 6.1、Socket简…

接口自动化测试框架?你真的会封装吗?自动化框架几大功能专项...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 当准备使用一个接…

项目经理如何做好时间管理?

1、建立时间管理原则 (1)我们需要通过时间日志的方式对时间进行记录和分析,并对日常要处理的事务进行优先级排序,优先处理最重要的事物; (2)确定待处理事物的机会成本,提高时间使用…

建模助手618 | 谁不囤点Revit插件我都会生气!

大家好,这里是建模助手。 早在5月份,我们已经就“618”这个事情高调了一番,以提前放“价”的姿势,让许多用户以躺赢的状态拉开了年中大促的序幕。(5月购买的盆友,切记看完全文,内附彩蛋 活动反…

Canal实现0侵入同步缓存数据

开启MySQL binlog功能 cd /home/mysql8/conf vim my.cnf [mysqld] log-bin/var/lib/mysql/mysql-bin # 开启 binlog binlog-formatROW # 选择 ROW 模式 server_id1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复 binlog-do-dbimooc-hire-dev # …

冰冰学习笔记:简单了解protobuf

欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正。 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位…

Fiddler(Statistics、Inspectors)详解

一、Fiddler Statistics详解 Fiddler的 Statistics 分页会统计请求和响应的一些信息。可以使用它完成简单的性能测试,查看其接口的响应时间。 如果你想学习Fiddler抓包工具,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的Fiddle…

Java 网络编程 —— RMI 框架

概述 RMI 是 Java 提供的一个完善的简单易用的远程方法调用框架,采用客户/服务器通信方式,在服务器上部署了提供各种服务的远程对象,客户端请求访问服务器上远程对象的方法,它要求客户端与服务器端都是 Java 程序 RMI 框架采用代…

提升安全性与合规性的关键工具ADAudit Plus

在当今数字化时代,企业对于安全性和合规性的要求越来越高。特别是在Active Directory(AD)域中,作为组织的核心身份验证和访问管理系统,审计活动的重要性变得前所未有。为了满足这一需求,ADAudit Plus成为了…

TwinCAT3 安装和打开项目问题记录

安装的VS版本: cn_visual_studio_professional_2015_with_update_3_x86_x64_dvd_8923256.iso 安装的TwinCAT版本: TC31-FULL-Setup.3.1.4024.29 更多的TwinCAT版本我都放在了百度云盘,有需求可以留言 4022.22 链接:https://pan.baidu.com/s/1D505FdgL7l1DAUANKb-VLg 提取…

【C++】入门基础知识详解(一)

目录 一、C关键字 二、命名空间 1、命名空间的定义 2、命名空间的使用 三、C输入&&输出 四、缺省参数 1、缺省参数的概念 2、缺省参数的分类 2.1 全缺省参数 2.2 半缺省参数 一、C关键字 我们在学习C之前,我相信大家大多数都对C语言多多少少都有所了解…

JMeter之__threadNum妙用:将接口查询结果列表按顺序赋值给各线程

使用JMeter做性能测试会遇到这么一个场景:后面的请求需要根据前面的查询列表结果通过正则表达式提取器取值后赋值,而后面用户的赋值必须是唯一的,此时该如何做? 如果按编程思维来说,这个问题并不难。只需要把前面的结…

Azkaban搭建与使用

下载最新azkaban源文件:https://github.com/azkaban/azkaban/releases 集群模式安装 1.解压 azkaban-db-3.84.4.tar.gz、 azkaban-exec-server-3.84.4.tar.gz 和 azkaban-web-server-3.84.4.tar.gz 到/opt/install/azkaban 目录下 linux>tar -zxvf azkaban-db-3…

算法:静态查找表

查找表(Search table)是由同一类型的数据元素(或记录)构成的集合。关键字(key)是数据元素中某个数据项的值,又称为键值,用它可以表示一个数据元素,也可以标识一个记录的数据项(字段&…

当深度学习撞上高性能计算,科研仿佛坐上了加速器

今天深度学习无处不在,当你打开移动终端的时候,各种APP会推荐到你喜欢的食物、你喜欢的电影,你关注的新闻热点。在生活中更是改变着我们,今天的智能语音让语言障碍破除,在预测疾病基因大数据领域预测疾病来确定药物治疗…

2023年大学生就业怎么样?双一流高校就业率仅15%,到底是咋了?

2023年,大学毕业生就业状况如何,一直是社会关注的焦点。尤其是中国的双一流高校,以其优越的教学与研究背景和实力,被众多年轻人视为就业的理想选择。 然而,在最新的统计数据中,这些一流高校的就业率却惊人…

欧科云链OKLink全新推出Onchain AML服务 助力新金融合规健康发展

据香港大公报报道,为期两天的全球高端经济峰会2023格林威治经济论坛(GreenwichEconomicForum,下称GEF论坛)于6月15日在香港交易所举办,欧科云链控股有限公司(下称“欧科云链”,股票代码:01499.HK&#xff0…

【北邮国院大三下】Logistics and Supply Chain Management 物流与供应链管理 Week4

北邮国院大三电商在读,随课程进行整理知识点。仅整理PPT中相对重要的知识点,内容驳杂并不做期末突击复习用。个人认为相对不重要的细小的知识点不列在其中。如有错误请指出。转载请注明出处,祝您学习愉快。 如需要pdf格式的文件请私信联系或…

VALSE 2023 无锡线下参会个人总结 6月12日-3

VALSE2023 无锡线下参会个人总结 6月12日-3 6月12日会议日程安排Workshop:多模态大模型与提示学习左旺孟:预训练模型和语言增强的零样本视觉学习余宙:知识增强的多模态预训练和提示学习王云鹤:多模态交织:高效模型架构…