- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
1)我有5个节点群集(172.30.56.60、172.30.56.61、172.30.56.62、172.30.56.63、172.30.56.129)
2)我创建了一个复制因子为3的键空间
写一致性为3,如下所示,我在分区为1的表中插入了一行,
INSERT INTO用户(user_id,user_name,user_phone)VALUES(1,'ram',9003934069);
3)我使用nodetool getendpoints实用程序验证了数据的位置,并观察到数据已复制到三个节点60、129和62中。
./nodetool getendpoints keyspacetest user 1
172.30.56.60
172.30.36.129
172.30.56.62
'1,'ram', 9003934069'
到其余节点(传输到61或63),以将RF保持为“ 3”?
最佳答案
4)现在,如果我降低节点60,Cassandra需要转移
现有数据到剩余节点的'1,'ram',9003934069'
61或63)将RF保持为“ 3”?
这不是Cassandra的工作方式-复制因子“ only”声明要在磁盘上不同节点上的Cassandra中存储多少数据副本。卡桑德拉(Cassandra)在数学上形成了节点的环。每个节点负责一系列所谓的令牌(基本上是分区键组件的哈希)。复制因子为3意味着数据将存储在节点上,并照顾到数据令牌和环中的下两个节点。
(快速的谷歌图片https://image.slidesharecdn.com/cassandratraining-161104131405/95/cassandra-training-19-638.jpg?cb=1478265472)
更改环形拓扑非常复杂,根本无法自动完成。
1)我有5个节点群集(172.30.56.60、172.30.56.61、172.30.56.62、172.30.56.63、172.30.56.129)
2)我创建了一个复制因子为3的键空间
写一致性为3,如下所示,我在分区为1的表中插入了一行,
INSERT INTO用户(user_id,user_name,user_phone)VALUES(1,'ram',9003934069);
3)我使用nodetool getendpoints实用程序验证了数据的位置,并观察到数据已复制到三个节点60、129和62中。
./nodetool getendpoints keyspacetest用户1
172.30.56.60
172.30.36.129
172.30.56.62
4)现在,如果我关闭节点60,Cassandra是否需要将现有数据传输到“ 1”,“ ram”,9003934069'到其余节点(传输到61或63),以将RF保持为“ 3”?
但是Cassandra没有这样做,是否意味着如果节点60、129和62都关闭了,我将无法在表“ user”中的分区“ 1”下读取/写入任何数据?
问题1:所以即使我有5个节点群集,如果数据/分区
它所在的位置发生故障,群集没有用吗?
否。另一方面,存在一致性级别-在其中定义多少个节点在确认成功之前必须确认您的写入和读取请求。在上面,您还采用了CL = 3和RF = 3-这意味着所有持有副本的节点都必须响应并且需要联机。如果一个故障,您的请求将一直失败(如果您的群集较大,例如6个节点,则三个联机可能是某些写入的“正确”节点)。
但是Cassandra具有可调的一致性(请参见http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html中的文档)。
您可以选择QUORUM为例。然后,需要(复制因子/ 2)+1个节点进行查询。在您的情况下(3/2)+ 1 = 1 + 1 = 2个节点。如果您确实需要一致的数据,那么QUORUM是完美的选择,因为在任何情况下,参与您的请求的至少一个节点在写入和读取之间将重叠,并具有最新数据。现在,一个节点可能已关闭,一切仍然可以进行。
但:
问题2:如果两个节点都关闭了(例如:60和129都关闭了)
61,62和63已启动并正在运行,但我无法写入任何数据
在写入一致性= 3的分区“ 1”中,为什么会这样?
由于我能够以写入一致性= 1写入数据,因此
再次说明分区的数据仅在
群集中预定义的节点,无法重新分区吗?
看上面-这就是解释。 CL = 1的写入一致性将成功,因为一个节点仍处于联机状态,并且您仅请求一个节点确认您的写入。
当然,复制因子并不是完全没有用的。即使选择了较低的一致性级别,写入操作也会复制到所有可用节点,但是您不必在客户端等待它。如果节点在短时间内(默认为3个小时)宕机,则协调器将存储丢失的写入,并在该节点再次出现并且再次完全复制您的数据时重播它们。
如果节点关闭的时间较长,则必须运行nodetool repair
并让群集重建一致的状态。无论如何,这应该按计划进行,因为维护任务可以保持群集的健康-由于网络/负载问题而可能会丢失写入,并且删除操作中的逻辑删除可能会很痛苦。
您可以将节点删除或添加到群集中(如果这样做,一次只添加一个),Cassandra将为您重新分配环。
如果删除在线节点可以将其上的数据流传输到其他节点,则可以删除离线节点,但是其上的数据将没有足够的副本,因此必须运行nodetool repair
。
添加节点会将新令牌范围分配给新节点,并自动将数据流式传输到新节点。但是不会为您删除源节点的现有数据(确保您的安全),因此在添加节点后,nodetool cleanup
是您的朋友。
Cassandra从CAP定理中选择A(有效)和P(容忍)。
(请参见https://en.wikipedia.org/wiki/CAP_theorem)。因此,您无法随时保持一致性-但QUORUM通常会绰绰有余。
保持您的节点处于监视状态,不要太担心节点故障-它只是在磁盘消失或网络丢失的所有时间发生,而是为此设计应用程序。
更新:在您丢失数据或查询之前,由用户选择集群可能发生的事情。如果需要,可以使用更高的复制因子(RF = 7,CL.QUROUM允许丢失3),和/或甚至在不同位置使用多个数据中心,以防万一整个数据中心丢失(在现实生活中会发生,请考虑网络丢失) )。
对于以下有关https://www.ecyrd.com/cassandracalculator/的评论:
集群大小3
复制因子2
写作等级2
阅读等级1
您的读取是一致的:当然,您要求所有副本都必须确认写入。
您可以在不损失任何节点的情况下生存下来而不会影响应用程序:参见上文,RF = 2和WC = 2要求所有节点在任何时候都需要响应写入。因此,对于写入,您的应用程序将受到影响,对于读取,则一个节点可能会关闭。
您可以在丢失1个节点的情况下幸免于难,而不会丢失数据:由于将数据写入2个副本,并且仅当一个节点发生故障时才从一个副本读取数据,仍然可以从另一个副本读取数据。
您实际上每次都是从1个节点进行读取:RC = 1要求您的读取由一个副本提供服务-因此,第一个确认读取的副本将执行此操作,如果一个节点发生故障则无关紧要,而另一个节点可以确认您的阅读。
您实际上每次都在写入2个节点:WC = 2请求每次写入将被两个副本确认-这也是您示例中的副本数量。因此,在写入数据时,所有节点都必须在线。
每个节点保存您数据的67%:只是一些数学;)
使用这些设置,在写入群集时,如果没有节点丢失,将无法幸免。但是,您的数据将被写入两个副本上的磁盘-因此,如果丢失一个副本,您的数据仍将保留在另一个副本上,并从失效的节点中恢复。
关于java - Cassandra (Cassandra)的高可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48056093/
我们有 2 个 cassandra 集群,第一个有旧数据,第二个有新数据。 现在我们想要将旧数据从第一个集群移动或复制到第二个集群。什么是最好的方法来做到这一点以及如何做到这一点? 我们正在使用 DS
我正在考虑安装 OpsCenter 来监控我们在 RackSpace VM 上运行的 24 节点 Cassandra 集群。过去我听说 OpsCenter 减慢了集群速度。我有点担心 OpsCente
假设我有一个复制因子(RF)= 2 的 2 节点集群。 我使用一致性 2 触发插入。当客户端等待响应时,Cassandra 开始写入这 2 个节点。中间一个节点失败,无法完成写入,而另一节点上的写入成
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足 Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以
我在 Cassandra 中有一个表,其中我用 1000 多个条目填充了一些行(每行有 10000 多列)。行中的条目更新非常频繁,基本上只是一个字段(它是一个整数)被更新为不同的值。列的所有其他值保
当Cassandra端有“掉落的突变”时,它是否向调用客户端返回相应的失败?或者即使在服务器端丢弃相应的突变并导致数据丢失,它总是成功响应调用事务的调用客户端? 在一个特定实例中,当我们的 TPS 约
我有一个 Multi-Tenancy 应用程序,其中 tenantId 将成为每个查询的一部分,因此我将其放入所有表的分区键中。 例子: CREATE TABLE users { tenantId t
根据 Datastax 文档,在 Cassandra 中先读后写是一种反模式。 每当我们在 CQLSH 中使用 UPDATE 或使用 Datastax 驱动程序来设置几列(带有 IF 和集合更新)时,
是否有命令或任何方式可以知道 Cassandra 的哪些节点上存储了哪些数据? 我对 Cassandra 很陌生,在谷歌上搜索这个问题并没有多少运气。 谢谢! 最佳答案 您可以使用 nodetool
我们有一个包含 1500 万条记录的表,而我们的表是一个 10 节点的 cassandra 集群。我们有一列有接近 20 个可重复值。是否建议在此列上建立二级索引? 最佳答案 假设在该列上完全均匀分布
Cassandra 发布了它的 technical limitations但没有提到允许的最大列数。是否有最大列数?我需要存储 400 多个字段。这在 Cassandra 中可能吗? 最佳答案 每行的
我想知道当表中有多个非 PK 列时会发生什么。我读过这个例子: http://johnsanda.blogspot.co.uk/2012/10/why-i-am-ready-to-move-to-cq
我有两个关于 Cassandra 查询结果的问题。 当我在 Cassandra 中对表进行“完全”选择(即 select * from table )时,是否保证结果将按分区标记的递增顺序返回? 例如
我无法为 Cassandra 设置 Hector。我已经浏览了 documentation和 Cassandra wiki .这些文档的问题在于,那里的很多信息都已经过时或过时(或者我缺乏知识)。无论
我正在使用 DataStax Enterprise 中 cassandra 中提供的压力测试。如果有人知道的话,我也想要一些关于它和 cassandra 的信息。 - 首先,压力测试使用哪些节点?我的
当我在 CQL 中创建表时,列的顺序是否必须精确 不是 在主键和 中不是 聚类列: CREATE TABLE user ( a ascii, b ascii, c ascii,
我有一张如下表: CREATE TABLE tab( categoryid text, id text, name text, author text, des
我正在尝试学习 Cassandra,但对术语感到困惑。 很多情况下它表示该行存储键/值对。 但是,当我定义一个表时,它更像是声明一个 SQL 表,即;您创建一个表并指定列名和数据类型。 谁能澄清一下?
如何对 cassandra 数据实现审计? 我正在寻找一个开源选项。 cassandra 是否有任何有助于审计的功能? 我可以使用触发器将记录记录到表中吗?我关注了 Triggers示例并且能够将记录
我遇到了一个问题“me.prettyprint.hector.api.exceptions.HUnavailableException:: 可能没有足够的副本来处理一致性级别。”当我有 RF=1 时,
我是一名优秀的程序员,十分优秀!