Solr是一个分布式高性能全文搜索引擎,是基于Lucene开发的很是流行的企业搜索引擎平台。Solr提供了很是丰富的搜索功能,能够用来构建很是复杂的搜索业务。html
这个系列教程旨在介绍Solr的经常使用功能。java
在开始以前你须要准备一些必要的硬件及软件设施:nginx
CentOS能够选择安装,Solr是支持多操做系统的,可是在Linux下体验更好,大部分生产环境也都是Linux系统,建议使用CentOS来学习以及使用Solr。shell
VirtualBox能够选择安装,若是你是Windows操做系统,建议使用VirtualBox安装CentOS来学习使用Solr。apache
后面的操做都是基于CentOS 7.x版本操做系统来运行。centos
安装Solr须要Java 1.8或者更高版本,可使用java -version
命令检查你系统上安装的Java版本。因为Java语言有好几个实现,有些实现并不能很是好的支持Solr,根据Lucene JavaBugs来检查你的Java是否对Solr有很好的支持。Solr支持的操做系统包括Linux, MacOS, Windows。浏览器
到https://lucene.apache.org/solr/mirrors-solr-latest-redir.html下载对应操做系统的7.5.0版本的Solr安装包。负载均衡
solr-7.5.0.tgz
是针对Linux/Unix/MacOS系统的安装包solr-7.5.0.zip
是针对Windows系统的安装包solr-7.5.0-src.tgz
是源码包tar zxf solr-7.5.0.tgz cd solr-7.5.0 bin/solr start
而后使用浏览器打开http://localhost:8983,你就能够看到Solr Admin UI的界面了,这是Solr自带的管理界面,使用很是方便,在里面能够查看状态,管理core,进行查询。curl
以bin/solr start
运行的solr是以standalone模式(非分布式)运行的,若是是学习可使用此模式快速的尝试。可是建议使用后面将要介绍的SolrCloud模式来运行,SolrCloud模式能够很好的进行扩展,应对海量数据的实时搜索,动态剔除/增长机器节点,动态转移数据分片(shard),全部这些操做均可以不停机进行操做。生产环境也建议使用SolrCloud模式运行。分布式
这是以SolrCloud模式启动solr的命令,只须要添加一个-c
参数便可
bin/solr start -c
详细的命令行参数请参考Solr控制脚本参考
SolrCloud启动以后会占用8983端口,默认会启动一个内置的zookeeper实例,占用9983端口(在solr的端口上加1000)。
通常生产环境部署会把zookeeper单独部署,其余的solr节点单独部署。
下面假设是生产环境部署zookeeper,建议至少须要三个zookeeper节点。 开发环境以及测试使用一个zookeeper也没有关系。
假设已经有三个机器来运行zookeeper来组建一个小的zookeeper集群:
步骤为:下载zookeeper-3.4.13 -> 解压 -> 配置conf/zoo.cfg -> 启动
curl -o zookeeper-3.4.13.tar.gz 'https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz' tar -xzvf zookeeper-3.4.13.tar.gz cd zookeeper-3.4.13 cp conf/zoo_sample.cfg conf/zoo.cfg sed -i 's/dataDir=.*/dataDir=.\/data/g' conf/zoo.cfg mkdir data echo -e "\nserver.1=192.168.1.2:2888:3888\nserver.2=192.168.1.3:2888:3888\nserver.3=192.168.1.4:2888:3888" >> conf/zoo.cfg echo 1 > data/myid
解释一下上面的一些命令:
前四行就不过多解释,下载zookeeper-3.4.13安装包,解压,拷贝conf/zoo_example.cfg为conf/zoo.cfg配置文件。conf/zoo.cfg为必须的配置文件,不然zookeeper是没法启动的。
第五行使用sed
命令把conf/zoo.cfg配置文件里面的dataDir设置为安装目录下面的data目录。接着第六行建立dataDir指定的目录,不然也没法正确启动zookeeper。第七行写入三台机器互相通讯的配置,2888是链接leader端口,3888是选举端口,两个端口均可以修改。
最后一行也是最重要的一行,每台机器在data/myid文件里面写入一个不重复的值来标识每一个节点。因此在其余两台机器就不能再写入1了,分别写入2和3便可。
上面拷贝conf/zoo_example.cfg为conf/zoo.cfg的时候,已经默认设置了2181端口为zookeeper客户端链接的端口,下面在solr启动的时候使用。
最后运行bin/zkServer.sh start
启动三台机器上的zookeeper便可。
假设如今也有三个机器安装了solr(下载下来直接解压便可),分别为192.168.1.10
、192.168.1.11
、192.168.1.12
,解压的目录都为solr-7.5.0
。命令行切换到solr-7.5.0目录运行以下命令:
bin/solr start -c -z 192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181
三台机器运行一样的命令后,整个SolrCloud集群就已经启动好了,能够访问http://192.168.1.10:8983查看solr admin ui。
这个话题比较有意思,不少人问我SolrCloud已经使用了Zookeeper来选举leader了,SolrCloud里面的leader shard也会把请求分发到其余的shard上,为何还要作负载均衡呢。若是你深刻了解过solr的search component你就会明白,接收请求的那个机器作的计算是要比其余机器多的,若是你在代码当中只是访问其中一台机器,那么这台机器的负载会高于其余的机器。因此你须要在你的应用程序和SolrCloud之间搭建一个负载均衡,把请求均匀的分布到各个机器上去。
经常使用的有nginx, haproxy这两个作负载均衡的软件了。最后要保证高可用,还须要作一个负载均衡层面的热备的配置,这样你的SolrCloud能够说已经很是坚固了。
原文地址:https://kevinjiang.info/2019/03/05/Solr%E6%95%99%E7%A8%8B-%E5%AE%89%E8%A3%85%E8%BF%90%E8%A1%8C/