1

我似乎找不到很多关于 RethinkDB 中的集群如何实际工作的文档。

  1. 在 Cassandra 中,我通过定义一个或多个主机连接到集群,因此如果其中一个主机关闭,甚至已被删除,我仍然可以连接到整个集群,然后代码/配置将被更新,以反映更改我的主机 IP 地址。

据我了解,RethinkDB 没有这样的逻辑,我需要自己实现它,但我仍然会一直连接到整个集群,对吗?

  1. 创建数据库时,它是为整个集群创建的“某种”,没有办法也不需要指定负责处理它的确切服务器。当创建表并且我没有指定主副本标签时,哪个服务器将是主副本?如果我指定一个分配给多个服务器的标签 - 同样的问题适用。如何选择将成为主要副本的最终服务器?
4

1 回答 1

4

在 Cassandra 中,我通过定义一个或多个主机连接到集群,因此如果其中一个主机关闭,甚至已被删除,我仍然可以连接到整个集群,然后代码/配置将被更新,以反映更改我的主机 IP 地址。

在 RethinkDB 中,您通过连接到集群中的节点来连接到集群。该节点将负责与集群中的所有其他节点进行通信。如果该节点与集群断开连接,那么您可能无法进行写入或读取,具体取决于您的集群分片和复制。如果该节点发生故障,您将无法执行任何操作。此时,您可以尝试连接到另一个节点。

据我了解,RethinkDB没有这样的逻辑,需要自己实现

是的,如果您的节点出现故障,RethinkDB 不会自动将您重新连接到集群中的另一个节点。话虽如此,这可能就像拥有多个连接并在它们之间切换一样简单(除非我错过了什么!)。

创建数据库时,它是为整个集群创建的“某种”,没有办法也不需要指定负责处理它的确切服务器。

是的,当您创建数据库时,它是为整个集群创建的。数据库并不真正“存在”在特定节点中。只有表存在于特定节点中。

当创建表并且我没有指定主副本标签时,哪个服务器将是主副本?

RethinkDB 会自动处理这个问题。它将根据以下内容选择主副本所在的服务器:

  1. 服务器分布负载(哪些服务器有更多的表和数据)。
  2. 特定服务器是否已经是该表的主要/次要服务器。

如果要手动控制primary或​​secondary在哪个服务器结束,可以通过数据库table_config中的表手动设置rethinkdb。(你在那个数据库上达到了顶峰。它让你更好地了解 RethinkDB 的工作原理!)

如果我指定一个分配给多个服务器的标签 - 同样的问题适用。

和上面一样。

如何选择将成为主要副本的最终服务器?

和上面一样。


在文档方面,我建议如下:

分片和复制:http ://rethinkdb.com/docs/sharding-and-replication/ (虽然你的问题表明你可能已经读过这个:))

于 2015-04-20T18:06:10.983 回答