Postgresql 是否可以通过aws网络平衡器对postgres实例进行负载平衡?

Postgresql 是否可以通过aws网络平衡器对postgres实例进行负载平衡?,postgresql,amazon-web-services,amazon-ec2,Postgresql,Amazon Web Services,Amazon Ec2,我们有一个应用程序,它在不同可用性区域的AWS EC2实例上安装了多个postgres数据库(保证同步)。我想将它们抽象到单个DNS之后,这样,如果其中一个EC2实例崩溃,客户端仍然可以访问db。我想知道我是否可以使用AWS网络负载平衡器来负载平衡我的数据库?为什么?如果没有,是否有其他标准、易于实现的解决方案可供我使用?(例如,我知道。但是,我对使用我必须自己设置的东西持谨慎态度,特别是因为我还必须复制pgpool实例…我自己刚刚尝试过,似乎您可以设置一个网络负载均衡器来负载平衡您的数据库。我

我们有一个应用程序,它在不同可用性区域的AWS EC2实例上安装了多个postgres数据库(保证同步)。我想将它们抽象到单个DNS之后,这样,如果其中一个EC2实例崩溃,客户端仍然可以访问db。我想知道我是否可以使用AWS网络负载平衡器来负载平衡我的数据库?为什么?如果没有,是否有其他标准、易于实现的解决方案可供我使用?(例如,我知道。但是,我对使用我必须自己设置的东西持谨慎态度,特别是因为我还必须复制pgpool实例…

我自己刚刚尝试过,似乎您可以设置一个网络负载均衡器来负载平衡您的数据库。我的生产设置使用它来管理故障切换,而patroni为运行状况检查提供了HTTP API。主机返回200响应,而副本返回503响应。这对于我的用例来说很好,其中副本只是用于故障切换,而不是用于复制读取。我假设你能想出一些代码,根据你的需要返回健康检查的成功响应

我将负载平衡器配置为侦听端口5432,并将运行状况检查配置为连接端口8008。我修改了postgres实例的安全组,以允许从我的VPC的IP范围进行连接,因为NLB没有安全组。通过psql连接到NLB的DNS名称按预期工作


虽然它可以工作,但我想我会坚持目前的设置,在每个应用程序实例上都有一个PgBouncer运行(因此无需担心管理一个bouncer实例池),当Consor中的leader键更改时,Consor模板更新PgBouncer.ini并重新加载PgBouncer。

您的数据库是只读的还是读/写的?前者应该是容易的,后者可能会引发很多问题。您应该能够在经典或网络模式(而不是应用程序)中使用ELB,因为它们支持原始TCP。小心身份验证和其他安全问题,您不想向所有人开放对数据库的访问。@jcaron dbs是读/写的(关于权限),但访问它的应用程序服务器(多实例应用程序)只进行读取。您指的是什么安全问题(假设我只允许应用程序服务器的安全组进入数据库)?如何配置web服务器运行状况检查以验证它们是否可以访问数据库?如果服务器没有DB访问权限,那么它的运行状况检查将失败,web服务器的负载平衡器将其退出If服务。感谢您的响应。确实非常有用。几个后续问题。1) 使用NLB时,客户端是否在每个事务上建立连接?2) 这是否取决于客户(我正在使用)?3) 如何在应用程序实例上设置pgbouncer?4) 您是作为docker容器运行它,还是让应用程序启动它?5) 我使用的是node.js,你知道我运行pgBouncer的简单方法吗?6) 您是否有指向多个数据库的.INI文件的链接?提前谢谢。我不知道,我没有测试足够长的时间来回答这个问题。不能说,我只试过psql 3-4。我通过systemd运行pgbouncer,应用程序的服务文件取决于pgbouncer。5.我会通过systemd/upstart/init运行它。:)6.我不知道,但您只需要在ini文件中定义多个主机行。