28

我仍在思考 Kubernetes 以及它应该如何工作。目前,我正在努力理解如何使用流复制、横向扩展和自动故障转移/故障回复(pgpool-II, repmgr,选择你的毒药)来建模类似 PostgreSQL 集群的东西。

我对这种方法的主要问题是 PostgreSQL 实例的双重性质,配置方面——它要么是主实例,要么是冷/暖/热备用。如果我增加副本的数量,我希望它们都作为备用服务器出现,所以我想象创建一个与podpostgresql-standby分开的复制控制器。postgresql-master但是,如果当前主服务器关闭,我也希望其中一个备用服务器成为主服务器,所以它postgresql毕竟是一个常见的复制控制器。

到目前为止,我唯一的想法是将复制配置放在外部卷上并管理容器外部的状态和状态更改。

(在 PostgreSQL 的情况下,配置可能已经在其data目录内的卷上,这本身显然是我想要在卷上的东西,但这不是重点)

这是正确的方法,还是有其他更清洁的方法?

4

4 回答 4

11

OpenShift 中有一个示例:https ://github.com/openshift/postgresql/tree/master/examples/replica纯 Kube 中的原理是相同的(它没有使用任何真正特定于 OpenShift 的东西,您可以直接使用图像码头工人)

于 2015-06-24T03:49:13.707 回答
1

您可以使用 docker-compose 或 Kubernetes 尝试 PostDock 目前我已经在我们的项目中使用 docker-compose 进行了尝试,其架构如下所示:

pgmaster (primary node1)  --|
|- pgslave1 (node2)       --|
|  |- pgslave2 (node3)    --|----pgpool (master_slave_mode stream)----client
|- pgslave3 (node4)       --|
   |- pgslave4 (node5)    --|

我已经测试了以下场景,它们都运行良好:

  • 复制:在主(即主)节点所做的更改将被复制到所有备用(即从)节点
  • Failover:停止主节点,备用节点(如node4)将自动接管主节点。
  • 防止两个主节点:复活之前的主节点(node1),node4会继续作为主节点,而node1会同步但作为备用节点。

至于客户端应用程序,这些更改都是透明的。客户端只指向 pgpool 节点,并在上述所有场景中保持正常工作。

注意:如果您在运行 PostDock 时遇到问题,您可以尝试我的 PostDock 分叉版本

带看门狗的 Pgpool-II

上述架构的一个问题是 pgpool 是单点故障。所以我也尝试使用委托的虚拟IP为pgpool-II启用Watchdog,以避免单点故障。

master (primary node1)  --\
|- slave1 (node2)       ---\     / pgpool1 (active)  \
|  |- slave2 (node3)    ----|---|                     |----client
|- slave3 (node4)       ---/     \ pgpool2 (standby) /
   |- slave4 (node5)    --/

我已经测试了以下场景,它们都运行良好:

  • 正常情况:两个 pgpool 都启动,虚拟 IP 自动应用于其中一个,在我的例子中是 pgpool1
  • 故障转移:关闭 pgpool1。虚拟 IP 将自动应用到 pgpool2,从而变为活动状态。
  • 启动失败的 pgpool:重新启动 pgpool1。虚拟 IP 将与 pgpool2 一起保存,而 pgpool1 现在作为备用服务器工作。

至于客户端应用程序,这些更改都是透明的。客户端只是指向虚拟 IP,并在上述所有场景中保持正常工作。

你可以在我的 GitHub 仓库的 watchdog 分支上找到这个项目。

于 2017-12-14T13:55:24.683 回答
0

您可以查看以下 postgresql 开源工具之一

1 松脆的数据postgresql

  1. 守护神postgresql。
于 2019-03-17T18:40:43.010 回答
0

Kubernetes 的 statefulset 是设置有状态服务的良好基础。您仍然需要一些工作来配置 PostgreSQL 副本之间的正确成员资格。

Kubernetes 有一个例子。http://blog.kubernetes.io/2017/02/postgresql-clusters-kubernetes-statefulsets.html

于 2017-09-14T23:57:36.070 回答