Kubernetes集群安装高可用postgresql

Kubernetes集群安装高可用postgresql

Bitnami 提供的 postgresql-ha 解决方案是一个预配置的、高可用的 PostgreSQL 集群配置,通常部署在 Kubernetes 环境中。它使用了一些关键技术和组件来实现数据库的高可用性。,Bitnami postgresql-ha 主要采用以下构建方式:

  1. PostgreSQL 集群:这是核心部分,通常包含一个主(Primary)数据库和一个或多个从(Standby)数据库。这种设置支持主从复制,其中从数据库实时复制主数据库的数据。

  2. 自动故障转移:在主数据库发生故障时,系统会自动将其中一个从数据库提升为新的主数据库,以确保服务的持续可用性。

  3. Pgpool-II:Bitnami 的 postgresql-ha 使用 Pgpool-II 作为数据库连接池和负载均衡器。Pgpool-II 处理客户端连接,提供负载均衡和连接池功能,同时也支持自动故障转移和读写分离。

  4. 持久化存储:为了保证数据的持久性和稳定性,Bitnami 的解决方案通常使用持久化存储,如 Kubernetes 的持久卷(Persistent Volumes,PVs)和持久卷声明(Persistent Volume Claims,PVCs)。

  5. 监控和日志记录:集成的监控和日志记录机制,以确保集群的健康状况可以被实时监控,并在出现问题时可以迅速响应。

  6. 配置和管理:Bitnami 的 Helm chart 提供了灵活的配置选项,允许用户根据具体需求调整数据库设置、资源分配、复制策略等。

  7. 安全性:通常包括网络策略、访问控制和加密选项来保护数据和通信。

  8. 备份和恢复:可能包括对数据库备份和恢复的支持,以确保数据的安全性。

使用这样的架构,Bitnami 的 postgresql-ha 解决方案能够为企业级应用提供可靠的、高可用的数据库服务,同时充分利用了 Kubernetes 平台的特性,如易于扩展、自我修复和声明式配置。

如果想进一步了解pgpool实现高可用postgresql数据库的架构原理,请参考:pgpool-II高可用配置讲解

1.通过Helm Chart安装高可用Postgresql集群

1.1 前提条件

a. Kubernetes版本>=1.23,Kubernetes的安装请参考:Kubeadm安装K8s1.26集群

b. Helm版本>=v3.8.0,其中 Helm 的安装请参考:Helm Install

c.需要有默认的StorageClass,具体准备流程参考:Kubernetes安装StorageClass

1.2 安装流程

a.创建安装目录

#切换到当前用户根目录并建立logging文件夹
cd ~ && mkdir postgresql-hacd postgresql-ha

b.创建logging名字空间,独立的名字空间有助于资源管理

kubectl create ns pg

c.添加elastic官方repo仓库

helm repo add bitnami https://charts.bitnami.com/bitnami

d.定制化
如果需要做某些定制化需求请参考官方 values.yaml 文件,其中每个参数都会有详细描述: 官网参考

helm pull bitnami/postgresql-ha --version 12.3.2tar -xvf postgresql-ha-12.3.2.tgzcd postgresql-ha#(非必要)以下的操作主要是修改postgresql:默认的pgpool容器副本数,持久化存储卷大小,NodePort对外暴露方式。当然如果需要还可以修改数据库名,数据库密码,登录用户名等信息,也可以通过ingress实现对外7层代理,当然如果需要还可以修改镜像地址,毕竟从外网下载镜像稳定性较差。
vi values.yaml
# 1.全局搜索“pgpool.replicaCount”## @param pgpool.replicaCount The number of replicas to deploy
##
replicaCount: 2 #修改pgpool的数量增强高可用性# 2.全局搜索“persistence.size”## @param persistence.size Persistent Volume Claim size
##
size: 8Gi #默认8G比较小,在真实生产环境可以根据实际需求修改。# 3.全局搜索“service.type”,找到如下内容:type: NodePort #修改为NodePort方式## @param service.ports.postgresql PostgreSQL port##ports:postgresql: 5432## @param service.portName PostgreSQL service port name## ref: https://kubernetes.io/docs/concepts/services-networking/service/#multi-port-services##portName: postgresql## @param service.nodePorts.postgresql Kubernetes service nodePort## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport##nodePorts:postgresql: "15432" #选择一个合适的NodePort端口

