关于kubernetes:PostgreSQLHA-高可用集群在-Rainbond-上的部署方案

3次阅读

共计 4362 个字符,预计需要花费 11 分钟才能阅读完成。

PostgreSQL 是一种风行的开源关系型数据库管理系统。它提供了规范的 SQL 语言接口用于操作数据库。

repmgr 是一个用于 PostgreSQL 数据库复制治理的开源工具。它提供了自动化的复制治理,包含:

  • 故障检测和主动故障切换:repmgr 能够检测到主服务器故障并主动切换到备用服务器。
  • 主动故障复原:repmgr 能够检测到从服务器故障并主动将其重新加入到复制拓扑中。
  • 多个备用服务器:repmgr 反对多个备用服务器,能够在主服务器故障时主动切换到最合适的备用服务器。
  • 灵便的复制拓扑:repmgr 反对各种复制拓扑,包含单主服务器和多主服务器。
  • 治理和监控:repmgr 提供了用于治理和监控 PostgreSQL 复制的各种工具和命令。

能够说 repmgr 是一个扩大模块,简化了 PostgreSQL 复制的治理和保护,进步零碎的可靠性和可用性。它是一个十分有用的工具,特地是对于须要高可用性的生产环境。同时 repmgr 也是由 Postgresql 社区开发以及保护的。

Pgpool 是一个高性能的连接池和负载均衡器,用于 PostgreSQL 数据库。Pgpool 能够作为中间层,位于客户端和 PostgreSQL 服务器之间,来治理连贯申请并调配给不同的 PostgreSQL 服务器进行解决,以进步整体的零碎性能和可用性。Pgpool 的一些次要性能包含:

  • 连接池:Pgpool 在应用程序和数据库之间建设一个连接池,使得多个应用程序能够共享一组数据库连贯,防止了反复的连贯和断开。
  • 负载平衡:Pgpool 能够将客户端申请平衡地调配到多个 PostgreSQL 服务器上,以实现负载平衡和更好的性能。
  • 高可用性:Pgpool 能够检测到 PostgreSQL 服务器的故障,并主动将客户端申请从新路由到其余可用服务器,从而进步零碎的可用性和稳定性。
  • 并行查问:Pgpool 能够将大型查问分成几个子查问,而后将这些子查问并行发送到多个 PostgreSQL 服务器上执行,以进步查问性能。

本文将介绍在 Rainbond 上应用 Postgresql-repmgr + Pgpool 实现 Postgresql 高可用集群的部署和治理。

架构

当应用 Postgresql HA 集群时,利用只需连贯 pgpool 即可。

  • 通过 pgpool 实现读写拆散,写入操作由 Master 执行,读取操作由 Slave 执行。
  • 由 repmgr 实现流复制,Master 数据主动复制到 Slave。
  • 当 Master 遇故障下线时,由 repmgr 自定抉择 Slave 为 Master,并继续执行写入操作。
  • 当某个节点遇故障下线时,由 pgpool 主动断开故障节点的连贯,并切换到可用的节点上。

部署 Rainbond

装置 Rainbond,可通过一条命令疾速装置 Rainbond,或抉择 基于主机装置 和 基于 Kubernetes 装置 Rainbond。

curl -o install.sh https://get.rainbond.com && bash ./install.sh

通过 Rainbond 开源利用商店部署 PostgreSQL 集群

Postgresql HA 集群已公布到 Rainbond 开源利用商店,可一键部署 Postgresql HA 集群。

登陆 Rainbond 控制台,进入 平台治理 -> 利用市场 -> 开源利用商店 中搜寻 postgresql-ha 并装置。

装置实现后的拓扑图如下。

配置 Pgpool 组件

  1. 获取 PostgreSQL-repmgr 连贯地址,进入 PostgreSQL-repmgr 组件的 Web 终端内。
env | grep REPMGR_PARTNER_NODES

  1. 将上述的内容复制出并批改成以下格局,而后进入 Pgpool 组件内,批改 PGPOOL_BACKEND_NODES 环境变量,并更新组件。
0:pg-grde8ebc-0.pg-grde8ebc.dev.svc.cluster.local:5432,1:pg-grde8ebc-1.pg-grde8ebc.dev.svc.cluster.local:5432,2:pg-grde8ebc-2.pg-grde8ebc.dev.svc.cluster.local:5432

  1. 验证集群,进入 Pgpool 组件的 Web 终端中。
# 连贯 postgresql
PGPASSWORD=$PGPOOL_POSTGRES_PASSWORD psql -U $PGPOOL_POSTGRES_USERNAME -h localhost

# 查问集群节点
show pool_nodes;

status 字段均为 UP 即可。

从零开始部署 PostgreSQL 集群

从零开始在 Rainbond 上部署 Postgresql HA 集群也是非常简单的,大抵分为以下几个步骤:

  • 基于镜像部署 PostgreSQL-repmgr 组件,并批改组件配置。
  • 基于镜像部署 pgpool 组件,并批改组件配置。
  • 建设组件之间的依赖关系。

镜像均采纳 bitnami 制作的 postgresql-repmgr 和 pgpool,因 bitnami 制作的镜像将很多配置文件都抽离成了环境变量,配置比拟不便。

