Solr教程-安装运行
Solr是一个分布式高性能全文搜索引擎,是基于Lucene开发的非常流行的企业搜索引擎平台。Solr提供了非常丰富的搜索功能,可以用来构建非常复杂的搜索业务。
这个系列教程旨在介绍Solr的常用功能。
准备
在开始之前你需要准备一些必要的硬件及软件设施:
- JDK 1.8 (或者更高版本)
- Solr 7.5.x
- Postman (可选)
- CentOS 7.x (本系列以此OS为准)
- VirtualBox (可选)
CentOS可以选择安装,Solr是支持多操作系统的,但是在Linux下体验更好,大部分生产环境也都是Linux系统,建议使用CentOS来学习以及使用Solr。
VirtualBox可以选择安装,如果你是Windows操作系统,建议使用VirtualBox安装CentOS来学习使用Solr。
后面的操作都是基于CentOS 7.x版本操作系统来运行。
安装Solr
安装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,进行查询。
以bin/solr start
运行的solr是以standalone模式(非分布式)运行的,如果是学习可以使用此模式快速的尝试。但是建议使用后面将要介绍的SolrCloud模式来运行,SolrCloud模式可以很好的进行扩展,应对海量数据的实时搜索,动态剔除/增加机器节点,动态转移数据分片(shard),所有这些操作都可以不停机进行操作。生产环境也建议使用SolrCloud模式运行。
这是以SolrCloud模式启动solr的命令,只需要添加一个-c
参数即可
bin/solr start -c
详细的命令行参数请参考Solr控制脚本参考
SolrCloud启动之后会占用8983端口,默认会启动一个内置的zookeeper实例,占用9983端口(在solr的端口上加1000)。
多节点的SolrCloud安装-生产环境部署
一般生产环境部署会把zookeeper单独部署,其他的solr节点单独部署。
外部Zookeeper
下面假设是生产环境部署zookeeper,建议至少需要三个zookeeper节点。 开发环境以及测试使用一个zookeeper也没有关系。
假设已经有三个机器来运行zookeeper来组建一个小的zookeeper集群:
- 192.168.1.2
- 192.168.1.3
- 192.168.1.4
步骤为:下载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节点
假设现在也有三个机器安装了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/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Prometheus入门+grafana集成
开始使用Prometheus $ systemctl start prometheus $ netstat -lntp tcp6 0 0 :::9090 :::* LISTEN 19824/./prometheus 在浏览器访问:http://ip:9090/graph 。Prometheus会把自身作为一个项目进行自监控,查看收集到监控项:http://172.16.180.129:9090/metrics (如果是首次启动,需要等待30s左右的时间) 使用内置表达式查看数据 地址:http://ip:9090/graph Prometheus内置监控项 prometheus_target_interval_length_seconds ,将该监控项直接输入console查询,可获取数据:  使用prometheus监控服务器 上面用Prometheus本身的...
- 下一篇
线程池参数原理及应用
线程池原理 Java创建一个线程很方便,只需new Thread()就可以,但是当有多个任务需要进行进行处理时,频繁的进行创建和启用线程同样需要系统开销,也不利于管理,于是同mysql的连接池一样,自然有对线程的管理池即线程池。 做个比喻,线程池好比一个公司,那么线程本身就是一个个的员工,来对线程的创建和销毁进行管理,最大化的进行资源的合理调度。 Java的线程池创建也很简单,concurrent这个并发包下有Executors可以很方便的进行四种常用线程的创建: newFixedThreadPool:创建固定数量的线程的线程池,可以控制最大并发数,常用于知道具体任务的数量,需要进行多线程的操作,如批量插入数据库任务,需要进行10万条数据分页,每1万条数据一页,配置一个线程处理,一共配置10个线程,进行并行批量插入,就可以使用这个线程池来进行,大大减少响应时间 public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThr...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8安装Docker,最新的服务器搭配容器使用
- Linux系统CentOS6、CentOS7手动修改IP地址
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库