在Kubernetes中运行Pgpool能使配置更加简单

首先

在使用Kubernetes部署Pgpool与其他方式相比,设置变得更加简单。这是因为Kubernetes提供了相应的功能。最近,我也学习了Pgpool,并希望在本文中予以说明。

假设条件:使用PostgreSQL Operator

假设我们使用以下结构的PostgreSQL运算符。

image.png

来源:https://www.pgpool.net/docs/pgpool-II-4.3.0/ja/html/example-kubernetes.html

引用自:https://www.pgpool.net/docs/pgpool-II-4.3.0/ja/html/example-kubernetes.html

PostgreSQLのレプリケーションはOperatorが行う

PgpoolにはPostgreSQLクラスタを監視して、レプリケーションやフェイルオーバーを行う機能があります。
Kubernetesでは代わりにOperatorが監視してくれます。

PostgreSQL Operator在PostgreSQL中使用的容器映像是spilo,并已捆绑了PostgreSQL和Patroni。

 

Patroni会监视集群并自动执行故障转移。
这是另一种配置,以下附上用日语解释的页面。

image.png

引用元:https://recruit.gmo.jp/engineer/jisedai/blog/postgresql12-patroni-cluster/

ServiceがPostgreSQLの負荷分散を補助してくれる

Pgpool可通过定义每个后端PostgreSQL服务器的比重来设置如何分散负载。

KubernetesのServiceを使うと、PostgreSQLのレプリカへのアクセスの負荷分散を行ってくれます。

image.png

マスターとレプリカでは役割が違うため、それぞれServiceが分かれています。
Pgpoolは2つのServiceのDNSだけ把握すればよいため、レプリカの台数が増えても設定変更する必要がなくなります。
ServiceはPODについているラベルでバックエンドのターゲットを特定します。

 

KubernetesでのDNSは以下のように決まります。

 

然而,我认为并非完全兼容。根据客户端的不同,处理可能会偏向于主节点或副本节点。如果想要通过查询来设置如何进行分布,请务必在Pgpool中进行配置。

 

不再需要Pgpool之间的心跳。

上記の内容から、PgpoolではPostgreSQLのフェイルオーバーを行わないため、Pgpool間のPostgreSQLクラスタの状況共有は不要となります。
PgpoolにはWatchdogという状況共有を行うための仕組みがありますが、Kubernetesで動かす場合にはOFFにします。

可以使用Kubernetes的Deployment或StatefulSet来重新启动Pgpool。

 

监督者的操作说明可在以下页面中找到参考。

 

Watchdogを使用する場合、PgpoolとPostgreSQLそれぞれのスプリットブレインを考慮する必要があります。
WatchdogをOFFにできれば、Pgpool側のスプリットブレインの心配がなくなるメリットがあると思います。

具体的设定示例

以下的页面介绍了运行Pgpool的最基本设置,通过Kubernetes的配置如下:
https://www.pgpool.net/docs/pgpool-II-4.3.0/ja/html/example-kubernetes.html

backend_hostname0 = '<プライマリService名>'
backend_hostname1 = '<レプリカService名>'
backend_port0 = '5432'
backend_port1 = '5432'
backend_flag0 = 'ALWAYS_PRIMARY|DISALLOW_TO_FAILOVER'
backend_flag1 = 'DISALLOW_TO_FAILOVER'

failover_on_backend_error = off

sr_check_period = 10                        (ストリーミングレプリケーションチェック機能を利用する場合のみ)
sr_check_user='username of PostgreSQL user' (ストリーミングレプリケーションチェック機能を利用する場合のみ)

load_balance_mode = on
connection_cache = on
listen_addresses = '*'

故障转移设置被禁用了。
然后根据需要,需要添加连接数和内存等设置。

最后

这次我讲了关于最近接触到的Pgpool配置。我意识到当基础设施改变时,配置也会改变。我还会继续学习的!