我们的应用程序在不同可用区域的AWS EC2实例上安装了多个postgres数据库(保证同步)。我想在单个DNS后面抽象它们,这样,如果其中一个EC2实例崩溃,客户端仍然可以访问数据库。我想知道我是否可以使用AWS网络负载均衡器来平衡我的数据库?为什么或者为什么不?如果没有,是否有其他标准,易于实施的解决方案,我可以使用? (我知道http://www.pgpool.net/mediawiki/index.php/Main_Page例如。但是,我对使用我自己设置的东西很谨慎,特别是因为我必须复制pgpool实例......)
答案 0 :(得分:3)
刚刚尝试过,看起来您可以设置网络负载均衡器来对数据库进行负载均衡。我的生产设置使用patroni来管理故障转移,而patroni提供了一个用于运行状况检查的HTTP API。主服务器返回200响应,而副本返回503.这适用于我的用例,其中副本仅用于故障转移,而不是用于复制读取。我假设你可以提出一些代码,根据你的需要为健康检查返回一个成功的响应。
我将负载均衡器配置为侦听端口5432,并将运行状况检查连接到端口8008.我修改了postgres实例的安全组,以允许来自我的VPC的IP范围的连接,因为NLB没有&# 39;有安全小组。通过psql连接到NLB的DNS名称按预期工作。
虽然它有效但我认为我会坚持使用我的当前设置,它在每个应用程序实例上运行PgBouncer(因此无需担心管理一个保镖实例池)并使用consul-template更新pgbouncer.ini当领导者密钥在领事馆中发生变化时重新加载PgBouncer。
答案 1 :(得分:-1)
你问题的简短回答是否定的。
1)如果您愿意管理自己的服务,那么您可以使用Pgpool。这有助于实现您的目标。另一种选择是HAProxy。
2)AWS不为数据库服务器提供负载均衡器。您将需要使用第7层SQL感知负载均衡器或第4层感知负载均衡器以及“智能”数据库连接器客户端,例如MySQL Connector(MySQL示例)。
3)亚马逊商城提供您可以调查的商业和开源解决方案。