我需要设置应用程序服务器集群的 IP 以连接到数据库服务器集群。对于 1 对 1,应用程序服务器到数据库服务器相当容易,但是当涉及到集群环境时,我想知道我应该如何配置/设置应用程序服务器中的 IP 以连接到多个数据库服务器,特别是在主动/被动设置中。我很困惑,因为我不确定我应该如何设置 IP,以便应用程序服务器知道它应该与哪个活动数据库服务器通信以及当主数据库服务器关闭时何时与另一个数据库服务器通信。有人可以指导我该怎么做吗?
这些是集群/HA 设置的配置:
- 我有一个连接到数据中心路由器的第 2 层交换机。
- 我有 2 台应用程序服务器和 2 台数据库服务器。
- 应用程序服务器和数据库服务器均位于自己的集群中,使用带有 Corosync、Pacemaker 和 DRBD 设置的 Debian OS。
- 应用程序服务器和数据库服务器集群都直接连接到交换机。
- 在应用程序/数据库服务器之间,我使用专用的 NIC 来进行 corosync 心跳监控。
- 我的应用程序服务器上运行的应用程序只是使用代码点火器编码的 API。
- 我的数据库包含postgesSQL和MongoDB。
答案1
只能代表 发言PostgreSQL
,因为我缺乏以下方面的知识MongoDB
:
- 我不会
DRBD
用PostgreSQL
。 - 相反,我强烈建议使用数据库查询语言ocf 资源代理。
PostgreSQL
这允许您使用自 9.1 版起实现的同步流复制来设置主动/被动集群。- 向集群添加虚拟/浮动 IP,并使用共置约束,强制它在当前分配了
PostgreSQL
主角色的节点上运行。 - 将您的应用服务器指向该虚拟/浮动 IP。
但是,这种方法也有缺点:故障转移后,您可能必须将数据从“现在的主服务器”复制到“现在的从服务器”(以使集群恢复到完全工作状态)。这不是什么大问题,因为
- 故障转移通常不会经常发生,
- 你可以使用一个方便的工具来实现这一点(
pg_basebackup
), - 取决于两个节点之间的复制不起作用的时间长度以及在此期间有多少数据被写入/从数据库删除,
PostgreSQL
在故障节点恢复运行后将自动处理这个问题。
如果您实施这种方法,我建议(自动)监视复制状态和一些详细信息,例如通过
postgres -c "psql -c \"SELECT application_name, client_addr, client_hostname, sync_state, state, sync_priority, replay_location FROM pg_stat_replication;\""
,它提供类似于application_name | client_addr | client_hostname | sync_state | state | sync_priority | replay_location --------------------+-------------+-----------------+------------+-----------+---------------+----------------- node2.example.com | 10.0.15.21 | | sync | streaming | 0 | 0/40000C8
这样,如果事情有可疑,您就会得到通知。
披露:我在生产中使用它已有大约两年了。
编辑:尽管本教程正在使用 Fedora 19,它可能也会引起您的兴趣并对您有所帮助。