当前位置: 首页 > news >正文

在k8s上部署Crunchy Postgres for Kubernetes

目录

  • 一、前言
  • 二、安装Crunchy Postgres for Kubernetes
  • 三、部署一个简单的postgres集群
  • 四、增加pgbouncer
  • 五、数据备份
  • 六、备份恢复
  • 七、postgres配置参数
  • 七、数据导入

一、前言

Crunchy Postgres可以帮助我们在k8s上快速部署一个高可用、具有自动备份和恢复功能的postgres集群。相似的,还有Stolon、Patroni、zalando这几个项目。
每个项目的优缺点可以参考下面这几篇文章,国内关于postgres集群的文章还是太少了
https://www.libhunt.com/compare-patroni-vs-stolon
https://www.simplyblock.io/blog/choosing-a-postgres-kubernetes-operator/
https://blog.palark.com/comparing-kubernetes-operators-for-postgresql/

本篇文章只讨论Crunchy Postgres
官方文档:https://access.crunchydata.com/documentation/postgres-operator/latest
项目地址:https://github.com/CrunchyData/postgres-operator
https://github.com/CrunchyData/postgres-operator-examples

二、安装Crunchy Postgres for Kubernetes

在这里插入图片描述
根据你的k8s版本选择合适的Crunchy Postgres版本。跟着官方文档的quickstart走,他会让你fork最新的版本,这是有问题的。由于当时我需要5.3.2的版本,所以我只能看哪个账号是fork了5.3.2的postgres-operator-examples,然后再从他那里下载。这里感觉Crunchy Postgres这个项目的版本管理挺乱的。然后下载解压到服务器上。后面的命令默认都是再“postgres-operator-examples/”路径下执行

使用helm安装pgo,安装后环境就搭建好了。

#安装pgoperator
helm install pgoperator  oci://registry.developers.crunchydata.com/crunchydata/pgo -n your_namespace --set singleNamespace=true --version 5.3.2
#删除pgoperator
helm delete pgoperator -n your_namespace

三、部署一个简单的postgres集群

执行命令,就可以部署一个简单的集群了

helm  install hippo helm/postgres  --namespace your_namespace

查看

helm ls -n your_namespace

删除集群

helm delete hippo -n your_namespace

当然,也可以根据自己的需要部署一个个性化的集群,具体方法是修改helm/postgres/value.yaml文件。例如:
在这里插入图片描述
另外,如果你想要在k8s集群外连接postgres,最好增加一个NodePort以暴露一个端口访问
在这里插入图片描述
修改value.yaml文件后,用如下命令升级

helm  upgrade hippo helm/postgres --namespace your_namespace

也可以先用下面的命令看配置文件是否有问题

helm  upgrade hippo helm/postgres --debug --dry-run --namespace your_namespace

部署有三个节点的集群后,用如下命令查看主节点和从节点

kubectl get pods -n your_namespace -L postgres-operator.crunchydata.com/role

集群部署后,会生成5个service,每个service的作用可以参考这个连接
https://github.com/CrunchyData/postgres-operator/issues/3784

每个postgres节点通过各自的statefulset进行管理,所以如果有三个postgres节点,就会有三个statefulset。查看statefulset列表

kubectl get statefulset -n your_namespace

我们可以通过statefulset配置文件从而修改节点的信息。例如,容器中的系统的默认时区是UTC
,而我们在东八区。所以我们需要调整系统的时区。但是Crunchy目前还不支持在helm/postgres/value.yaml修改环境变量,所以只能在部署集群后再通过statefulset来修改环境变量。

kubectl edit statefulset hippo-pgha1-lvr7 -n your_namespace

在每个容器的环境变量中增加

- name: TZvalue: Asia/Shanghai

参考:
https://github.com/CrunchyData/postgres-operator/issues/3054
https://www.cnblogs.com/saneri/p/16326567.html

四、增加pgbouncer

