(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宕机,数据会存在丢失。