【发布时间】:2018-01-08 19:46:12
【问题描述】:
https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html 如链接中所述,读取一致性级别“LOCAL_ONE”表示返回来自本地数据中心最近的副本的响应。但是,我不明白哪个是本地数据中心?是协调节点所属的那个吗?
【问题讨论】:
https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html 如链接中所述,读取一致性级别“LOCAL_ONE”表示返回来自本地数据中心最近的副本的响应。但是,我不明白哪个是本地数据中心?是协调节点所属的那个吗?
【问题讨论】:
如果您构建 cassandra 会话,则可以定义负载平衡策略。如果您没有显式配置策略,则会获得默认策略,即数据中心感知、令牌感知策略:
new TokenAwarePolicy(DCAwareRoundRobinPolicy.builder().build());
这默认是这样的:
Cluster cluster = Cluster.builder()
.addContactPoint("127.0.0.1")
.withLoadBalancingPolicy(
DCAwareRoundRobinPolicy.builder()
.withLocalDc("myLocalDC")
.withUsedHostsPerRemoteDc(2)
.allowRemoteDCsForLocalConsistencyLevel()
.build()
).build();
并且您应该将.withLocalDc() 设置为您的本地(也就是最近的)数据中心,否则驱动程序将从第一个联系点选择数据中心。
(见:http://docs.datastax.com/en/developer/java-driver/3.1/manual/load_balancing)
【讨论】:
是的,就是节点所属的dc。
必须将一致性级别为 LOCAL_ONE 的写入发送到本地数据中心中的至少一个副本节点并由其成功确认。如果写入一致性级别为 LOCAL_ONE 或 LOCAL_QUORUM,则只有与协调节点位于同一数据中心的节点必须响应客户端请求才能使请求成功。
阅读此内容以获取更多信息。 Multiple datacenter write requests
对于一致性级别为 LOCAL_ONE 的读取,返回来自最近副本的响应,由 snitch 确定,但前提是副本位于本地数据中心。联系与协调节点在同一数据中心中给定行的最近副本以完成读取请求。在后台,可能会根据表的 read_repair_chance 设置为其他副本启动读取修复。
阅读此文章了解更多信息:A two datacenter cluster with a consistency level of LOCAL_ONE
【讨论】: