0

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

首先,这是第一个,我了解分片,这是一个很棒的功能,但有哪些:

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

那是什么意思?

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

在我写的每台服务器上:

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

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

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

第三件事是关于故障转移。在我的 6 个集群服务器中,所有表都有 6 个
分片和三个副本。一旦我大声喊叫,例如服务器 1 应用程序出现故障,并且一些疯狂的写入正在集群上。如果其他服务器出现故障,如果我没有一些冗余,那么集群的意义何在?

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

更新

我知道分片是什么,例如,一张表有 200 万条记录,它们分布在 6 台服务器上(对我来说这很重要,因为读取速度)。我不明白什么是“复制品”。每个表都是这样配置的,6 个分片,每个分片 3 个副本。从您所说的来看,这意味着如果某些服务器出现故障,表将可供读取,但事实并非如此(例如 set read_mode=outdated and app crash)。我无法更改正在读取的应用程序的每个部分并说 read_mode= 已过时。那只是糟糕的编程。

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

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

1 回答 1

0

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

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

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

那是什么意思?

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

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

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

您必须指定服务器的canonical-address,这是其他服务器将用来连接到它的地址(不包括端口),并且您应该只提供 1 个 join 参数,因为数据库会自动向它正在加入的服务器询问所有地址的列表连接到集群的服务器。集群中的所有服务器必须能够使用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,因为我的服务器需要通过 Internet 进行通信,并且我希望它被加密。有关保护集群的信息,请参阅https://www.rethinkdb.com/docs/security/ 。您还可以加密驱动程序连接。

如果其他服务器出现故障,如果我没有一些冗余,那么集群的意义何在?

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

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

于 2016-09-22T09:59:47.200 回答