gpt4 book ai didi

erlang - 使用 poolboy 和 epgsql 进行 PostgreSQL 故障转移

转载 作者:行者123 更新时间:2023-12-02 05:51:24 25 4
gpt4 key购买 nike

我正在构建一个使用 poolboy 的 Erlang 应用程序用于连接池,以及 epgsql与 PostgreSQL 对话。

我想处理 PostgreSQL 故障转移,并且想知道构建应用程序的最佳方法是什么。

我应该或者可以:

  • 为每个 PG 对等方分配一个池,并在上面的 poolboy 上处理此问题。即:当我检测到原来的PG服务器宕机时,我可以杀死池吗?有没有一种 Erlang 惯用的方法来决定哪个池仍然存在?
  • 当我检测到 PG 服务器关闭时,杀死并重新启动工作人员?有没有惯用的方法来做到这一点?
  • 我的工作线程是否可以从一台 PG 服务器故障转移到另一台服务器?
  • 还有别的事吗?

最佳答案

使用epgsql,当主数据库出现故障时,套接字连接将中止。由于连接进程链接到工作进程,因此工作进程终止并由主管重新启动。

因此,您所要做的就是(在 my_worker:init 中)处理来自 pgsql:connect 的错误,然后连接到备用服务器:

case pgsql:connect(Primary, Username, Password, Opts) of
{ok, C} -> {ok, #state{conn=C}};
_Other -> pgsql:connect(Standby, Username, Password, Opts)
end.

在我的(诚然非常粗略的)测试中,这似乎工作正常。

关于erlang - 使用 poolboy 和 epgsql 进行 PostgreSQL 故障转移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20690932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com