关于 Cassandra 复制因子和一致性级别

关于 Cassandra 复制因子

Cassandra 将数据副本存储在多个节点上,以确保可靠性和容错能力。 每个边缘键空间的复制策略决定了副本所在的节点 。

Cassandra 集群中键空间的副本总数称为 键空间的复制因子。复制因子为 1 表示只有一个 创建 Cassandra 集群中每一行的副本。复制因子为 2 表示 每行的副本,其中每个副本位于不同的节点上。所有副本同样重要 没有主实例或主实例副本。

在在每个数据中心有三个或更多 Cassandra 节点的生产系统中,默认的 Edge 键空间的复制因子为 3。一般来说,复制因子 不应超过集群中的 Cassandra 节点数。

按照以下步骤查看 Cassandra 架构,其中显示了复制因子 每个 Edge 键空间:

  1. 登录 Cassandra 节点。
  2. 运行以下命令:
    /opt/apigee/apigee-cassandra/bin/cassandra-cli -h $(hostname -i) <<< "show schema;"

    其中,$(hostname -i) 会解析为 Cassandra 节点的 IP 地址。或者您 可以将 $(hostname -i) 替换为节点的 IP 地址。

对于每个键空间,您将看到以下形式的输出:

create keyspace kms
  with placement_strategy = 'NetworkTopologyStrategy'
  and strategy_options = {dc-1 : 3}
  and durable_writes = true;

您可以看到,对于数据中心 1,dc-1,是 kms键空间为 3 表示 三个 Cassandra 节点进行安装。

如果向集群添加其他 Cassandra 节点,则默认复制因子不会 。

例如,如果您将 Cassandra 节点数增加到 6 个, 三个因素,您并不能确保所有 Cassandra 节点都有所有数据的副本。如果 复制因子越高,表示节点中的数据就越有可能 存在于其中一个其余节点上复制因子越高,其缺点就是越 数据写入的延迟时间

关于 Cassandra 一致性级别

Cassandra 一致性级别定义为必须 在读取或写入操作被视为成功之前,应先确认这些操作。 可以为不同的 Edge 键空间分配不同的一致性级别。

连接到 Cassandra 以执行读写操作时,消息处理器和管理 服务器节点通常使用 Cassandra 值 LOCAL_QUORUM 来 指定键空间的一致性级别。不过,有些键空间定义为使用 是 1 的一致性级别

数据中心的 LOCAL_QUORUM 值的计算公式为:

LOCAL_QUORUM = (replication_factor/2) + 1

如上所述,采用 三个 Cassandra 节点就是 3因此,LOCAL_QUORUM 的默认值 = (3/2) +1 = 2(该值向下舍入为整数)。

如果 LOCAL_QUORUM = 2,则数据中至少有三个 Cassandra 节点中的两个 中心必须响应读/写操作,操作才能成功。对于三个节点 因此,该集群可以容忍每个数据中心有一个节点发生故障。

通过将一致性级别指定为 LOCAL_QUORUM,Edge 可避免延迟 验证跨多个数据中心的运行情况。如果键空间使用了 Cassandra QUORUM 值作为一致性级别,则读写操作必须 所有数据中心都进行了验证。

要查看边缘消息处理器或管理服务器节点使用的一致性级别,请执行以下操作:

  1. 登录到消息处理器节点。
  2. 切换到 /opt/apigee/edge-message-processor/conf 目录:
    cd /opt/apigee/edge-message-processor/conf
  3. 为了确保写入一致性:
    grep -ri "write.consistencylevel" *
  4. 为确保读取一致性:
    grep -ri "read.consistencylevel" *
  5. 登录管理服务器节点。
  6. 切换到 /opt/apigee/edge-management-server/conf 目录:
    cd /opt/apigee/edge-management-server/conf
  7. 重复第 3 步和第 4 步。

如果向集群添加其他 Cassandra 节点,则一致性级别不受影响。