PostgreSQL Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(共1730人左右 1 + 2 + 3 + 4 +5) 4群(230+),另欢迎 OpenGauss 的技术人员加入。

d6f04a65ca24c5bcce0cfdc00b817b75.png

基于alexander 的俄国口音,部分内容未能完全翻译。

b405f4c5a5fdb307dfd659638e2fa0db.png

大家好我叫亚历山大.库是金,今天我给大家介绍的是patroni 3.0的一些新的规划和功能,主要有以下的一些议题,功能介绍,问题的修复,以及新的功能。

4f6816625fd6a8e3bb7b961ea6dd6071.png

0b572a3d50a76cdbf09f1552057f6f9e.png

Patrnoi 本身支持多种部署,包含最小化部署,支持多种的分布式组件,主要是ETCD ,通过分布式服务,来自动发现节点的状态情况,并将状态进行汇总,通过leader key 来标识当前的primary point 节点,同时这里状态会根据TTL 进行状态在获取,key 是有租约的,所以这些key会在租约到期失效后,进行key 的更新。

9e7865aee4ddf1afda8aaae7e3744c36.png

d541b2dbb1fde24d1174119bc2f313ae.png

当主库出现故障,无法进行KEY 的状态更新,相关的主键的信息就会被抹去,这里的故障的起因,有网络的原因或者主机的原因,数据库服务的原因等等。当超过最大的等待时间后,剩余的两个节点 B C 开始进行选主的竞争,因为他们都发现A 节点不存在了。

1c9d125b70f4d7e2dc5ee6474c3acf18.png

4579a5cb98b69edd383f2909dd4ed1fe.png

1710bce87b031f9fe09e6f58ebf1382e.png

在确认A 节点不存在无法进行连接的情况下, B C 会开始申请主节点,经过分布式选主,最终成功申请到leader的KEY 的节点将成为新的主节点。

713bab1452a7c96ac7d95f3aead233b8.png

e6f140815879e4995705fa59e50b0313.png

在之前的版本的PATRIONI 中有一个问题关于 DCS 导致的误切换的问题,DCS(Distributed configuration store) ,之前的版本的patroni 主要依赖DCS 来解决LEADER 的选举和检测网络分区的工作,这里primary 节点必须在DCS 中更新数据,才能持续的成为主节点,但如果更新失败,则无法成为主节点,PG 会将主节点降级,为解决这个问题,我们引入了一个新的选项,failsafe_mode 他通过在DCS/config 中的全局动态配置进行启用,这里如果主节点可以通过patroni rest api访问到集群中的其他成员,那么这个主节点即使无法更新数据,那么也会持续保留主节点的状态,不会随意降级。

55ac1d384b71e2c978eeb5ad893effc2.png

另一个更新主要是在生产系统中,有使用逻辑复制槽的情况,在进行主从切换的过程中,复制槽会丢失的问题,在之前我们不允许在Patroni 的系统中,重建逻辑复制槽,现在我们可以通过函数pg_replication_slot_advance 来重建复制槽。

5b97614ad0480a626a1a522920006336.png

同时在3.0 针对支持多个同步方式的从库,切换是基于replication lag 的,切换中会更倾向于安全切换。

a5c2af62ced0c46c0331da9af862165d.png

支持PostgreS 13版本中PG_REWIND 中的 --restore-target-wal 的功能,通过但这里不包括在Debain/Ubuntu 中部署的PG13 14 版本。

1bd6d9b8546fd46c4a3d7550fd34a448.png

在配置文件中,也进行了更新,比如针对与配置的参数预先发现其中的错误的问题。

d59f31af78e1153c06e6409efba1c8a0.png

另外还有一些软件方面的改进和增强,我们彻底不在支持低于3.6一下的PYTHON , 并且要使用psycopg3 ,这里我们也会在操作pg_ctl promote 命令前来通过预先的一个脚本,我们认为是一个钩子,来进行一些安全性的判断和切换前的预先的工作。通过也在关闭节点命令前会通过脚步来做一些准备工作,必然把pgboucer先暂停了的工作等等。

cb270d27411acd5f69dddc47a9dd538a.png

e07b3786dabd17886010f2baa4fc8614.png

之前一些链接在判断的时候,是长连接,在这样的方式下会等待很长时间来完成准备的工作,这边进行改善,通过TTL 秒的方式将连接进行关闭。

26ec533ab20955ba32360f91e6220980.png

另外在判断PG 是否存活中,也需要去检测PGDATA 变量, 之前是通过os.listdir()函数来进行判断,但是这里反映的速度很慢,这里我们改变方式通过pg_control文件来获得第一次的数据。

