12、solr学习-SolrCloud索引分布介绍

 

(1) 执行添加索引请求,分成两种情况

1、 Replica(在本例中是端口为8002的节点)接收到请求;

2、 Replica将请求转发至它的Leader节点(在本例中是端口为8001的节点);

3、 Leader节点最终处理该请求,并且确保所有附加在它上面的Replica节点也处理这个请求;

前提条件:通过solrcloud方式创建索引

-DzkHost=192.168.17.121:2181,192.168.17.121:2182,192.168.17.121:2183  DnumShards=2

-DzkHost=192.168.17.121:2181,192.168.17.121:2182,192.168.17.121:2183  DnumShards=2

-DzkHost=192.168.17.121:2181,192.168.17.121:2182,192.168.17.121:2183  DnumShards=2

-DzkHost=192.168.17.121:2181,192.168.17.121:2182,192.168.17.121:2183 

通过程序我们创建1 000 000索引,数据会存储在shard1,shard2两个分片上。

结论:数据分别存放到shard1,shard2上,shard1,shard2上的数据不会重复

每个shard上存储的索引时相同的,因为同一个shard下索引时复制的。

集合名称

分片名称

节点

每个节点索引数

core0

shard1

192.168.12.121:8001

501233

192.168.12.121:8003

501233

shard2

192.168.12.121:8003

498767

192.168.12.121:8004

498767

其中:总索引数=shard1索引数据 + shard2 索引数据

shard1索引数据为8001或者8002种任意获取一个节点数据。即数据为501233

Shard2索引数据为8003或者8004种任意获取一个节点数据。即数据为498767

那么总索引数据为1000000 = 501233 + 498767

验证方法

http://IP:PORT/solr/core0/select?q=\*%3A\*&wt=json&indent=true&&**distrib=false**

其中distrib=false表示仅从当前节点获取数据。

(2) 节点宕机索引情况

第一种:shard1或者shard2中任意一个节点宕机

 

查询索引:1000000 ,验证总索引数=shard1索引数据501233 + shard2 索引数据498767 结果正确

第二种:shard1或者shard2种的两个节点同时宕机

 

查询索引:501233,验证总索引数=shard1索引数据个数 501233 + shard2 索引数据个数0 ,结果 正确

总结:只要保证shard1和shard2种至少有一个节点正常,那么就可以保证数据连续正常,由于总的索引时所有shard之和,由于shard2宕机,数据会存在丢失。