部署 PostgreSQL-repmgr 组件

1. 创立组件

进入团队内 -> 新建组件 -> 基于镜像创立组件,利用、组件、英文名称等自定义即可,镜像填写 bitnami/postgresql-repmgr:14.7.0

2. 批改组件类型

进入组件内 -> 其余设置,将组件部署类型批改为 有状态服务

3. 增加环境变量

进入组件内 -> 环境变量,新增以下环境变量:

# 默认初始化的数据库
POSTGRESQL_DATABASE=initialize

# 创立普通用户和明码
POSTGRESQL_USERNAME=admin
POSTGRESQL_PASSWORD=admin@123

# 管理员 postgres 明码
POSTGRESQL_POSTGRES_PASSWORD=postgres@123

# repmgr 用户明码
REPMGR_PASSWORD=repmgrpass

# 初始化主节点的 HOST。Rainbond 控制台主动渲染 SERVICE_NAME 变量,获取以后 Statefulset 的控制器名称。REPMGR_PRIMARY_HOST=${SERVICE_NAME}-0.${SERVICE_NAME}.${NAMESPACE}.svc.cluster.local

# 集群中的所有节点,以逗号分隔
REPMGR_PARTNER_NODES=${SERVICE_NAME}-0.${SERVICE_NAME}.${NAMESPACE}.svc.cluster.local,${SERVICE_NAME}-1.${SERVICE_NAME}.${NAMESPACE}.svc.cluster.local,${SERVICE_NAME}-2.${SERVICE_NAME}.${NAMESPACE}.svc.cluster.local

进入组件内 -> 其余设置,增加 Kubernetes 属性,抉择 env,增加以下内容:

# repmgr 节点名称
- name: REPMGR_NODE_NAME
  value: "$(POD_NAME)"
# repmgr 节点网络名称
- name: REPMGR_NODE_NETWORK_NAME
  value: "$(POD_NAME).$(SERVICE_NAME).$(NAMESPACE).svc.cluster.local"
  
### "$(POD_NAME)" 用于定义 env 之间的相互依赖 

4. 增加组件存储

进入组件内 -> 存储,增加新的存储,存储门路为 /bitnami/postgresql,其余自定义即可。

5. 启动组件

在组件视图内构建组件期待构建实现并启动。

6. 批改组件实例数量

进入组件内 -> 伸缩,将组件实例数量设置为 3,期待所有实例启动即可。

部署 pgpool 组件

1. 创立组件

进入团队内 -> 新建组件 -> 基于镜像创立组件,利用、组件、英文名称等自定义即可,镜像填写 bitnami/pgpool:4.4.2

2. 增加环境变量

进入组件内 -> 环境变量,新增以下环境变量:

# pgpool admin 用户与明码
PGPOOL_ADMIN_USERNAME=admin
PGPOOL_ADMIN_PASSWORD=admin@123

# postgres 用户与明码
PGPOOL_POSTGRES_USERNAME=postgres
PGPOOL_POSTGRES_PASSWORD=postgres@123

# 用于执行流查看的用户和明码
PGPOOL_SR_CHECK_USER=admin
PGPOOL_SR_CHECK_PASSWORD=admin@123

# postgresql 后端节点。节点列表获取进入到 PostgreSQL-repmgr 组件的 Web 终端内,应用 env | grep REPMGR_PARTNER_NODES 命令获取,而后批改为以下格局
PGPOOL_BACKEND_NODES=0:postgresql-ha-repmgr-0.postgresql-ha-repmgr.dev.svc.cluster.local:5432,1:postgresql-ha-repmgr-1.postgresql-ha-repmgr.dev.svc.cluster.local:5432,2:postgresql-ha-repmgr-2.postgresql-ha-repmgr.dev.svc.cluster.local:5432

3. 增加依赖

在利用视图,将 pgpool 组件依赖至 PostgreSQL-repmgr 组件。

4. 启动组件

在 pgpool 组件视图内构建组件期待构建实现并启动。

5. 验证集群

进入 Pgpool 组件的 Web 终端中,输出以下命令验证集群:

# 连贯 postgresql
PGPASSWORD=$PGPOOL_POSTGRES_PASSWORD psql -U $PGPOOL_POSTGRES_USERNAME -h localhost

# 查问集群节点
show pool_nodes;

status 字段均为 UP 即可。

最初

内部连贯

如想应用本地工具连贯到 postgresql,可在 pgpool 组件的端口内关上对外服务端口,通过该端口连贯到 postgresql,默认用户明码为 postgres/postgres@123

验证高可用集群

为了保障高可用集群,Kubernetes 集群至多有 3 个节点,且底层存储应用分布式存储,如没有分布式存储,需将 Postgresql 存储切换为本地存储也可保障高可用集群的数据。可通过以下形式进行高可用集群验证:

  • 通过 Pgpool 连贯后,创立数据库并写入数据,再进入 PostgreSQL-repmgr 组件的 Web 终端内查问每个实例是否都有数据。
  • 挂掉主节点,验证是否主节点主动切换并可失常连贯并写入。
正文完
 0