SlorCloud关于二次分片的研究以及增加shard和服务器实现动态扩容

大家好,这几天一直在学习solr,目前也已经搭建好了solrcloud,但是学长又逼着
我开始研究solr的相关问题,就比如说今天我们要面临的一个问题。

问题描述

学习solr的知道搭建集群的时候要指定shard的数目,这就会造成一个问题:我们怎
么清楚几个shard数目是合理的,或者说是满足我们的需求的。即使现在满足了需
求,但是将来需求还会变,真是蛋疼所以我们要想出一个策略来实现动态添加shard
,但是还有一个问题:索引文件会随着数据量的提升越来越大,以前的集群环境已经
容纳不了那么多的索引文件,如何实现动态添加新服务器到solr集群中,而不用重新启
动整个集群环境?所以今天实质要研究两个问题。

问题解决

实验环境:solr4.4 + jetty + zookeeper(外搭) + ubantu 系统

我们知道solr中有分裂功能,就是将一个shard分裂成两个shard,并且把该shard的
哈希值范围分成两个,这只针对路由方式是Composite的集群环境,因为只有Composite
路由方式才可以将哈希范围分成两份,这样solr主节点才可以将通过自己的负载均衡
将文档平均的分配到集群的各个节点上。但是其实你利用了分裂把一个哈希范围分成
了两个,其实这个时候就已经负载不均衡了,因为你的哈希范围比其他的shard的少一
半,好的接下里我们来实现分裂功能。

步骤一:搭建集群环境

首先我搭的集群是三个shard,除了shard1是有两个备份的,其他的两个shard是一个
备份,总共涉及到四台机器的solr服务,本来是有截图的,但是做完了实验又不爱重新
去搭建环境,毕竟很费时,所以这里跟大家交代一下就OK了。

步骤二:开始分裂

利用命令——–curl -i -v “http://xxx.xxx.xxx.190:8983/solr/admin/collections?action=
SPLITSHARD&collection=skycent&shard=shard1”
curl 是一个Linux工具,这条命令直接可以在Linux终端上使用,当然前提是安装了
此工具。
collection:是你的集合名称,我的是skycent。
shard:这个可以改成自己想分裂的shard,我这里是shard1。
可能会在执行后输出的字符中有出错的提示,但是可忽略不计,我们刷新solr
页面,看是否出现了新的两个shard,并且名称是:shard1_1和shard1_0。这表明
是从shard1分裂的两个新节点,然后记得把shard1节点的主节点和备份节点的skycent
都unload掉,这个unload操作可以在界面上的Core Admin上手动执行,也可以通过http
来实现,自己解决搞定,搞定后应该会出现如下的图片:
分裂后的集群Group

如果没有unload掉,可能会出现这种情况:当你新增加节点的时候可能会出现又多了
shard节点。如果看zookeeper集群信息/clusterstate.json,会发现新增加的shard没有哈希
范围,也就是说分配文档给节点的时候不会分配给这个节点,也就是说这个shard没有用。

步骤三:扩容新的服务器

我们本来的shard是3个,服务器是4个,分裂一个shard1后我们的shard是4个,也就是说这个
时候可以一台机器一个shard,但是我们经过步骤二之后发现,分裂的两个shard1-x都是在一个
机器上,也就是说一个机器有两个shard,我们观察步骤二之后的集群状态可以知道,这个时候
有一个新机器192:8984是备份节点,所以我们可以通过kill 190:8983这个solr服务,这样备份节
点就会成为主节点,也就是192:8984会成为主节点,这个时候四个主节点就是:
shard2:189:8983
shard3:191:8983
shard1_1:190:8984
shard1_0:192:8984
solr集群Group
这样就相当于动态的添加了新的服务器到solr集群上去了,并且一个shard有一个服务器,再继
续将刚刚kill掉的190:8983 solr服务开启,这样就作为了备份节点,并测试去添加一个新的solr
服务到集群环境中,观察发现添加的189:8984 solr 服务作为了备份节点,而没有去成为shard
节点,说明集群没有问题,搭建后的shard数目保持在4个,没有被分裂影响到数目。
solr集群Group

结束语

其实花的时间挺多的,因为网上这方面的资料很少,很多都要自己去弄,一个一个去测试,还有,
如果你一个步骤错了就要启动zookeeper,并且清空掉zookeeper中的solr集群内容,这个操作可以
用zk客户端的删除操作来执行,很浪费时间,所以写一个笔记在这,让更多人可以一起研究,如果
大家有问题可以在下方评论,我看到后会去解答,很多事情迈出第一步就好了,希望大家学习快乐。

文章目录
  1. 1. 问题描述
  2. 2. 问题解决
    1. 2.1. 步骤一:搭建集群环境
    2. 2.2. 步骤二:开始分裂
    3. 2.3. 步骤三:扩容新的服务器
  3. 3. 结束语
文章目录
  1. 1. 问题描述
  2. 2. 问题解决
    1. 2.1. 步骤一:搭建集群环境
    2. 2.2. 步骤二:开始分裂
    3. 2.3. 步骤三:扩容新的服务器
  3. 3. 结束语
,