solrcloud(solr云)是基于 solr 和 zookeeper 的分布式搜索方案,它的主要思想是使用zookeeper作为solrcloud集群的配置信息中心,统一管理solrcloud的配置,比如solrconfig.xml和managed-schema。
当你需要大规模,高容错率,分布式索引和检索能力时使用solrcloud。当索引量很大,搜索请求并发很高,这时需要使用solrcloud满足这些需求。当一个系统的索引数据量少的时候是不需要使用solrcloud的。
solrcloud 一般都是解决大数据量,大并发的搜索服务。
solrcloud将索引数据进行shard拆分(分片),每个分片有多台服务器共同完成,当一个索引或搜索请求过来时会分别从不同的shard的服务器中操作索引。
它有几个特色功能:
1)集中式的配置信息:使用zk进行集中配置,启动时可以指定把solr的相关配置文件上传zookeeper,多机器共用同一套配置。这些zk中的配置不会再拿到本地缓存,solr直接读取zk中的配置信息。另外配置文件的变动,所有机器都可以感知到。
2)自动容错:solrcloud对索引分片,并对每个分片(shard)创建多个replication。每个 replication 都可以对外提供服务。一个 replication 挂掉不会影响索引服务,更强大的是,solrcloud还能自动的在其它机器上帮你把失败机器上的索引replication重建并投入使用。
3)近实时搜索:立即推送式的replication(也支持慢推送),可以在秒内检索到新加入索引。
4)查询时自动负载均衡:solrcloud 索引的多个replication可以分布在多台机器上,均衡查询压力,如果压力大,可以通过扩展机器,增加replication来减缓。
除此之外,solrcloud还提供了其他一些特色功能:
1) 可将索引存储在HDFS上
2)通过MR批量创建索引
3)强大的restful API
一、准备工作
1.系统及软件版本
系统版本:centos7.5、zookeeper版本:zookeeper-3.4.12、solr版本:solr-7.3.1
2.安装2台虚拟机(最好3台或3台以上)
虚拟机ip 192.168.0.242,192.168.0.243
3.给每台机器安装jdk
二、zookeeper集群安装
1.解压zookeeper
tar -zxvf zookeeper-3.4.12.tar.gz
或者使用
[root@localhost ~]# tar -xvf zookeeper-3.4.12.tar.gz -C /usr/local
2.创建 data和log目录用于存放数据
mkdir /tmp/zdatadir
mkdir /tmp/zlogdir
3.拷贝zookeeper配制文件zoo_sample.cfg
cp conf/zoo_sample.cfg conf/zoo.cfg
4.修改配置文件 zoo.cfg
vi conf/zoo.cfg
加入如下如内容:
dataDir=/tmp/zdatadir
dataLogDir=/tmp/zlogdir
# zookeeper集群
server.1=192.168.0.242:2888:3888
server.2=192.168.0.243:2888:3888
5.在/tmp/zdatadir/下创建myid文件 并写入对应的数字
注意:myid文件内容中的数字要对应,在192.168.0.242服务器上的myid 数字为1,在192.168.0.243服务器上的myid 数字为2。这些数字可以任意 但要和zoo.cfg中的server.数字中的数字一致。
6.开启zookeeper端口
[root@solr bin]# firewall-cmd --add-port=2181/tcp --zone=public --permanent
success
[root@solr bin]# firewall-cmd --add-port=2888/tcp --zone=public --permanent
success
[root@solr bin]# firewall-cmd --add-port=3888/tcp --zone=public --permanent
success
7.重启防火墙以使改动生效
[root@solr bin]# firewall-cmd --reload
success
8.启动zookeeper集群
进入 zookeeper中的bin目录
./zkServer.sh start
查看集群状态
./zkServer.sh status 刚启动可能会有错误,集群中其他节点一并起来后就正常了
./zkServer.sh stop 停止
./zkServer.sh restart 重启
./zkCli.sh 连接zookeeper集群
9.安装成功的结果如下 1个 leader 1个follower(如果是三台机器,则为1个leader,2个follower)
[root@solr bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@solr bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: leader
[root@solr bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@solr bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
注意:
zookeeper日志文件为:zookeeper.out
默认位置:zookeeper-3.4.12/bin 下
查看zookeeper日志方法:
[root@solr1 bin]# tail -f zookeeper.out
三、solr集群的搭建
1.在 /usr/local/ 下新建文件夹solrcloud,然后解压 solr-7.3.1.tgz 到 /usr/local/solrcloud目录下
[root@solr ~]# ls
anaconda-ks.cfg solr-7.3.1.tgz zookeeper-3.4.12.tar.gz
[root@solr ~]# mkdir /usr/local/solrcloud
[root@solr ~]# tar -xvf solr-7.3.1.tgz -C /usr/local/solrcloud
2.进入solr解压文件夹,修改solr bin目录下的solr.in.sh文件
[root@solr ~]# cd /usr/local/solrcloud/solr-7.3.1/bin
[root@solr bin]# ls
init.d install_solr_service.sh oom_solr.sh post solr solr.cmd solr.in.cmd solr.in.sh
修改bin下solr.in.sh文件
ZK_HOST="192.168.0.242:2181,192.168.0.243:2181"
去掉 ZK_CLIENT_TIMEOUT 的注释
即
# Set the ZooKeeper connection string if using an external ZooKeeper ensemble
# e.g. host1:2181,host2:2181/chroot
# Leave empty if not using SolrCloud
#ZK_HOST=""# Set the ZooKeeper client timeout (for SolrCloud mode)
#ZK_CLIENT_TIMEOUT="15000"
改为:
# Set the ZooKeeper connection string if using an external ZooKeeper ensemble
# e.g. host1:2181,host2:2181/chroot
# Leave empty if not using SolrCloud
ZK_HOST="192.168.0.242:2181,192.168.0.243:2181"# Set the ZooKeeper client timeout (for SolrCloud mode)
ZK_CLIENT_TIMEOUT="15000"
最好再修改3处:
3.启动组成solrcloud的各个solr(不能再用 ./solr start -force 命令了,另外在启动solrcloud之前一定要先启动zookeeper,否则报500)
进入/usr/local/solrcloud/solr-7.3.1/bin 后:
[root@solr bin]# ./solr start -cloud -force
或
[root@solr bin]# ./solr restart -cloud -force
1. 上传配置
solrcloud使用zookeeper进行统一配置管理,那么怎么上传配置到zookeeper?
a. 我先把要上传的配置准备好,放在/usr/local/solrcloud/solr-7.3.1/server/solr/configsets 目录下,如图
b. 然后使用/usr/local/solrcloud/solr-7.3.1/server/scripts/cloud-script 目录下的 zkcli.sh 命令进行上传:
[root@solr1 cloud-scripts]# ./zkcli.sh -zkhost solr1:2181,solr2:2181 -cmd upconfig -confdir /usr/local/solrcloud/solr-7.3.1/server/solr/configsets/storages/conf -confname storages
再比如:
./zkcli.sh -zkhost 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181 -cmd upconfig -confdir /usr/local/solrcloud/solr-7.3.1/server/solr/configsets/products/conf/ -confname products
2. 通过指定配置创建 collection
进入solr的bin目录,然后执行命令类似如下:
[root@solr1 bin]# ./solr create_collection -c storages -shards 2 -replicationFactor 1 -n storages -force
Re-using existing configuration directory storages
Created collection 'storages' with 2 shard(s), 1 replica(s) with config-set 'storages'
-n storages 是指定配置文件,不指定的话,将使用默认配置文件_default
3. 启动solrcloud
如果 solr-7.3.1/bin/solr.in.sh文件中配置了ZK_HOST,比如:
ZK_HOST="172.100.0.6:2181,172.100.0.7:2181,172.100.0.8:2181"
则,启动solrcloud的命令可以直接用:
[root@zky-solr1 bin]# ./solr start -cloud -p 8983 -force
如果 solr-7.3.1/bin/solr.in.sh文件中未配置ZK_HOST,
则,启动solrcloud的命令中需要指定zookeeper, 启动solrcloud的命令为:
[root@zky-solr1 bin]# ./solr start -cloud -z zookeeper01:2181,zookeeper02:2181 -p 8983 -force
注:zookeeper01,zookeeper02为zookeeper所在主机的hostname
4. 查看solr运行状态
./solr status
如果solr索引数据存放在hadoop hdfs中的话,创建的 collection 的 solrconfig.xml 文件要做3处改动(以logistics的solrconfig.xml为例):
第一处:
${solr.data.dir:hdfs://master:9000/solr/logistics}
第二处:
hdfs://master:9000/solr
true
1
true
16384
true
true
16
192
第三处:
${solr.lock.type:hdfs}