避免将Cassandra部署为全网格

时间:2015-09-01 14:33:00

标签: cassandra

我们希望使用Cassandra进行分布式配置管理。

我们的部署采用“树”结构。 即我们有一个单独的中央管理数据中心(EMS),应该“看到”所有托管数据中心(SDCA,DSCB,SDCC ......)。 每个托管数据中心只能看到自己的数据,可能看不到其他托管数据中心的数据(例如SDCA不需要查看SDCB的数据)。

在网络方面,托管数据中心不是直接相互连接,而是仅通过中央数据中心(EMS)连接。

            +------+
            | EMS  |
            +------+
                |
                |
    +-----------+-----------+
    |           |           |
    |           |           |
+--------+   +-------+   +-------+
| SDC-A  |   | SDC-B |   | SDC-C |  ...
+--------+   +-------+   +-------+

这个结构是否可以用Cassandra实现,或者Cassandra是否在其所有节点之间强制实现完整的网格?

1 个答案:

答案 0 :(得分:1)

您可以通过键空间定义控制Cassandra中数据的位置。

对于您只想存储在SDC-A中的数据,您可以创建如下的键空间:

CREATE KEYSPACE SDCA WITH replication = {'class': 'NetworkTopologyStrategy', 'SDC-A': '1'};

然后,您将在键空间SDCA中创建表,并且插入这些表的任何数据将仅存储在名为SDC-A的数据中心中。好处是客户端可以连接到整个集群中的任何节点来执行这些插入,Cassandra会将数据路由到SDC-A,而不是将其存储在任何其他数据中心。

因此,对于您的示例,您可以创建四个键空间,每个数据中心有一个键空间,每当插入数据时都可以使用所需的键空间。

或者您可以创建三个键空间,其中每个键空间将数据复制到EMS和一个SDC。但是如果你把A / B / C中的所有内容复制到EMS,你需要小心,因为它的EMS数据加载量是它的三倍。

现在,如果您实际上不想将A / B / C中的数据复制到EMS,那么您仍然可以从EMS中的节点查询数据,因为Cassandra将只联系请求的键空间中的节点以获取数据。其缺点是访问远程数据中心的延迟会更长。

但这假设您在所有数据中心之间建立了连接,因此如果A / B / C无法相互通信,您将无法以这种方式利用Cassandra多数据中心支持。