2016-06-24 65 views
1

我有一个快速生成测量的过程,我正在将它们存储在Cassandra中。该进程在数据中心的服务器上运行,并且在同一个数据中心中有一个Cassandra节点以及另一个节点。如果生成测量结果的服务器失去连接性,我希望将测量结果记录在本地,然后在连接恢复时让数据能够正确处理。是否有可能运行某种本地只写Cassandra节点(使用最小的硬盘空间),它连接到其他节点,还是必须通过某种消息总线?本地只写Cassandra节点

回答

1

你想要的是“只写”节点和中心节点。卡桑德拉没有直接的支持。 以下是您的选项

在每个写入节点和主服务器上都有像Apache Kafka(我个人最喜欢的)这样的消息总线。将数据写入每个节点上的kafka,然后使用kafka-mirror-maker将每个节点的kafka镜像到主服务器。在主服务器上,编写一个小应用程序,将从卡夫卡收到的所有数据写入cassandra。如果连接断开,节点的kafka将仍然保存数据,当连接恢复时,镜像制造商将继续停止。

对于您有,创建一个单独的一套所有keyspaces的每个节点,分配一个数据中心到每个节点和一个到你的中央服务器,设置每个节点将复制其keyspaces复制设置到中央服务器(即到中央数据中心),而不是到其他节点。例如,您有2个逻辑密钥空间(kA,kB),2个节点(每个节点上分别为dc1,dc2数据中心名称)和主服务器(数据中心名称:dc0)。 您需要创建kA_dc1 kB_dc1,kA_dc2 kB_dc2密钥空间并设置以下复制设置。

  • kA_dc1,kB_dc1:复制DC1和DC0
  • kA_dc2,kB_dc2:复制DC2和DC0

之后,你需要修改你的程序查询所有keyspaces(因为密钥空间包含相同的模式,应该很容易)