Rethinkdb,错误的群集设置还是其他什么?

时间:2016-09-21 13:09:49

标签: node.js rethinkdb rethinkdb-javascript

我的群集存在很大问题。服务器因未知原因而断开连接(日志中没有任何内容)并且由于未知原因而崩溃。 我想我的群集设置可能不对。

首先,这是第一次,我理解分片,这是很棒的功能,但是:

" n每个碎片复制品"?

这意味着什么?

第二件事。如何使用" n"配置群集服务器?由于分片,我有6台服务器(我的文档记录超过10mil)但我不确定我是否正确配置了我的集群。

在我写的每台服务器上:

for example (srv1.conf)
join=srv2:port
join=srv3:port
join=srv4:port
join=srv5:port
join=srv6:port

这是将服务器添加到群集的正确方法吗?

文档中没有任何内容,如果您可以发布一些"推荐的"那将会很棒。集群配置。

第三件事是关于故障转移。在我的6集群服务器中,所有表都有6个 碎片有三个复制品。一旦我大喊大叫,例如服务器1应用程序关闭,一些疯狂的写入群集。如果在其他服务器出现故障时我没有冗余,那么群集点是什么?

我真的希望有人可以帮助我,因为当我只有一台服务器时,我的应用程序一直在工作。现在,每次某些服务器断开连接时,一切都会崩溃。我正在使用nodejs rethinkdbdash。

更新

我知道什么是shard,例如我有一个表的2mil记录,它们分布在6个服务器中(对我来说这很重要,因为读取速度很快)。我不明白什么是" replica"。每个表都配置如下,每个分片有6个分片和3个副本。从你所说的意味着,如果某个服务器关闭表将可用于读取,但它不是(说像set read_mode = outdated和app crash)。我无法改变正在阅读的应用程序的每个部分,并说read_mode =已过时。那只是糟糕的编程。

日志中没有任何内容。在dmesg的每台服务器上,我都有:

TCP: TCP: Possible SYN flooding on port 28015. Sending cookies.  Check SNMP counters.

1 个答案:

答案 0 :(得分:0)

  

服务器因未知原因而断开连接(没有任何内容)   记录)并因未知原因而崩溃。

如果日志中没有任何内容,那将很难帮助您解决崩溃问题。如果您使用systemd之类的初始化管理器,那么您的初始化经理会说什么? RethinkDB是退出还是停止响应? RethinkDB可以使用多少内存?在dmesg或您的syslog中是否有与RethinkDB相关的消息?日志是否至少告诉您服务器已断开连接? Web界面是否报告任何问题?

  

“每个碎片的副本”?

     

这意味着什么?

因此,假设我们有一个代表数据库中数据的披萨。碎片是你将披萨切成小片的地方,所以我们说我们将它切成4片(碎片)。要拥有n个副本,我们只需制作每个切片的n个副本。让我们n = 3,所以我们有4个分片,每个分片有3个副本,总共12个。现在可以做的是将这些部分分布在多个服务器上。

因此,对于您的情况,您似乎需要一个具有高可用性的系统,这需要最少3个副本(因此需要3个服务器),尽管奇数是首选,因为大多数副本必须可供数据库继续运行。要使数据库运行,每个分片的大多数副本必须可用。假设我有2个分片,每个分片有3个副本分布在6个服务器上,每个副本都有一个分片的副本。如果1台服务器出现故障,那没关系,因为会有另外2个副本(服务器存储与服务器相同的数据),并且由于2/3副本可用(大多数),数据库可以继续运行。 / p>

  

在我写的每个服务器上:...这是添加服务器的正确方法吗?   集群?

您必须指定服务器的canonical-address,这是其他服务器用来连接它的地址(不包括端口),您应该只提供1个连接参数,因为数据库会自动询问服务器它是加入连接到群集的所有服务器的地址列表。群集中的所有服务器必须才能使用canonical-address相互通信。

  

文档中没有任何内容,如果您可以发布一些内容,那就太棒了   “推荐”群集配置。

以下是我的配置文件对集群的看法:

bind=all
canonical-address=server.domain.com
driver-port=28015
cluster-port=29015
join=otherserver.domain.com:29015

cluster-tls-key=/path/to/key.pem
cluster-tls-cert=/path/to/cert.pem
cluster-tls-ca=/path/to/cert.pem

由于我的服务器需要通过Internet进行通信,因此我设置了用于群集内通信的TLS,我希望它能够加密。有关保护群集的信息,请参阅https://www.rethinkdb.com/docs/security/。您还可以加密驱动程序连接。

  

如果我没有一些冗余,那么什么是集群点   其他服务器出现故障?

您可以为数据库设置副本。我已经解释了上面的一些概念。

有关复制的信息,请访问:https://www.rethinkdb.com/docs/sharding-and-replication/