PGBouncer是一个轻量级的PostgreSQL数据库连接池,主要用于减少数据库服务器的连接压力,提高数据库的处理能力。
特点:
连接池:维护到PostgreSQL数据库的连接池,允许多个客户端复用已建立的连接,减少连接和断开连接的开销。
轻量级:占用资源极少,可以在几乎不影响系统性能的情况下提供连接池服务。
配置灵活:支持不同的池化模式,以适应不同的使用场景。
高性能:减少了连接建立的开销,提高应用程序的响应速度和吞吐量。
安全性:支持TLS/SSL连接,确保数据传输过程中的安全。
易于管理:提供简单的管理接口,便于监控和管理连接池状态。

同样,我们也在helm/postgres/value.yaml进行修改就可以为集群增加一个pgbouncer
在这里插入图片描述
注意:Crunchy里面的pgbouner默认是连接主数据库的,而databases的配置项是让pgbouncer连接hippo-replaces服务,从而连接从库。global配置项是参考这里添加的。更多的用法可以参考下面这几个链接:
https://github.com/CrunchyData/postgres-operator/issues/1411
https://github.com/CrunchyData/postgres-operator/issues/1499
https://github.com/CrunchyData/postgres-operator/issues/2675
https://github.com/CrunchyData/postgres-operator/issues/3025
https://github.com/CrunchyData/postgres-operator/issues/3123

五、数据备份

以存储在minio作为例子
首先,需要部署一个带tls的minio,部署方法可以参考我写的另外一篇文章:在k8s上部署minio
虽然项目有有人提到了加repo1-s3-verify-tls="n"来省略tls验证,但好像并没有效果。

然后,需要在minio创建一个桶以及一个Access keys。接着,需要根据Access keys的信息在k8s中创建一个secret。
编辑s3.conf文件
在这里插入图片描述
使用下面命令生成secret

kubectl create secret generic pgo-s3-creds-tls --namespace=your_namespace --from-file=s3.conf=./s3.conf

然后,修改value.yaml文件
在这里插入图片描述
Crunchy是使用pgbackrest工具进行备份与恢复的,可以看到设置了两种备份方法,一种是手动,一种是定期,都是全量备份。另外repo1-s3-uri-style和repo1-path配置项是设置备份数据在桶里面的位置。repo1-retention-full: "14"和repo1-retention-full-type: time的作用是自动删除14天前的备份。
手动备份的命令

kubectl annotate -n your_namespace postgrescluster hippo  --overwrite  postgres-operator.crunchydata.com/pgbackrest-backup="$(date)"

另外,观察当部署集群是,也会自动进行一次全量备份。当进行备时,Crunchy自动创建一个叫hippo-backup的pods来执行备份操作。可以用下面的命令来查看备份情况

kubectl describe postgrescluster hippo -n your_namespace

六、备份恢复

修改value.yaml文件,增加如下配置,启动集群时就会自动调用pgbackrast的pod节点来恢复数据
在这里插入图片描述
恢复过程中可能会遇到各种情况,一下是解决问题所需要用到的只是或者参考资料:
1.了解postgres的timeline、wal的定义:
参考:(1)https://blog.csdn.net/liuhuayang/article/details/136958271
           (2)https://www.cnblogs.com/xiaotengyi/p/4665990.html
2.在源postgres集群节点的客户端上执行下面命令查看信息

pg_controldata  //查看当前时间线 wal信息
ls -l $PGDATA/pg_wal/  //查看history的文件
pgbackrest info --stanza=db  //查看历史的备份信息
pg_waldump  //查看wal文件的内容

3.(1)pgbackrast项目官方地址:https://github.com/pgbackrest/pgbackrest
   (2)pgbackrast官方文档:https://pgbackrest.org/command.html
   (3)案例教学:https://github.com/pgbackrest/pgbackrest/issues/2091

七、postgres配置参数

