基于Linux的patroni搭建标准
作者:Digital Observer(施嘉伟)
Oracle ACE Pro: Database
PostgreSQL ACE Partner
11年数据库行业经验,现主要从事数据库服务工作
拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、PGCM、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证
ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师
第一部分 说明
得益于PostgreSQL的开源特性,越来越多的第三方集群管理软件填补了PostgreSQL在集群方面的易用性和可靠性,patroni+etcd提供了一系列的集群管理方案。etcd负责集群状态信息的存放,用来联系各个节点,patroni负责为集群提供高可用服务,两者的集合为PostgreSQL集群提供了故障转移的高可用服务,它不仅配置简单,而且功能丰富:
支持手动和自动故障转移
支持一主多从、级联复制
支持同步、异步模式
支持使用watchdog防止脑裂
1.1 前期准备
本文使用3个节点的部署规划(一主两从):
主机名 | IP | 端口 | 备注 |
---|---|---|---|
node1 | 192.168.22.128 | 5432 | 主节点 |
node2 | 192.168.22.129 | 5432 | 从节点 |
node3 | 192.168.22.130 | 5432 | 从节点 |
操作系统:centos 7.8 | |||
pg版本:13 |
第二部分 操作步骤
2.1 关闭防火墙
关闭主机防火墙
# systemctl stop firewalld.service
# systemctl disable firewalld.service
2.2 部署PostgreSQL及流复制环境
省略搭建步骤
2.3 部署etcd
在各个节点安装必要的依赖包及etcd软件
# yum install -y gcc python-devel epel-release
# yum install -y etcd
编辑配置文件(以下列出了需要修改的参数,并以主节点为例)
# vim /etc/etcd/etcd.conf#[Member]
ETCD_DATA_DIR="/var/lib/etcd/node1.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.22.128:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.22.128:2379,http://127.0.0.1:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.22.128:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.22.128:2379"
ETCD_INITIAL_CLUSTER="node1=http://192.168.22.128:2380,node2=http://192.168.22.129:2380, node3=http://192.168.22.130:2380"
启动etcd集群,并设置开机自启动
# systemctl start etcd
# systemctl enable etcd
2.4 部署python3
在各个节点部署python3。需要使用高版本的python来使用patroni服务,一般的linux环境内置了2.7版本的python环境,因此我们需要升级python,这里采用源码编译安装方式安装
# wget -c https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz
# ./configure
# make
# make install
删除原2.7版本的软连接,添加新的软链接以使用python3
# rm -f /usr/bin/python
# ln -s /usr/local/bin/python3 /usr/bin/python
2.5 部署patroni
在各个节点上部署patroni。安装必要的依赖包和patroni软件
# pip3 install psycopg2-binary -i https://mirrors.aliyun.com/pypi/simple/
# pip3 install patroni -i https://mirrors.aliyun.com/pypi/simple/
修改patroni配置文件(以主节点为例)
# vim /etc/patroni.ymlscope: pgsql
namespace: /pgsql/
name: pgsql_node2restapi:listen: 192.168.22.128:8008connect_address: 192.168.22.128:8008etcd:host: 192.168.22.128:2379bootstrap:# this section will be written into Etcd:/<namespace>/<scope>/config after initializing new cluster# and all other cluster members will use it as a `global configuration`dcs:ttl: 30loop_wait: 10retry_timeout: 10maximum_lag_on_failover: 1048576master_start_timeout: 300synchronous_mode: falsepostgresql:use_pg_rewind: trueuse_slots: trueparameters:listen_addresses: "0.0.0.0"port: 5432wal_level: logicalhot_standby: "on"wal_keep_segments: 100max_wal_senders: 10max_replication_slots: 10wal_log_hints: "on"
# archive_mode: "on"
# archive_timeout: 1800s
# archive_command: gzip < %p > /data/backup/pgwalarchive/%f.gz
# recovery_conf:
# restore_command: gunzip < /data/backup/pgwalarchive/%f.gz > %ppostgresql:listen: 0.0.0.0:5432connect_address: 192.168.22.128:5432data_dir: /pgdata/patr2bin_dir: /usr/pgsql-12/bin
# config_dir: /etc/postgresql/9.6/mainauthentication:replication:username: replpassword: replsuperuser:username: postgrespassword: postgres#watchdog:
# mode: automatic # Allowed values: off, automatic, required
# device: /dev/watchdog
# safety_margin: 5tags:nofailover: falsenoloadbalance: falseclonefrom: falsenosync: false
配置patroni服务单元
# vim /etc/systemd/system/patroni.service
[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target[Service]
Type=simple
User=postgres
Group=postgres
#StandardOutput=syslog
ExecStart=/usr/local/bin/patroni /etc/patroni.yml
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=process
TimeoutSec=30
Restart=no[Install]
WantedBy=multi-user.target
启动patroni服务
# systemctl start patroni
当然,我们也可以直接使用patroni命令来启动patroni服务,配置服务单元是为了更方便使用。
#/usr/local/bin/patroni /etc/patroni.yml > patroni.log 2>&1 &
第三部分 集群使用
3.1信息查看
查看集群内节点信息
# patronictl -c /etc/patroni.yml list
+ Cluster: pgsql (6972099274779350082)+------+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+-------------+---------------------+--------+---------+----+-----------+
| pgsql_node1 | 192.168.22.128:5432 | Leader | running | 3 | |
| pgsql_node2 | 192.168.22.129:5432 | | running | 3 | 0 |
| pgsql_node3 | 192.168.22.130:5432 | | running | 3 | 0 |
+-------------+---------------------+--------+---------+----+-----------+
3.2手动切换主备
选择某一可用的从节点,使其成为主节点角色
# patronictl -c /etc/patroni.yml switchover
Master [pgsql_node1]: pgsql_node1
Candidate ['pgsql_node2', 'pgsql_node3'] []: pgsql_node2
When should the switchover take place (e.g. 2021-06-20T11:42 ) [now]: now
查看集群状态
# patronictl -c /etc/patroni.yml list
+ Cluster: pgsql (6972099274779350082)+------+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+-------------+---------------------+--------+---------+----+-----------+
| pgsql_node1 | 192.168.22.128:5432 | | running | 3 | 0 |
| pgsql_node2 | 192.168.22.129:5432 | Leader | running | 3 | |
| pgsql_node3 | 192.168.22.130:5432 | | running | 3 | 0 |
+-------------+---------------------+--------+---------+----+-----------+
3.3自动切换主备
重启node1节点所在主机。查看集群状态,node2自动提升为主,如果只是关闭节点实例,则patroni会再将数据库服务自动拉起。
# patronictl -c /etc/patroni.yml list
+ Cluster: pgsql (6972099274779350082)+------+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+-------------+---------------------+--------+---------+----+-----------+
| pgsql_node2 | 192.168.22.129:5432 | Leader | running | 3 | |
| pgsql_node3 | 192.168.22.130:5432 | | running | 3 | 0 |
+-------------+---------------------+--------+---------+----+-----------+
3.4初始化节点
当某一节点与主库不同步,或者节点异常运行时,可以使用此方法初始化节点信息以重新加入集群。
# patronictl -c /etc/patroni.yml reinit pgsql
+ Cluster: pgsql (6972099274779350082)+------+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+-------------+---------------------+--------+---------+----+-----------+
| pgsql_node1 | 192.168.22.128:5432 | | running | 3 | 0 |
| pgsql_node2 | 192.168.22.129:5432 | Leader | running | 3 | |
| pgsql_node3 | 192.168.22.130:5432 | | running | 3 | 0 |
+-------------+---------------------+--------+---------+----+-----------+
选择以下需要添加的节点名称:pgsql_node3
你确定要重新初始化成员 pgsql_node3?[y/N]:y
成功:为成员pgsql_node3执行初始化
相关文章:
基于Linux的patroni搭建标准
作者:Digital Observer(施嘉伟) Oracle ACE Pro: Database PostgreSQL ACE Partner 11年数据库行业经验,现主要从事数据库服务工作 拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、P…...
2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓...
Unity类银河战士恶魔城学习总结(P149 Screen Fade淡入淡出菜单)
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了进入游戏和死亡之后的淡入淡出动画效果 UI_FadeScreen.cs 1. Animator 组件的引用 (anim) 该脚本通过 Animator 控制 UI 元…...
(四)3D视觉机器人的手眼标定(眼在手外)
内容 1.背景介绍1.1 思路T_target_to_cam求解公式求解 2.操作流程 1.背景介绍 3D视觉机器人指的是机器人通过3D相机提供的3D点云视觉信息,完成某些实际的功能。 目标是将场景信息从相机坐标系变换至机械臂坐标系中,最终是获得相机到机械臂基座的空间…...
安达发|制造业APS智能优化排产软件的四类制造模型解决方案
在制造业中,APS(高级计划和排程系统)智能优化排产软件的应用越来越广泛。它通过集成先进的算法和模型,帮助企业提高生产效率、降低成本并提升客户满意度。针对不同类型的生产需求,APS软件提供了四类制造模型解决方案&a…...
命令行使用ssh隧道连接远程mysql
本地电脑A 跳板机B 主机2.2.2.2 用户名 B ssh端口号22 登录密码bbb 远程mysql C 地址 3.3.3.3 端口号3306 用户名C 密码ccc A需要通过跳板机B才能访问C; navicat中配置ssh可以实现在A电脑上访问C 如何实现本地代码中访问C呢? # 假设本地使…...
力扣第 71 题 简化路径
一、题目描述 给定一个字符串 path,表示一个由目录名和斜杠 "/" 组成的绝对路径,请简化该路径,使其变为规范路径。 在 Unix 风格的文件系统中: 一个点 "." 表示当前目录本身;两个点 "..&q…...
使用ENSP实现OSPF
一、项目拓扑 二、项目实现 1.路由器AR1配置 进入系统试图 sys将路由器命名为R1 sysname R1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为1.1.1.1/24 ip address 1.1.1.1 24进入g0/0/1接口 int g0/0/1将g0/0/1接口IP地址配置为2…...
分布式下怎么优化处理数据,怎么代替Join
分布式下怎么优化处理数据,怎么代替Join 简单来说, 可以采用 数据冗余,有意地存储一些重复的数据,以此减少关联查询的需求 数据拆分与多次查询,将一次获取的多表数据,拆分多个单独的查询 使用数据仓库…...
51单片机快速入门之中断的应用 2024/11/23 串口中断
51单片机快速入门之中断的应用 基本函数: void T0(void) interrupt 1 using 1 { 这里放入中断后需要做的操作 } void T0(void): 这是一个函数声明,表明函数 T0 不接受任何参数,并且不返回任何值。 interrupt 1: 这是关键字和参…...
[Java]微服务配置管理
介绍 代码拆分为微服务后, 每个服务都有自己的配置文件, 而这些配置文件中有很多重复的配置, 并且配置变化后需要重启服务, 才能生效, 这样就会影响开发体验和效率 配置管理服务可以帮助我们集中管理公共的配置, 并且nacos就可以实现配置管理服务 配置共享 我们可以把微服务共…...
c/c++ 用easyx图形库写一个射击游戏
#include <graphics.h> #include <conio.h> #include <stdlib.h> #include <time.h>// 定义游戏窗口的大小 #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600// 定义玩家和目标的尺寸 #define PLAYER_SIZE 50 #define TARGET_SIZE 20// 玩家的结构…...
Rust eyre 错误处理实战教程
在《Rust 错误处理库: thiserror 和 anyhow》中我们介绍了Rust简化处理错误策略,本文解释eyre错误处理库,并通过多个实际示例进行说明,最后于anyhow库进行对比,让你更好理解其应用场景。 eyre是一个用于 Rust 的错误处理库&#x…...
面试小札:JVM虚拟机
1. 定义与基本概念 - JVM(Java Virtual Machine)即Java虚拟机,是Java程序的运行核心。它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来运行Java字节码。字节码是一种中间格式,它使得Java程序能…...
Docker扩容操作(docker总是空间不足)
Docker扩容操作(docker总是空间不足) 1、df二连,一共也就70g,总是占满93%以上。所以需要移动到其他目录上 查看docker镜像和容器存储目录的空间大小 du -sh /var/lib/docker/2、停止docker服务 systemctl stop docker3、首先创建目录并迁移 # 首先创…...
数字图像处理(4):FPGA中的定点数、浮点数
(1)定点数:小数点固定在数据的某一位置的数,可以分为定点整数和定点小数和普通定点数。定点数广泛应用于数字图像处理(图像滤波、图像缩放)和数字信号处理(如FFT、定点卷积)中。 定…...
毕昇入门学习
schemas.py 概述 这段代码主要定义了一系列基于 Pydantic 的数据模型(BaseModel),用于数据验证和序列化,通常用于构建 API(如使用 FastAPI)。这些模型涵盖了用户认证、聊天消息、知识库管理、模型配置等多…...
2411C++,学习C++提示4
结构绑定 auto [first, ...ts] std::tuple{1, 2 ,3};assert(1 first);浮点作为非类型模板参数 template<double Value> constexpr auto value Value;int main() {std::cout << value<4.2>; // prints 4.2 }template<double... Vl1s, double... Vl2s&g…...
STM32-- 看门狗--介绍、使用场景、失效场景
STM32 中的看门狗(Watchdog Timer,简称 WDG)有两种主要类型:独立看门狗(IWDG) 和 窗口看门狗(WWDG)。它们的喂狗机制各有特点,主要区别如下: 1. 独立看门狗&a…...
【赵渝强老师】PostgreSQL的数据库
PostgreSQL的逻辑存储结构主要是指数据库中的各种数据库对象,包括:数据库集群、数据库、表、索引、视图等等。所有数据库对象都有各自的对象标识符oid(object identifiers),它是一个无符号的四字节整数,相关对象的oid都…...
linux安全管理-会话安全
文章目录 1 设置命令行界面超时退出2 配置终端登录失败策略3 配置 SSH 登录失败策略 1 设置命令行界面超时退出 1、检查内容 检查操作系统是否设置命令行界面超时退出。 2、配置要求 操作系统设置命令行界面超时退出。 3、配置方法 配置命令行界面超时时间,编辑/et…...
Ubuntu监视显卡占用情况
在终端中运行 watch -n 0.5 nvidia-smi【以下内容由大模型生成】 watch -n 0.5 nvidia-smi 是一个组合命令,用于在 Linux 终端中定期执行 nvidia-smi 命令并显示其输出。让我们分解一下这个命令的各个部分: watch: watch 是一个用于定期执行其他命令并显…...
学成在线day06
上传视屏 断点续传 通常视频文件都比较大,所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大小没有限制,但是客户的网络环境质量、电脑硬件环境等参差不齐,如果一个大文件快上传完了网断了没有上传完成&…...
Mac安装及合规无限使用Beyond Compare
文章目录 Beyond CompareBeyond Compare简介Beyond Compare安装Beyond Compare到期后继续免费使用 Beyond Compare Beyond Compare简介 Beyond Compare 是一款由 Scooter Software 开发的文件和文件夹比较工具。它主要用于对比两个文件或文件夹之间的差异,并支持文…...
【青牛科技】2K02 电动工具专用调速电路芯片描述
概述: 2K02 是电动工具专用调速电路。内置稳压电路,温度系数好,可以调节输出频率以及占空比的振荡输出,广泛的应用于小型电钻,割草机等工具。 主要特点: ● 电源电压范围宽 ● 占空比可调 ● 温度系数好 …...
基于SpringBoot实现的民宿管理系统(代码+论文)
🎉博主介绍:Java领域优质创作者,阿里云博客专家,计算机毕设实战导师。专注Java项目实战、毕设定制/协助 📢主要服务内容:选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 💖精彩专栏…...
安装QT6.8(MSVC MinGW)+QT webengine+QT5.15.2
本篇主要针对只使用过QT5的qmake,没有用过MSVC,VS的老同学。 建议一部分一部分安装,全部勾选安装遇到问题会中断,前功尽弃。 我自己需要的是QT5,编出的软件用在公司设备上。 QT6:建议也安装学习…...
MinIO常见操作及Python实现对象的增删改查
MinIO常见操作 MinIO是一个高性能的开源对象存储服务,它兼容Amazon S3云存储服务API。在MinIO中,常见的操作包括: 存储桶操作: 创建、列出、获取信息、删除存储桶。 对象操作: 上传、下载、列出、删除对象。 权限管理&…...
网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()
目录 1,网络字节序和主机字节序 2. 函数的具体作用 2.1,htonl(Host to Network Long) 2.2,htons(Host to Network Short) 2.3,ntohl(Network to Host Long) 2.4,ntohs(Network to Host Sho…...
【dvwa靶场:File Upload系列】File Upload低-中-高级别,通关啦
目录 一、low级别,直接上传木马文件 1.1、准备一个木马文件 1.2、直接上传木马文件 1.3、访问木马链接 1.4、连接蚁剑 二、medium级别:抓包文件缀名 2.1、准备一个木马文件,修改后缀名为图片的后缀名 2.2、上传文件,打开burpSuite&…...
开发网页系统一般多少钱/搜索引擎优化排名
Tracert命令详解 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。 Tracert 工作原理 通过向目标…...
wordpress 用户投稿/seo站内优化和站外优化
Paint是TextPaint的父类,TextPaint从名字来看是用来处理文字的。 在TextView及其子类中可以通过getPaint()获得TextPaint对象。 在TextView中一般有两种颜色,一个是背景颜色,一个是字体颜色,Paint控制背景颜色,TextP…...
html教程书/抖音优化是什么意思
1. 脚本功能: 实现2个服务器间文件的传递,例如从A服务器往B服务器上传文件 2. 实现步骤: 2.1 服务器连结,找到指定路径,读取所需要上传的文件,将文件名称复制到一个文件下 (此处考虑可能需要筛选特定的文件…...
公司名称变更网站要重新备案吗/数字化营销怎么做
华为firewall是没有默认条目的,需自己定义firewall enablefirewall default deny一、定义标准ACLacl 1-99rule normal {permit/deny} source source-ip source-wildcardeg: acl 1rule normal permit source 192.168.2.0 0.0.0.255 允许192.168.2.0网段的流量二、定…...
湖南长沙app/网站推广优化方法
import sys#print(sys.path) 打印环境变量 print(sys.argv) print(sys.argv[2]) 在python中有sys模块,这个模块先暂时学习2个功能: sys.path:打印该模块的环境变量; sys.argv:打印该模块的字符串,也可以指定…...
顺企网宁波网站建设/关键字排名优化工具
一、文章简介 本文将从二叉搜索树的定义和性质入手,带领大家实现一个二分搜索树,通过代码实现让大家深度认识二分搜索树。 后面会持续更新数据结构相关的博文。 数据结构专栏:https://www.cnblogs.com/hello-shf/category/1519192.html git传…...