首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cassandra - Pillar应用迁移同步问题

Cassandra - Pillar应用迁移同步问题
EN

Stack Overflow用户
提问于 2015-07-23 05:30:13
回答 1查看 370关注 0票数 0

在Cassandra的同一数据中心的不同节点之间遇到同步问题。使用NetworkTopology将密钥空间的复制因子设置为3,并且在DC中有3个节点。有效地确保每个节点都有数据的副本。当节点工具状态为run时,它显示DC中的所有三个节点拥有100%的数据。

然而,该键空间中的applied_migrations列族并不同步。这很奇怪,因为在键空间中只有一个列族受到影响。所有其他柱族都在这三个节点之间完全复制。测试是通过对键空间中每个列族的行数进行计数来完成的。

代码语言:javascript
复制
keyspace_name | durable_writes | strategy_class                                       | strategy_options
--------------+----------------+------------------------------------------------------+----------------------------
core_service  |           True | org.apache.cassandra.locator.NetworkTopologyStrategy |          {"DC_DATA_1":"3"}


keyspace: core_service

Datacenter: DC_DATA_1
=====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address                      Load       Tokens  Owns (effective)  Host ID                               Rack
UN  host_ip_address_1_DC_DATA_1  3.75 MB    256     100.0%            3851106b                              RAC1
UN  host_ip_address_2_DC_DATA_1  3.72 MB    256     100.0%            d1201142                              RAC1
UN  host_ip_address_3_DC_DATA_1  3.72 MB    256     100.0%            81625495                              RAC1
Datacenter: DC_OPSCENTER_1
==========================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address                           Load       Tokens  Owns (effective)  Host ID                               Rack
UN  host_ip_address_4_DC_OPSCENTER_1  631.31 MB  256     0.0%              39e4f8af                              RAC1

查询:从core_service.applied_migrations中选择计数(*);

代码语言:javascript
复制
host_ip_address_1_DC_DATA_1 core_service applied_migrations

 count
-------
     1

(1 rows)
host_ip_address_2_DC_DATA_1 core_service applied_migrations

 count
-------
     2

(1 rows)
host_ip_address_3_DC_DATA_1 core_service applied_migrations

 count
-------
     2

(1 rows)
host_ip_address_4_DC_OPSCENTER_1 core_service applied_migrations

 count
-------
     2

(1 rows)

收到类似的错误,如以下问题所述。由于并非所有数据行都可用,因此迁移脚本会失败,因为它正在尝试创建现有表:https://github.com/comeara/pillar/issues/25

EN

回答 1

Stack Overflow用户

发布于 2015-07-23 06:05:12

我需要很强的一致性

如果你想确保你的读取是一致的,你需要使用正确的一致性级别。

对于RF3,您可以选择以下选项:

  1. Write CL ALL和read with CL一个或更多
  2. Write CL Quorum和read CL Quorum。这是打开您链接的问题的Magro推荐的内容。这也是最常见的,因为您可以释放一个节点,但仍然可以读写。
  3. Write CL one但read CL ALL。

Cassandra做了什么来提高一致性

Cassandra的反熵机制是:

Repair将确保您的节点保持一致。它为您提供了一致性基线,因此应将其作为维护操作的一部分来运行。至少比你的gc_grace_seconds运行修复的频率更高,以避免僵尸墓碑再次出现。DataStax OpsCenter提供了自动执行此任务的修复服务。

您可以手动运行:

在一个节点中修复nodetool或

nodetool修复每个节点中的-pr。-pr选项将确保您只修复节点的主要范围。

Read repair以概率方式发生(可在表def中配置)。当你读取行的时候,c*会注意到一些副本没有最新的数据并修复它。

当一个节点不能进行写操作时,提示由其他节点收集。

操纵c*模式

我注意到Pillar的全部要点是“将Cassandra模式作为代码自动管理”。这是一个危险的概念--,特别是当Pillar是一个分布式应用程序时(我不知道它是否是)。因为它可能会导致模式冲突,从而使集群处于奇怪的状态。

假设Pillar是 not 一个分布式/多线程系统,您可以确保在模式修改前后在Java驱动程序中进行模式更改之前和之后利用checkSchemaAgreement()不会破坏模式。

长期

Cassandra模式将更加健壮,并处理分布式更新。观看(并为CASSANDRA-9424投票)

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

https://stackoverflow.com/questions/31574328

复制
相关文章

相似问题

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