e7473c73f913c95377a468a9f33f4ed4.png

在之前的版本,patroni 在更新状态前会等待postgres 被关闭,但基于PG的关闭在某些情况比较慢,而现在patroni 判断一个节点的关闭是通过pg_controldata 中打印出shut down即可,判断节点关闭。

be3cc7774d6c2e4443efec1cb6d723fa.png

今天是星期六,外面的阳光真好,我没有那么多的时间说,(这不是杜撰这是他的原话),5年前PG10 添加的功能,关于同步复制节点的设置,我们看下面的例子 ANY2(node1 node2)  ANY2(node1,node2,node3),如果要切换我应该切换那个,谁能告诉我怎么办? 

c9ee96fe76a0c787134ea608cb426e0f.png

7aa0c07687a8bd678057c11741b638cb.png

当节点M4加入后,怎么修改相关的配置选择项,怎么能保证修改的选择项是正确的。

e6bcd1220d1f6d162e93447b42aea803.png

另外我们也准备在patroni 中整合关于复制槽failover的部分,虽然patroni我们有了自己的解决方案,但是我们有一些问题没有解决,所以我们在后面要整合新的解决方案,来弥补我们自己的解决方案的问题。

dfe6aac7907748815af75eea4c7e888d.png

除此以外,我们还将添加对于citus的支持的部分,对于read scaling 的改造是简单的。

1512c653c8ff93b82935a830ac420091.png

69025cb5aa31194e522fab2c1b294b51.png

fadec1e002ea09ef2c899045922c1b02.png

基于我们之前的一些问题,我们建议老的版本尽快升级到3.0 .

62668834ce518898cd72d87b9be4a853.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“圆柱-计算公式“技术支持网址

该软件可以计算圆柱的底面圆周长、底面积、侧面积和体积。 您在使用中有遇到任何问题都可以和我们联系。我们会在第一时间回复您。 邮箱地址:elmo30zeongmail.com 谢谢!

js检测dom变化的方法:MutationObserver

前言 检测一个原生dom的变化,如一个div的颜色,大小,所在位置,内部元素的属性是否变化,更深层dom树上的变化等等。 都可以使用一个window上暴露出来的一个api:MutationObserver 语法 官方地址:MutationObserver.MutationObserver() - Web API 接口参考 | MDN 使用new Mutat…

易点易动固定资产管理系统:全生命周期管理的理想选择

在现代企业中,固定资产管理是一项至关重要的任务。为了确保企业的资产安全、提高资产利用率,全面管理固定资产的生命周期至关重要。易点易动固定资产管理系统为企业提供了一种全面的解决方案,实现了从固定资产申购、采购、入库、领用、退库、…

docker的使用方法

文章目录 为什么要用dockerdocker安装docker工作原理docker命令docker搭建练习docker可视化docker镜像docker容器数据卷DockerFiledocker全流程Docker网络原理docker composedocker swarm 为什么要用docker 官网:https://www.docker.com文档地址:https:…

基于Vue+SpringBoot的天沐瑜伽馆管理系统

项目编号: S 039 ,文末获取源码。 \color{red}{项目编号:S039,文末获取源码。} 项目编号:S039,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课…

提供电商数据|带你简单认识天猫API接口相关参数文档调用说明

什么是API接口 API接口(Application Programming Interface Interface)是应用程序与开发人员或其他程序互相通信的方式。它允许开发者访问应用程序的数据和功能。 API接口,软件的“握手”与“交流”之道,软件世界的“好基友”。想让软件聊得来?想开发App却无从下手?API来相救…

全球最大生产基地已投产,百年京西借智能悬架谋「新生」

受相关等爆款车型的高配置率及销量带动,空气悬架市场热度不减。 比如,理想在今年的理想魔毯空气悬架技术日上宣布,搭载空气悬架的车型累计交付已突破20万辆,在所有已交付的L9、L8、L7中,配备空气悬架的比例达93%。 作…

清华大学提出全新加速训练大模型方法SoT

近日,微软研究和清华大学的研究人员共同提出了一种名为“Skeleton-of-Thought(SoT)”的全新人工智能方法,旨在解决大型语言模型(LLMs)生成速度较慢的问题。 尽管像GPT-4和LLaMA等LLMs在技术领域产生了深远影响,但其处…

springboot+vue基本微信小程序的旅游社系统

项目介绍 现今市面上有关于旅游信息管理的微信小程序还是比较少的,所以本课题想对如今这么多的旅游景区做一个收集和分类。这样可以给身边喜欢旅游的朋友更好地推荐分享适合去旅行的地方。 前端采用HTML架构,遵循HTMLss JavaScript的开发方式&#xff0…

