Cassandra 多个节点位于同一服务器上的不同数据中心

Posted

技术标签:

【中文标题】Cassandra 多个节点位于同一服务器上的不同数据中心【英文标题】:Cassandra multiple nodes in different data centers on same server 【发布时间】:2015-09-02 13:37:27 【问题描述】:

只是想知道我是否可以在同一物理服务器上配置来自不同数据中心的多个节点。示例 - 想要拥有 2 个数据中心,每个数据中心有 3 个节点。每个数据中心的 1 个节点将位于每台服务器上。

总共 2 个数据中心,3 个物理服务器上的 6 个节点。

【问题讨论】:

【参考方案1】:

您可以按照您的描述进行技术配置;但是,DataCenter 通常被认为是一个位置,因此在两个位置中拥有节点但配置为数据中心会令人困惑(尤其是对于以后必须对环境进行故障排除的任何人)。

最佳做法是在每个数据中心(实际上位于每个数据中心中)拥有 3 个节点的拓扑。然后,您可以将集群配置为让您的数据在两个数据中心中以实现可用性,并在单个数据中心内为所有读取、写入等设置适当的延迟......

例如,在每个数据中心使用 RF:3,然后使用 LOCAL_QUORUM 的一致性将平衡数据可用性,同时减少您的请求延迟。此示例配置将确保读取/写入发生在单个数据中心(比跨数据中心的延迟更低),但确保数据在两个数据中心之间保存(最终设计一致)。

【讨论】:

感谢克里斯的回复。这是针对开发人员的测试/游乐场环境。只是想最小化硬件。这不适用于任何类型的生产或真实环境。【参考方案2】:

是的,可以遵循您列出的拓扑,但请考虑以下情况

在单台机器上使用来自不同 DC 的两个节点,您很有可能将数据单元复制到两个不同数据中心节点的单台机器上。如果单台机器出现故障,您将丢失一份数据的两个副本。

假设您的 RF 为 DC1:2 DC2:2 并使用 Quorum 的 CF,您将需要 3 个节点来响应读取请求。当一台物理服务器宕机时,一个数据单元将丢失 2 个副本,您的读取操作将失败,实际上具有相同 CF 的写入操作也会失败。

【讨论】:

感谢 Aravind 的回复。这是针对开发人员的测试/游乐场环境。只是想最小化硬件。这不适用于任何类型的生产或真实环境。

以上是关于Cassandra 多个节点位于同一服务器上的不同数据中心的主要内容,如果未能解决你的问题,请参考以下文章

不同节点上的 Pod 无法互相 ping 通

如何在 Cassandra 节点上实现数据本地化

cassandra中的分区计数

副本存储在cassandra环中的哪个节点?

Cassandra 错误消息:由于本地暂停,未将节点标记为关闭。为啥?

同一服务器上的 Laravel 4.2 环境