在这里插入图片描述
TimeZone与log_tiemzone的作用参考参考:https://github.com/CrunchyData/postgres-operator/issues/3344`
其他参数参考:https://zhuanlan.zhihu.com/p/157599782

七、数据导入

需要将单节点的postgres导入带postgres集群,我用下面的方法是可行的

pg_dump -h old_host -U postgres -d database_name -W| psql --single-transaction --no-psqlrc -U postgres

另外,还有其他方法可以导数据,可以参考下面的链接
https://github.com/CrunchyData/postgres-operator/issues/1891
https://github.com/CrunchyData/postgres-operator/issues/2060
https://www.crunchydata.com/blog/performing-a-major-postgresql-upgrade-with-pg_dumpall

相关文章:

在k8s上部署Crunchy Postgres for Kubernetes

目录 一、前言二、安装Crunchy Postgres for Kubernetes三、部署一个简单的postgres集群四、增加pgbouncer五、数据备份六、备份恢复七、postgres配置参数七、数据导入 一、前言 Crunchy Postgres可以帮助我们在k8s上快速部署一个高可用、具有自动备份和恢复功能的postgres集群…...

大模型(LLMs)进阶篇

大模型(LLMs)进阶篇 一、什么是生成式大模型? 生成式大模型(一般简称大模型LLMs)是指能用于创作新内容,例如文本、图片、音频以及视频的一类深度学习模型。相比普通深度学习模型,主要有两点不…...

近几年新笔记本重装系统方法及一些注意事项

新笔记本怎么重装系统? 近几年的新笔记本默认开启了raid on模式或vmd选项,安装过程中会遇到问题,新笔记本电脑重装自带的系统建议采用u盘方式安装,默认新笔记本有bitlocker加密机制,如果采用一键重装系统或硬盘方式安装…...

小程序19-微信小程序的样式和组件介绍

在小程序中不能使用 HTML 标签,也就没有 DOM 和 BOM,CSS 也仅支持部分选择器 小程序提供了 WXML 进行页面结构的编写,WXSS 进行页面的样式编写 WXML 提供了 view、text、image、navigator等标签构建页面结构,小程序中标签称为组件…...

Chrome 浏览器开启打印模式

打开开发者工具ctrl shift p输入print 找到 Emulate CSS print media type...

Git回到某个分支的某次提交

1.切换到需要操作的分支&#xff08;<branch-name>是分支名称&#xff09;。 命令如下&#xff1a; git checkout <branch-name> 2.获取代码的提交记录 。命令如下&#xff1a; git log 按q退出当前命令对话。 获取到某次提交或者合并的hash值&#xff08;下文…...

[前端面试]javascript

js数据类型 简单数据类型 null undefined string number boolean bigint 任意精度的大整数 symbol 创建唯一且不变的值&#xff0c;常用来表示对象属性的唯一标识 复杂数据类型 object&#xff0c;数组&#xff0c;函数,正则,日期等 区别 存储区别 简单数据类型因为其大小固定…...

对象的初步认识

#对象可组织数据&#xff08;如统计数据的表格&#xff09; 下以表格为例 1.设计一个表格:(None为初始值设定&#xff0c;表示无) class a; ##1None ##2None 2.创建一个表格 变量a 3.对对象的属性进行赋值 变量.##1"##" 变量.##2"##" 4.查询对象中…...

layui 输入框带清空图标、分词搜索、关键词高亮

https://andi.cn/page/621858.html...

Vue 3 + TypeScript: 类型安全的前端开发实践

引言 在现代前端开发中&#xff0c;TypeScript 已经成为提升代码质量和开发效率的重要工具。将 Vue 3 与 TypeScript 结合使用&#xff0c;能够为我们的项目带来更好的类型安全性和开发体验。 1. 项目配置 1.1 创建项目 使用 Vue CLI 创建支持 TypeScript 的 Vue 3 项目&am…...

Python爬虫知识体系-----requests-----持续更新

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新&#xff1a;https://blog.csdn.net/grd_java/article/details/140574349 文章目录 一、安装和基本使用1. 安装2. 基本使用3. response常用属性 二、get请求三、post请求四、代理 一、安装和基本使用 1.…...

Swift的可选绑定(Optional binding)

在Swift中&#xff0c;有一种变量称为可选变量&#xff08;Optional&#xff09;&#xff0c;具体说明见Swift初步入门。这种变量的值可以存在也可以为空&#xff08;nil&#xff09;。在Swift中&#xff0c;可以通过将if语句和赋值语句结合&#xff0c;有条件地展开&#xff0…...

硬石电机学习2024116

F4 概况 共模抑制线圈作用是滤波 LD3.3是将5v转为芯片用的3.3V CH340用于板子和电脑通讯 光耦隔离保护主控 16M的外部flash 1M的芯片内部的flash 10kHZ高速的光耦隔离&#xff0c;1M的低俗光耦隔离 F4 stm32概况 stm8和51都是一次可以运算处理8位的 32表示一次处理32位…...

行业类别-金融科技-子类别区块链技术-细分类别智能合约-应用场景供应链金融课题

1.大纲分析 针对题目“行业类别-金融科技-子类别区块链技术-细分类别智能合约-应用场景供应链金融课题”的大纲分析,以下是一个详细的结构: 一、引言 简述金融科技的发展背景与重要性引出区块链技术在金融科技中的应用强调智能合约作为区块链技术的重要细分类别提出供应链金…...

ElementPlus el-upload上传组件on-change只触发一次

ElementPlus el-upload上传组件on-change只触发一次 主要运用了:on-exceed方法 废话不多说&#xff0c;直接上代码 <el-uploadclass"avatar-uploader"action"":on-change"getFilesj":limit"1":auto-upload"false"accep…...

论文阅读:Uni-ISP Unifying the Learning of ISPs from Multiple Cameras

这是 ECCV 2024 的一篇文章&#xff0c;文章作者想建立一个统一的 ISP 模型&#xff0c;以实现在不同手机之间的自由切换。文章作者是香港中文大学的 xue tianfan 和 Gu jinwei 老师。 Abstract 现代端到端图像信号处理器&#xff08;ISPs&#xff09;能够学习从 RAW/XYZ 数据…...

AntD表单自定义组件

前言 表单可以说是前端最常见的一种组件&#xff0c;特别是在进行搜索的时候使用的最频繁&#xff0c;自定义表单组件&#xff0c;丰富了搜索框的类型&#xff0c;使数据展现的更灵活 内容讲解 1、官方介绍 AntD-Formhttps://ant.design/components/form-cn#form-demo-cust…...

19-简单理解JavaScript中的Promise:手写Promise实现

笔记分享 在现代JavaScript开发中&#xff0c;异步编程是不可避免的一部分。为了更好地处理异步操作&#xff0c;ES6引入了Promise。Promise使得异步代码更具可读性和可维护性。通过手写一个完整的Promise实现&#xff0c;可以帮助你更深入地理解其工作原理。本文将详细介绍Pr…...

elementUI input 禁止内容两端存在空格,或者是自动去除两端空格

需求 项目中有需求&#xff1a;输入框中禁止内容两端存在空格&#xff0c;或者是自动去除两端空格。 解决方法 vue的api文档中有过介绍&#xff0c;使用.trim可以去掉用户输入内容中两端的空格&#xff0c;如下图 代码 <el-input v-model.trim"name" cleara…...

Go语言24小时极速学习教程(一)基础语法

Go语言&#xff08;也称为Golang&#xff09;是一种由Google开发的编程语言&#xff0c;以其简洁、高效和并发支持而闻名。从本文开始&#xff0c;将带你快速完成Go语言的学习&#xff0c;如果你之前有过Java或者C语言的基础&#xff0c;学习它将很容易&#xff0c;本教程忽略环…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...