堆的实现(C语言版)

文章目录 概述堆的实现初始化销毁插入删除取堆顶元素求堆的长度判断堆是否为空 完整代码 概述 如果有一个关键码的集合K {k0,k1,k2…kn-1}&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足&#xff1a;Ki <K2*i1 且 Ki<K2…

拼多多平台全面API接口对接

对接流程&#xff08;支持虚拟商品&#xff09; 拼多多与商家之间数据双向请求&#xff0c;同步更新及相关数据传输。对接主要分为三大部分&#xff1a;准备阶段、对接测试、上线使用&#xff1b;针对每部分具体说明如下&#xff1a; 接口连通性测试重点关注两类接口的连通性&a…

【数据结构】最小生成树(Kruskal算法)

一.基本思想 设无向连通网为G&#xff08;V&#xff0c;E&#xff09;&#xff0c;令G的最小生成树为T&#xff08;U&#xff0c;TE&#xff09;&#xff0c;其初态为UV&#xff0c;TE{},然后&#xff0c;按照边的权值由小到大的顺序&#xff0c;考察G的边集E中的各条边。若被考…

​飞凌嵌入式FCU2601网关,为工商业储能EMS注入智慧的力量

一、火热的储能行业&#xff0c;寻求新的市场机会 最近一段时间以来&#xff0c;世界储能大会、上海储能展、能源电子产业发展大会等多个储能相关论坛和展览密集登场&#xff0c;即使“内卷”已成为了业内讨论的热词&#xff0c;但寻求新的市场机会仍然是行业共识&#xff0c;…

「德州仪器嵌入式技术创新发展研讨会」落幕,飞凌嵌入式携手TI推动技术创新

11月22日&#xff0c;德州仪器嵌入式技术创新发展研讨会&#xff08;北京站&#xff09;顺利举行&#xff0c;本次研讨会邀请了众多业界领先的企业和专家到场&#xff0c;飞凌嵌入式作为TI生态伙伴受邀参加&#xff0c;与众多业内伙伴共话嵌入式技术的未来发展趋势。 在本次研…

Linux进程间通信

进程间通信介绍 首先进程是具有独立性的&#xff0c;要让两个不同的进程&#xff0c;进行通信&#xff0c;前提是&#xff1a;先让两个进程&#xff0c;看到同一份资源&#xff0c;这份资源及不能属于进程A也不能属于进程B&#xff0c;所以只能有操作系统直接或间接提供&#…

OkHttpUrlConnection库编写代码示例

OkHttpUrlConnection库编写的爬虫程序&#xff0c;该程序使用Kotlin编写的。 kotlin import java.net.HttpURLConnection import java.net.URL import java.net.URLConnection import java.io.BufferedReader import java.io.InputStreamReader fun main() { val url UR…

JVM中如何实现垃圾收集

Java虚拟机&#xff08;JVM&#xff09;使用垃圾收集器&#xff08;Garbage Collector&#xff09;来管理内存&#xff0c;清理不再使用的对象以释放内存空间。垃圾收集的主要目标是自动化内存管理&#xff0c;使开发人员无需显式地释放不再使用的内存&#xff0c;从而降低了内…

抖音本地生活服务商申请入口关闭?聚合服务商将成本地生活新模式

近年来&#xff0c;随着抖音本地生活服务为用户提供了便捷的生活方式相继支付宝、微信陆续推出了本地生活服务。然而&#xff0c;对于许多创业者而言&#xff0c;申请成为抖音本地生活服务商却面临着一定的门槛。因此&#xff0c;如何降低这些门槛&#xff0c;让更多的商家能够…

notion 3.0.0 版本最新桌面端汉化教程,支持MAC和WIN版本

notion客户端汉化&#xff08;目前版本3.0.0&#xff09; 最近notion桌面端更新了3.0.0版本后会导致老版本汉化失效&#xff0c;本项目实现了最新版Notion桌面端的汉化。 文件下载地址&#xff1a;汉化文件下载地址 项目说明 本项目针对新的客户端做了汉化文化&#xff0c;依…

ke12Servlet规范有三个高级特性,,文件上传下载

1Servlet规范有三个高级特性 分别是Filter、Listener和文件的上传下载。Filter用于修改request、response对象&#xff0c;Listener用于监听context、session、request事件。 熟悉Filter的生命周期 了解Filter及其相关API 掌握Filter的实现 掌握Filter的映射与过滤器链的使用…