副本及复制策略
在创键空间时需要指定副本的数量及复制策略。副本策略主要有两大类,一类是SimpleStrategy,另外一类是NetworkTopologyStegy。
SimpleStrategy
单数据中心时使用,根据分区器决定第一个副本所在的节点。其余的副本在环中按顺时针方向寻找节点放置。
准备测试环境
为了方便测试,将每个物理节点的虚拟节点数量设置为2.设置方法如下:
在Cassandra.yaml文件中,将num_tokens的值设为2.
上图是集群中节点ip与token的关系。可以看出一共有三个节点,每个节点有2个token。
然后创键复制因子为2,复制策略为SimpleStrategy的键空间token2。
create keyspace token2
with replication =
{'class':'SimpleStrategy', 'replication_factor' : 2}
然后创建表emp:
use token2;
create table emp(
emp_id int primary key ,
emp_name text);
向表中插入一条数据
insert into emp(emp_id, emp_name) VALUES (1,'zhao')
验证复制策略
查询该数据所在的节点:
如上图所示,数据的两个副本位于192.168.1.7和200.1.1.12两个节点上。
使用token函数获取数据的token值:
命令如下:
select token(1) from emp;
结果如下:
与节点的token对比可知:
该数据token值位于200.1.1.12和192.168.1.7之间。按一致性哈希算法第一个副本应该存储再192.168.1.7节点上。第二个副本存储在下一个节点上。但下一个虚拟节点还是192.168.1.7。实际情况是选择存储在了下一个物理节点不同的虚拟节点上,也就是200.1.12。与监控的结果一致。
再插入一条数据重复实验
命令:
insert into emp(emp_id, emp_name) VALUES (2000,'su')
数据所在节点:
该数据的token值:
不知为什么同一个token值显示了三行。
983405387276532897小于9167364645887864740,大于463502067846057248。
经分析后,发现副本的位置复合SimpleStratgey策略。
NetworkTopologyStegy
该策略允许分区器为每个数据中心指定一个不同的副本因子。再一个数据中兴,会适当的将副本分配到不同机架来得到最大可用性。