e.安装

#执行安装命令
cd ~/postgresql-ha/helm install pg-ha ./postgresql-ha -n pg#成功后提示
NAME: pg-ha
LAST DEPLOYED: Tue Dec  5 04:36:18 2023
NAMESPACE: pg
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: postgresql-ha
CHART VERSION: 12.3.2
APP VERSION: 16.1.0
** Please be patient while the chart is being deployed **
PostgreSQL can be accessed through Pgpool via port 5432 on the following DNS name from within your cluster:pg-ha-postgresql-ha-pgpool.pg.svc.cluster.localPgpool acts as a load balancer for PostgreSQL and forward read/write connections to the primary node while read-only connections are forwarded to standby nodes.To get the password for "postgres" run:export POSTGRES_PASSWORD=$(kubectl get secret --namespace pg pg-ha-postgresql-ha-postgresql -o jsonpath="{.data.password}" | base64 -d)To get the password for "repmgr" run:export REPMGR_PASSWORD=$(kubectl get secret --namespace pg pg-ha-postgresql-ha-postgresql -o jsonpath="{.data.repmgr-password}" | base64 -d)To connect to your database run the following command:kubectl run pg-ha-postgresql-ha-client --rm --tty -i --restart='Never' --namespace pg --image docker.io/bitnami/postgresql-repmgr:16.1.0-debian-11-r11 --env="PGPASSWORD=$POSTGRES_PASSWORD"  \--command -- psql -h pg-ha-postgresql-ha-pgpool -p 5432 -U postgres -d postgresTo connect to your database from outside the cluster execute the following commands:export NODE_IP=$(kubectl get nodes --namespace pg -o jsonpath="{.items[0].status.addresses[0].address}")export NODE_PORT=$(kubectl get --namespace pg -o jsonpath="{.spec.ports[0].nodePort}" services pg-ha-postgresql-ha-pgpoolPGPASSWORD="$POSTGRES_PASSWORD" psql -h $NODE_IP -p $NODE_PORT -U postgres -d postgres#查看运行状态
kubectl get po -n pg
NAME                                          READY   STATUS    RESTARTS   AGE
pg-ha-postgresql-ha-pgpool-58468c7bff-jg9kz   1/1     Running   0          3m41s
pg-ha-postgresql-ha-pgpool-58468c7bff-lhf5p   1/1     Running   0          3m41s
pg-ha-postgresql-ha-postgresql-0              1/1     Running   0          3m41s
pg-ha-postgresql-ha-postgresql-1              1/1     Running   0          3m41s
pg-ha-postgresql-ha-postgresql-2              1/1     Running   0          3m41s

f.测试连接

#获取数据库连接密码
kubectl get secret --namespace pg pg-ha-postgresql-ha-postgresql -o jsonpath="{.data.password}" | base64 -d
f6PEWNNTec  #别用我的,咱们不一样#检查对外暴露的端口
kubectl get svc -n pg
NAME                                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
pg-ha-postgresql-ha-pgpool                NodePort    172.16.86.61    <none>        5432:15432/TCP   12m
pg-ha-postgresql-ha-postgresql            ClusterIP   172.16.19.127   <none>        5432/TCP         12m
pg-ha-postgresql-ha-postgresql-headless   ClusterIP   None            <none>        5432/TCP         12m#使用数据库连接工具,我使用的是pgAdmin

可以看到已经能够连接成功
在这里插入图片描述
g.错误处理
我这里做过多次安装,有的机器可能遇到如下错误

password authentication failed for user “postgres”; User “postgres” has no password assigned.

这个问题是由于postgres数据库启动太慢导致的,适当增加livenessProbe,readinessProbe,startupProbe的initialDelaySeconds数值即可。

# 1.全局搜索“postgresql.livenessProbe.initialDelaySeconds”# 2.全局搜索“postgresql.readinessProbe.initialDelaySeconds”# 3.全局搜索“postgresql.startupProbe.initialDelaySeconds”

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

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

相关文章

JVM 虚拟机(二)类的生命周期

类的声明周期描述了一个类加载、使用和卸载的整个过程。 一个类的声明周期包括五个阶段&#xff1a;加载、连接、初始化、使用、卸载&#xff0c;其中连接部分分为验证、准备和解析阶段。 加载阶段 加载阶段是第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式…

区块链媒体:Web3.0时代的推广创新10爆款策略概览-华媒舍

随着Web3.0时代的到来&#xff0c;互联网推广正经历着一场创新的革命。在这个新的时代背景下&#xff0c;一系列全新的推广策略正在兴起&#xff0c;引领着市场的变革。本文将基于这一背景&#xff0c;为大家介绍Web3.0时代中的10大爆款推广策略概览。 1. 个性化推广 在Web3.0…

【MATLAB】SSA+FFT+HHT组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 SSAFFTHHT组合算法是一种基于奇异谱分析&#xff08;SSA&#xff09;、快速傅里叶变换&#xff08;FFT&#xff09;和希尔伯特-黄变换&#xff08;HHT&#xff09;的组合算法。 其中&am…

谈谈SQL的优化经验

目录 前言 表设计优化 索引优化 读写分离&#xff0c;主从复制优化 ​编辑sql语句优化 前言 SQL调优在项目中是比较常见的&#xff0c;SQL调优不仅仅包括SQL语句的编写&#xff0c;其中还应包括了数据库的表设计&#xff0c;数据库的配置架构&#xff08;主从复制&#xf…

pure::variants—产品平台化及变体管理工具

产品概述 pure::variants是德国pure-systems公司的产品&#xff0c;其目的是帮助企业实现对产品线的变体管理&#xff0c;提高企业项目资产的复用效率。pure::variants的核心理念是运用产品线管理方法对项目资产&#xff08;项目计划、需求、模型、功能模块、代码、测试用例&am…

如何将 MySQL 数据库转换为 SQL Server

本文解释了为什么组织希望将其 MySQL 数据库转换为 Microsoft SQL 数据库。本文接着详细介绍了尝试转换之前需要记住的事项以及所涉及的方法。专业的数据库转换器工具将帮助您快速将 MySQL 数据库记录转换为 MS SQL Server。 在继续之前&#xff0c;我们先讨论一下 MySQL 到 M…

Stable Diffusion WebUI常用Tag收集

捆绑(nsfw)*可以直接加人物lora Masterpiece, high quality, beautiful wallpaper, 16k, animation, illustration, positive perspective, perfect body, complete body, detailed face, delicate features, (solo:1.2), ((1girl)), thin, sexy, (medium to large breasts :1…

Linux(centos)学习笔记(初学)

[rootlocalhost~]#:[用户名主机名 当前所在目录]#超级管理员标识 $普通用户的标识 Ctrlshift放大终端字体 Ctrl缩小终端字体 Tab可以补全命令 Ctrlshiftc/V复制粘贴 / &#xff1a;根目录&#xff0c;Linux系统起点 ls&#xff1a; #list列出目录的内容&#xff0c;通常用户查看…

HTML试题——附答案

HTML试题题目 1. HTML是什么意思&#xff1f;它是什么类型的语言&#xff1f; 2. 请解释HTML标签和元素之间的区别。 3. 以下HTML标记用于什么目的&#xff1f; <!DOCTYPE html> <html> <head><title>我的网页</title> </head> <bo…

什么是 performance_schema ?

MySQL的performance_schema是运行在较低级别的用于监控MySQL Server运行过程中的资源消耗、资源等待等情况的一个功能特性&#xff0c;它具有以下特点。 performance_schema提供了一种在数据库运行时实时检查Server内部执行情况的方法。performance_schema数据库中的表使用per…

Redis研学-认识与安装

一 NoSql-非关系型数据库 1 NoSql特点&#xff1a;解耦 数据模型简单&#xff0c;灵活性更强&#xff0c;对数据库的性能要求比较高(可能出现数据不一致或丢数据)&#xff0c;不需要高度的数据一致性&#xff0c;对给定的key比较容易映射到更复杂的环境 优点&#xff1a; 对数…

WordPress发布文件随机设置作者昵称信息

我们是否看到有些明显是个人网站&#xff0c;但是他有很多的发布者。其实这个都是他个人发布的&#xff0c;只是选择的不同用户&#xff0c;感觉这个网站是多人编辑的。包括我们看到有些明显是采编采集的网站&#xff0c;他们就说是投稿的&#xff0c;实际上哪里有人投稿&#…

单片机开发常用的软件构架

对于单片机程序来说&#xff0c;大家都不陌生&#xff0c;但是真正使用架构&#xff0c;考虑架构的恐怕并不多&#xff0c;随着程序开发的不断增多&#xff0c;架构是非常必要的。 一、时间片轮询法 介于前后台顺序执行法和操作系统之间的一种程序架构设计方案。该设计方案需能…

Modbus TCP工业RFID读写器的选型要点

Modbus TCP工业RFID读写器是一种采用Modbus TCP通信协议的RFID读写器。它可以通过TCP/IP网络与计算机或其它设备进行通信&#xff0c;实现远程读取和写入RFID标签数据的目的。 与传统的RFID读写器相比&#xff0c;Modbus TCP工业RFID读写器具有更远的读写距离、更高的读写灵敏度…

DTD文档约束讲解及其使用案例

DTD&#xff08;Document Type Definition&#xff09;文档类型定义是一种用于描述XML文档结构的语法规则。它定义了XML文档的元素、属性和实体等的规范格式。在XML中&#xff0c;可以将DTD定义在XML文档中或者在一个单独的外部文件中&#xff0c;以便在多个XML文档中共享。 下…

Restarting Application Engine Programs 重新启动应用程序引擎程序

Restarting Application Engine Programs 重新启动应用程序引擎程序 A key feature of Application Engine is its built-in checkpoint and restart capabilities. If a program step terminates abnormally or fails, you can restart the request from the last successf…

Flink Flink数据写入Kafka

一、环境准备 官网地址 flink官方集成了通用的 Kafka 连接器&#xff0c;使用时需要根据生产环境的版本引入相应的依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><flink.version>1.14.6</flink.version&g…

CCF编程能力等级认证GESP—C++1级—20230611

CCF编程能力等级认证GESP—C1级—20230611 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)时间规划累计相加 答案及解析单选题判断题编程题1编程题2 单选题…

关于小红书商单变现的一些答疑

AI小红书商单训练营也过去1个月了&#xff0c;今天给大家汇总几个常遇到的问题&#xff0c;希望对大家在运营过程中有所帮助。 1.账号封面是否要统一模版&#xff1f; 为了让账号主页呈现整洁美观的效果&#xff0c;建议统一封面设计&#xff0c;视频开头可以设置一个固定画面…

景联文科技:高质量垂直领域数据集助力AI技术突破

随着人工智能技术的飞速发展&#xff0c;垂直领域数据集在提升模型性能、解决领域问题、推动创新应用以及提升竞争力等方面的重要性日益凸显。 提高模型性能&#xff1a;垂直领域数据集专注于特定任务或领域&#xff0c;使用这些数据集进行训练可以让模型更好地理解和解决特定领…