适用于私有云的 Edge v. 4.17.01
关于 Cassandra 复制因子
Cassandra 会在多个节点上存储数据副本,以确保可靠性和容错能力。 每个 Edge 键空间的复制策略决定了副本的放置节点。
Cassandra 集群中键空间的副本总数称为键空间的复制因子。复制因子为 1 表示 Cassandra 集群中每行的副本只有 1 个。复制因子为 2 表示每行有两个副本,每个副本位于不同的节点上。所有副本都同等重要;没有主副本。
在在每个数据中心都有三个或更多 Cassandra 节点的生产系统中,Edge 键空间的默认复制因子为 3。一般来说,复制因子不应超过集群中的 Cassandra 节点数量。
请按照以下步骤查看 Cassandra 架构,该架构显示了每个 Edge 键空间的复制因子:
- 登录 Cassandra 节点。
- 运行以下命令:
> /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),如果安装有三个 Cassandra 节点,则 kms 键空间的默认复制因子为 3。
如果您向集群添加其他 Cassandra 节点,默认的复制因子不会受到影响。
例如,如果您将 Cassandra 节点数量增加到 6 个,但将复制因子保持为 3,则无法确保所有 Cassandra 节点都具有所有数据的副本。如果某个节点发生故障,复制因子越高,该节点上的数据在其余节点之一上存在的概率就越高。复制因子的缺点是数据写入延迟时间会增加。
Cassandra 一致性级别简介
Cassandra 一致性级别定义为必须确认读取或写入操作才能被视为成功的 Cassandra 节点数量下限。您可以为不同的 Edge 键空间分配不同的一致性级别。
在连接到 Cassandra 进行读写操作时,消息处理器和管理服务器节点通常使用 LOCAL_QUORUM 的 Cassandra 值指定键空间的一致性级别。不过,有些键空间被定义为使用一致性级别 1。
数据中心 LOCAL_QUORUM 值的计算方式如下:
LOCAL_QUORUM = (replication_factor/2) + 1
如上所述,包含三个 Cassandra 节点的 Edge 生产环境的默认复制因子为 3。因此,LOCAL_QUORUM 的默认值为 (3/2) +1 = 2(值会向下舍入为整数)。
如果 LOCAL_QUORUM = 2,则数据中心的三个 Cassandra 节点中至少必须有两个节点响应读/写操作,操作才能成功。因此,对于三个节点的 Cassandra 集群,集群可以容忍每个数据中心有一个节点处于宕机状态。
通过将一致性级别指定为 LOCAL_QUORUM,Edge 可以避免跨多个数据中心验证操作所需的延迟时间。如果键空间使用 Cassandra QUORUM 值作为一致性级别,则必须在所有数据中心内对读写操作进行验证。
如需查看边缘消息处理器或管理服务器节点使用的一致性级别,请执行以下操作:
- 登录消息处理器节点。
- 转到 /opt/apigee/edge-message-processor/conf 目录:
> cd /opt/apigee/edge-message-processor/conf - 对于写入一致性:
> grep -ri "write.consistencylevel" * - 对于读取一致性:
> grep -ri "read.consistencylevel" * - 登录管理服务器节点。
- 切换到 /opt/apigee/edge-management-server/conf 目录:
> cd /opt/apigee/edge-management-server/conf - 重复第 3 步和第 4 步。
如果向集群添加其他 Cassandra 节点,则一致性级别不受影响。