2016-09-21 60 views
0

我对群集有很大的问题。由于未知原因,服务器会一直断开连接(日志中没有任何内容)并导致崩溃。 我想我可能有群集设置错误。Rethinkdb,错误的群集设置或其他?

首先,这是第一次,我的理解分片,这是伟大的功能,但什么是:

“每个碎片ñ副本”?

这是什么意思?

第二件事。如何使用“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。

UPDATE

我知道什么是分片,我有例如一个表2密耳的记录和他们6个的服务器之间分配(对我来说,这是因为读取速度很重要)。我不明白什么是“副本”。每个表都是这样配置的,每个分片有6个分片和3个副本。从你所说的这意味着如果某个服务器出现故障表可供读取,但它不是(像设置read_mode =过时和应用程序崩溃)。我没有办法改变正在读取的应用程序的每一部分,并说read_mode =过期。这只是糟糕的编程。

日志中没有任何东西。在dmesg的每个服务器我有这样的:

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

回答

0

服务器断开保持对不明原因(没有什么 日志等)和崩溃的原因未知。

如果日志中没有任何内容,那么很难帮助您解决崩溃问题。如果您使用像systemd这样的初始管理器,您的初级经理会说些什么? RethinkDB退出或停止响应了吗?有多少内存可用于RethinkDB?在dmesgsyslog有没有关于RethinkDB的消息?做日志至少告诉你服务器断开连接? Web界面是否报告任何问题?

“n个副本每片”?

这是什么意思?

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

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

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

您必须指定服务器的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 

我设置TLS进行集群内通信作为我的服务器需要通过互联网进行交流,我希望它被加密。有关保护群集的信息,请参阅https://www.rethinkdb.com/docs/security/。您也可以加密驱动程序连接。

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

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

有关复制的信息可以在这里找到:https://www.rethinkdb.com/docs/sharding-and-replication/

+0

你可以看看我的更新。 – pregmatch

+0

我已经解释了我的文章中有哪些副本,因为它们只是一个分片的副本。你描述的内容听起来像是驱动程序连接的问题,而不是集群通信(即它不是数据库的错误,这是你的应用程序/驱动程序的错误)。你使用什么数据库驱动程序?您是否使用可能被分组到单个查询中的查询发送服务器垃圾邮件?您是否试图一次运行大量查询(超过1000个)?如果是这样,您的驱动程序可能会为每个连接创建更多连接,并导致连接问题。 – 1lann

+0

服务器正在脱机,然后表正在重新配置。我有6台服务器,每张桌上有6个碎片,每个碎片有3个副本。 – pregmatch