首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rethinkdb,集群设置错误还是其他原因?

Rethinkdb,集群设置错误还是其他原因?
EN

Stack Overflow用户
提问于 2016-09-21 21:09:49
回答 1查看 211关注 0票数 0

我的集群有很大的问题。服务器总是因为未知的原因而断开连接(日志中没有任何东西),并且因为未知的原因而崩溃。我想我可能把集群设置错了。

首先,这是第一个,我理解分片,这是一个很好的功能,但什么是:

“每个分片有n个副本”?

那是什么意思?

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

在我编写的每个服务器上:

代码语言:javascript
复制
for example (srv1.conf)
join=srv2:port
join=srv3:port
join=srv4:port
join=srv5:port
join=srv6:port

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

文档中什么也没有,如果你能发布一些“推荐的”集群配置,那就太好了。

第三件事是关于故障转移。在我的6集群服务器中,所有表都有6个

带有三个副本的分片。例如,一旦我喊停了,服务器1的应用程序就会宕机,集群上就会出现一些疯狂的写操作。如果其他服务器宕机,我没有一些冗余,那么群集的意义何在?

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

更新

我知道什么是分片,例如,我有一个表的2mil记录,它们分布在6个服务器上(对我来说,这是很重要的,因为读取速度)。我不明白什么是“复制品”。每个表都是这样配置的,每个分片6个分片,每个分片3个副本。根据您所说的,这意味着如果某个服务器宕机,表将可供读取,但它不是(说一些类似于设置read_mode=outdated和应用程序崩溃)。有没有办法,我将改变每一个部分的应用程序正在做读取,并说read_mode=过时。这只是糟糕的编程。

日志里什么都没有。在dmesg中的每个服务器上,我都有:

代码语言:javascript
复制
TCP: TCP: Possible SYN flooding on port 28015. Sending cookies.  Check SNMP counters.
EN

回答 1

Stack Overflow用户

发布于 2016-09-22 17:59:47

服务器总是因为未知的原因断开连接(日志中没有任何内容),并且因为未知的原因而崩溃。

如果日志中没有任何东西,就很难帮助您解决崩溃问题。如果你使用像systemd这样的初始化管理器,你的初始化管理器会怎么说?RethinkDB是退出了还是停止了响应?有多少内存可供RethinkDB使用?dmesg或您的syslog中是否有任何与RethinkDB相关的消息?日志至少会告诉您服务器已断开连接吗?web界面是否报告了任何问题?

“每个分片n个副本”?

那是什么意思?

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

因此,对于您的情况,您似乎想要一个具有高可用性的系统,它至少需要3个副本(即3个服务器),尽管奇数是首选,因为大多数副本必须可用,数据库才能继续运行。要使数据库正常运行,每个分片的大多数副本都必须可用。假设我有2个分片,每个分片有3个副本分布在6个服务器上,每个分片都有一个分片的副本。如果一台服务器宕机了,那也没关系,因为还会有另外两个副本(存储与宕机的服务器相同的数据的服务器),而且因为2/3的副本是可用的(大多数),所以数据库可以继续运行。

我写的每个服务器上的

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

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

文档中什么都没有,如果你能发布一些“推荐的”集群配置,那就太好了。

下面是集群的配置文件:

代码语言:javascript
复制
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,因为我的服务器需要通过Internet进行通信,并且我希望对其进行加密。有关保护群集的信息,请参阅https://www.rethinkdb.com/docs/security/。您还可以加密驱动程序连接。

如果我没有一些冗余,如果其他服务器宕机,那么群集的点是什么?

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39617505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档