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.hqwc.cn/news/257485.html

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

相关文章

【PCB设计】嘉立创EDA器件3D模型导入AD的方法

嘉立创EDA器件3D模型导入AD的方法 一、嘉立创EDA导出3D模型二、CAD编辑3D模型三、AD中加载3D模型 一、嘉立创EDA导出3D模型 在嘉立创EDA中找到对应的元器件&#xff0c;并生成PCB&#xff0c;选择导出3D文件 导出元件step模型 二、CAD编辑3D模型 用FreeCAD打开模型 删除…

pytorch的二次索引矩阵无法赋值问题

最近在研究中发现torch一个问题&#xff0c;即torch的二次索引的矩阵无法赋值。 具体来说&#xff0c;给定相同的初始常数矩阵a和iou_target矩阵, 以及另一iou矩阵&#xff0c;直接赋值是没问题的。 然而&#xff0c;当对iou_target矩阵进行二次索引时&#xff0c;即idx矩阵和…

【小白专用】MySQL创建数据库和创建数据表

1.在Windows开始搜索输入Mysql,并选择第一个打开。 2.输入安装时的密码 3.说明安装成功。 二、创建数据库 1. 连接 MySQL 输入 mysql -u root -p 命令&#xff0c;回车&#xff0c;然后输入 MySQL 的密码(不要忘记了密码)&#xff0c;再回车&#xff0c;就连接上 MySQL 了。 …

leetcode做题笔记1466. 重新规划路线

n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。去年&#xff0c;交通运输部决定重新规划路线&#xff0c;以改变交通拥堵的状况。 路…

全光谱台灯对孩子眼睛好吗?备考护眼台灯推荐

全光谱台灯通常被认为对孩子的眼睛更好&#xff0c;因为它们能够提供更接近自然光的光谱。与传统的白炽灯或荧光灯相比&#xff0c;全光谱台灯能够提供更均匀、真实的光线&#xff0c;减少眼睛的疲劳和视觉疲劳。此外&#xff0c;全光谱台灯还可以提供更好的颜色还原&#xff0…

vue 实现返回顶部功能-指定盒子滚动区域

vue 实现返回顶部功能-指定盒子滚动区域 html代码css代码返回顶部显示/隐藏返回标志 html代码 <a-icontype"vertical-align-top"class"top"name"back-top"click"backTop"v-if"btnFlag"/>css代码 .top {height: 35px;…

PLC无线通讯终端在二氧化碳注气开采石油中的应用

一、应用背景 在传统的石油开采过程中&#xff0c;只能采收到地下原油储层中约30%至40%的石油。二氧化碳强化石油开采技术是一种利用二氧化碳来提高石油采收率的技术。将工业尾气中的二氧化碳被捕集起来&#xff0c;注入油田地下油层&#xff0c;把原油"驱赶”出来&#…

前端性能优化的一些方法和策略

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

RocksDB 在 vivo 消息推送系统中的实践

作者&#xff1a;vivo 互联网服务器团队 - Zeng Luobin 本文主要介绍了 RocksDB 的基础原理&#xff0c;并阐述了 RocksDB 在vivo消息推送系统中的一些实践&#xff0c;通过分享一些对 RocksDB 原生能力的探索&#xff0c;希望可以给使用RocksDB的读者带来启发。 一、背景 在…

智能优化算法应用:基于沙猫群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于沙猫群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于沙猫群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.沙猫群算法4.实验参数设定5.算法结果6.参考文献7.…

如何还原分区? 分区和卷恢复的详细步骤

​我们曾介绍过用傲梅轻松备份将分区备份为镜像文件的方法。那备份好的分区如何恢复呢&#xff1f;同样&#xff0c;使用傲梅轻松备份也能实现分区的还原。以下是分区还原的步骤&#xff1a; 提示&#xff1a;提前使用傲梅轻松备份创建一个可启动U盘。 1. 准备U盘启动…

智能优化算法应用:基于材料生成算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于材料生成算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于材料生成算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.材料生成算法4.实验参数设定5.算法结果6.参考…