关于 Cassandra 复制因子
Cassandra 将数据副本存储在多个节点上,以确保可靠性和容错能力。 每个边缘键空间的复制策略决定了副本的放置节点。
一个键空间中跨 Cassandra 集群的副本总数称为键空间的复制因子。复制因子为 1 表示 Cassandra 集群中的每行只有一个副本。复制因子为 2 表示每行有两个副本,其中每个副本位于不同的节点上。所有副本同样重要;没有主实例副本或主实例副本。
在在每个数据中心都有三个或更多 Cassandra 节点的生产系统中,Edge 键空间的默认复制因子为 3。一般来说,复制因子不应超过集群中的 Cassandra 节点数。
请按照以下步骤查看 Cassandra 架构,该架构显示了每个 Edge 键空间的复制因子:
- 登录 Cassandra 节点。
- 运行以下命令:
/opt/apigee/apigee-cassandra/bin/cqlsh $(hostname -i) [-u
cassuser
-pcasspass
] -e "select keyspace_name, replication from system_schema.keyspaces;"其中,
$(hostname -i)
会解析为 Cassandra 节点的 IP 地址。或者,您可以将$(hostname -i)
替换为节点的 IP 地址。cassuser
:如果您已启用 Cassandra 身份验证,请传递 Cassandra 用户名。此为可选操作,如果您未启用 Cassandra 身份验证,则可以跳过此操作。casspass
:如果您已启用 Cassandra 身份验证,请传递 Cassandra 密码。此为可选操作,如果您未启用 Cassandra 身份验证,则可以跳过此操作。
您将看到如下所示的输出,其中每行代表一个键空间:
keyspace_name | replication kms | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'} system_distributed | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '3'} apprepo | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
您可以看到,对于数据中心 1 (dc-1),对于具有三个 Cassandra 节点的安装,kms 键空间的默认复制因子为 3。对于 Cassandra 内部的某些键空间(例如 system、system_schema 等),复制策略和复制因子可能不同。这是有意为之的系统行为。
如果向集群添加其他 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 "consistency.level" *
- 登录管理服务器节点。
- 切换到
/opt/apigee/edge-management-server/conf
目录:cd /opt/apigee/edge-management-server/conf
- 重复第 3 步。
如果向集群添加其他 Cassandra 节点,则一致性级别不受影响。