solr单机版搭建参考: http://www.javashuo.com/article/p-ompcnpwa-mg.htmlhtml
SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你须要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不须要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时须要使用SolrCloud来知足这些需求。node
SolrCloud为了下降单机的处理压力,须要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每一个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不一样的Shard的服务器中操做索引。SolrCloud须要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,因为SolrCloud须要由多台服务器组成,由zookeeper来进行协调管理。web
这里把solr当成独立服务安装,官方参考文档:http://lucene.apache.org/solr/guide/7_4/taking-solr-to-production.html#taking-solr-to-production redis
系统 | 节点名称 | IP | Javaapache |
zookeeperjson |
Solrbash |
---|---|---|---|---|---|
CentOS7.5 | node21 | 192.168.100.21 | √ | √ | 8983/8984 |
CentOS7.5 | node22 | 192.168.100.22 | √ | √ | 8983/8984 |
CentOS7.5 | node23 | 192.168.100.23 | √ | √ |
Zookeeper集群安装参考:http://www.javashuo.com/article/p-wtkdvahq-cb.html ,启动zookeeper集群 zkServer.sh start服务器
[admin@node21 software]$ tar zxvf solr-7.4.0.tgz
[admin@node21 software]$ tar xzf solr-7.4.0.tgz solr-7.4.0/bin/install_solr_service.sh --strip-components=2
上一个命令将install_solr_service.sh
脚本从存档中提取到当前目录中,若是在Red Hat上安装,请确保在运行Solr安装脚本()以前安装了lsof,sudo yum install lsof
。安装脚本必须以root身份运行:下一个命令时运行服务安装脚本。
并发
[admin@node21 software]$ sudo bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr -d /opt/module/solr/solrhome -u solr -s solr -p 8983
报错找不到JAVA_HOME,缘由:若是使用bash,建议将其放入/etc/bashrc
(基于RH)或/etc/bash.bashrc
(基于Debian)app
[root@node21 software]# bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr -d /opt/module/solr/solrhome -u solr -s solr -p 8983
切换root用户再次执行安装成功,默认状况下,脚本将分发存档解压缩/opt
,配置Solr以将文件写入/var/solr
,并以solr
用户身份运行Solr ,也能够指定路径,安装信息以下
[root@node21 software]# bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr -d /opt/module/solr/solrhome -u solr -s solr -p 8983 We recommend installing the 'lsof' command for more stable start/stop of Solr id: solr: no such user Creating new user: solr Extracting solr-7.4.0.tgz to /opt/module/solr Installing symlink /opt/module/solr/solr -> /opt/module/solr/solr-7.4.0 ... Installing /etc/init.d/solr script ... Installing /etc/default/solr.in.sh ... Service solr installed. Customize Solr startup configuration in /etc/default/solr.in.sh *** [WARN] *** Your Max Processes Limit is currently 4096. It should be set to 65000 to avoid operational disruption. If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983. Started Solr server on port 8983 (pid=2147). Happy searching! Found 1 Solr nodes: Solr process 2147 running on port 8983 INFO - 2018-09-07 11:39:26.210; org.apache.solr.util.configuration.SSLCredentialProviderFactory; Processing SSL Credential Provider chain: env;sysprop { "solr_home":"/opt/module/solr/data/data", "version":"7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:55:13", "startTime":"2018-09-07T15:39:11.678Z", "uptime":"0 days, 0 hours, 0 minutes, 19 seconds", "memory":"25.3 MB (%5.2) of 490.7 MB"} [root@node21 software]#
node21上再实例化一个solr2,端口8984
[root@node21 software]# mkdir /opt/module/solr2 [root@node21 software]# bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr2 -d /opt/module/solr2/solrhome -u solr -s solr2 -p 8984
安装脚本,安装包拷贝一份到node22上,实例化solr 8983,solr2 8984两个服务。
[root@node21 software]# scp -r install_solr_service.sh solr-7.4.0.tgz root@node22:`pwd` [root@node22 software]# mkdir /opt/module/solr [root@node22 software]# bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr -d /opt/module/solr/solrhome -u solr -s solr -p 8983 [root@node22 software]# mkdir /opt/module/solr2 [root@node22 software]# bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr2 -d /opt/module/solr2/solrhome -u solr -s solr2 -p 8984
启动中止验证服务命令
#在root用户下操做
service solr start|stop|status
service solr2 start|stop|ststus
修改对应jetty服务的端口8983/8984
[root@node21 solr]# vi /opt/module/solr/solrhome/data/solr.xml [root@node21 solr]# vi /opt/module/solr2/solrhome/data/solr.xml [root@node22 solr]# vi /opt/module/solr/solrhome/data/solr.xml [root@node22 solr]# vi /opt/module/solr2/solrhome/data/solr.xml
solr集群须要zk来管理节点,目前solr是开机自启动,而后本身手工再启动zookeeper,solr是不能访问的,要求zookeeper集群先于solr集群启动,所以在设置zookeeper集群开机启动前要先查看solr开机启动的优先级 ls /etc/rc3.d/*solr*
"S50solr"分析:
S:表明启动
50:表明启动的顺序,值越小越先启动
solr:服务名字,就是/etc/init.d中的文件名
因zookeeper要先于solr启动,因此它的启动顺序对应的值应该小于50
编写脚本设置zookeeper开机启动
[root@node21 software]# vi /etc/init.d/zookeeper #!/bin/bash #chkconfig:2345 20 90 #description:zookeeper #processname:zookeeper export JAVA_HOME=/opt/module/jdk1.8 export ZOO_LOG_DIR=/opt/module/zookeeper-3.4.12/logs case $1 in start) su root /opt/module/zookeeper-3.4.12/bin/zkServer.sh start;; stop) su root /opt/module/zookeeper-3.4.12/bin/zkServer.sh stop;; status) su root /opt/module/zookeeper-3.4.12/bin/zkServer.sh status;; restart) su root /opt/module/zookeeper-3.4.12/bin/zkServer.sh restart;; *) echo "require start|stop|status|restart" ;; esac
其中chkconfig:2345 20 90很是重要
2345:为主机运行的级别,表示主机运行在二、三、四、5个级别时都会启动zookeeper,而0 、一、6级别时中止zookeeper
20:开机启动的优先级,要比solr的50大
90:关机中止的顺序
通常设置时,先启动,则后中止,注意不要把启动值设置得过小,不然可能一些系统核心服务尚未启动起来,致使你的应用没法启动
JAVA_HOME是必须的
ZOO_LOG_DIR是可选的,用于保存zookeeper启动时的日志文件,我把它指定到了自定义目录,不然你得使用root用户启动zookeeper或者给root用户根目录的写权限授予给zookeeper的启动用户
赋权限给脚本,启动zookeeper,设置为开机启动
[root@node21 software]# chmod +x /etc/init.d/zookeeper
[root@node21 software]# service zookeeper start
[root@node21 software]# chkconfig --add zookeeper
而后去/etc/rc3.d中查看zookeeper的启动顺序,查看zookeeper的中止顺序
[root@node21 software]# ls /etc/rc3.d/*zoo* /etc/rc3.d/S20zookeeper [root@node21 software]# ls /etc/rc0.d/*zoo* /etc/rc0.d/K90zookeeper
1)设置zookeeper集群关联solr集群,更新Solr的包含文件(solr.in.sh
或solr.in.cmd),这样就没必要在启动Solr时输入zk链接地址。
[root@node21 solr]# vi /etc/default/solr.in.sh vi /etc/default/solr2.in.sh [root@node22 solr]# vi /etc/default/solr.in.sh vi /etc/default/solr2.in.sh 修改以下信息(对应主机host注意更改): ZK_HOST="node21:2181,node22:2181,node23:2181/solr" SOLR_HOST="192.168.100.21"
首次链接须要建立节点管理目录
[root@node21 solr]# ./solr/bin/solr zk mkroot /solr -z node21:2181,node22:2181,node23:2181
2)使用Solr的ZooKeeper CLI上传solr配置信息到zk节点
[root@node21 module]# sh solr/solr-7.4.0/server/scripts/cloud-scripts/zkcli.sh -zkhost node21:2181,node22:2181,node23:2181 -cmd upconfig -confdir /opt/module/solr/solr- 7.4.0/server/solr/configsets/_default/conf -confname myconf
查看配置文件是否上传成功,zk客户端查看zkCli.sh
[zk: localhost:2181(CONNECTED) 13] ls /configs/myconf [protwords.txt, managed-schema, solrconfig.xml, synonyms.txt, stopwords.txt, lang, params.json] [zk: localhost:2181(CONNECTED) 14] ls /solr/configs/_default [managed-schema, protwords.txt, solrconfig.xml, synonyms.txt, stopwords.txt, lang, params.json]
建立core与collection,分片规则能够自定义,也能够自动分配,我这里采起自动分配
[root@node21 solr]# ./solr/bin/solr create -c collection1 -n collection1 -shards 2 -replicationFactor 2 -p 8983 -force [root@node22 solr2]# ./solr2/bin/solr create -c collection2 -n collection2 -shards 2 -replicationFactor 2 -p 8984 -force
参数说明:
-c <name>
要建立的核心或集合的名称(必需)。
-n <configName>
配置名称,默认与核心或集合的名称相同。
-p <port>
发送create命令的本地Solr实例的端口; 默认状况下,脚本会尝试经过查找正在运行的Solr实例来检测端口。
-s <shards>
要么 -shards
将集合拆分为的分片数,默认为1; 仅适用于Solr在SolrCloud模式下运行的状况。
-rf <replicas>
要么 -replicationFactor
集合中每一个文档的副本数。默认值为1(无复制)。
-force
若是尝试以“root”用户身份运行create,则脚本将退出并显示运行Solr或针对Solr的操做做为“root”的警告可能会致使问题。可使用-force参数覆盖此警告。
-d <confdir>
配置目录。默认为_default
。
solr默认端口,查看地址:http://192.168.100.21:8983/solr/#/
zk客户端查看solr集群信息
jps查看服务进程
删除core与collection
[root@node21 solr]# ./solr/bin/solr delete -c collection1 INFO - 2018-09-09 07:59:04.479; org.apache.solr.util.configuration.SSLCredentialProviderFactory; Processing SSL Credential Provider chain: env;sysprop { "responseHeader":{ "status":0, "QTime":1560}, "success":{ "192.168.100.21:8983_solr":{"responseHeader":{ "status":0, "QTime":305}}, "192.168.100.21:8984_solr":{"responseHeader":{ "status":0, "QTime":305}}, "192.168.100.22:8983_solr":{"responseHeader":{ "status":0, "QTime":353}}, "192.168.100.22:8984_solr":{"responseHeader":{ "status":0, "QTime":421}}}} Deleted collection 'collection1' using command: http://192.168.100.21:8984/solr/admin/collections?action=DELETE&name=collection1
解压ik中文分词安装包
[root@node21 software]# ls ikanalyzer-solr5/ ext.dic IKAnalyzer.cfg.xml ik-analyzer-solr5-5.x.jar solr-analyzer-ik-5.1.0.jar stopword.dic
1)将IK分词器 JAR 包拷贝到各solr安装节点solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib/下
[root@node21 ikanalyzer-solr5]# cp ik-analyzer-solr5-5.x.jar solr-analyzer-ik-5.1.0.jar /opt/module/solr/solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib/
2)将词典 配置文件拷贝到各solr节点solr-7.4.0/server/solr-webapp/webapp/WEB-INF/classes下
[root@node21 ikanalyzer-solr5]# mkdir -p /opt/module/solr/solr-7.4.0/server/solr-webapp/webapp/WEB-INF/classes [root@node21 ikanalyzer-solr5]# cp ext.dic IKAnalyzer.cfg.xml stopword.dic /opt/module/solr/solr-7.4.0/server/solr-webapp/webapp/WEB-INF/classes
3)更改在
solr-7.4.0/server/solr/configsets/_default/conf/managed-schema配置文件,末尾添加如下保存
[root@node21 software]# vi /opt/module/solr/solr-7.4.0/server/solr/configsets/_default/conf/managed-schema <!--IK中文分词器--> <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer" /> <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer" /> </fieldType>
4)更新配置文件到zk节点
[root@node21 module]# sh /opt/module/solr/solr-7.4.0/server/scripts/cloud-scripts/zkcli.sh -zkhost node21:2181,node22:2181,node23:2181 -cmd upconfig -confdir /opt/modu le/solr/solr-7.4.0/server/solr/configsets/_default/conf -confname myconf
5)重启服务测试中文分词
root@node21 solr]# ./solr/bin/solr create -c collection3 -n collection3 -shards 2 -replicationFactor 2 -p 8983 -force
测试完毕以后,我这里设置solr与zookeeper服务禁止开机启动,
显示开机能够自动启动的服务 [root@node21 ~]# chkconfig --list 添加开机自动启动***服务 [root@node21 ~]# chkconfig --add *** 删除开机自动启动***服务 [root@node21 ~]# chkconfig --del ***
查看
[root@node21 ~]# chkconfig --list Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration. If you want to list systemd services use 'systemctl list-unit-files'. To see services enabled on particular target use 'systemctl list-dependencies [target]'. netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off redis_6379 0:off 1:off 2:on 3:on 4:on 5:on 6:off solr 0:off 1:off 2:on 3:on 4:on 5:on 6:off solr2 0:off 1:off 2:on 3:on 4:on 5:on 6:off zookeeper 0:off 1:off 2:on 3:on 4:on 5:on 6:off xinetd based services: chargen-dgram: off chargen-stream: off daytime-dgram: off daytime-stream: off discard-dgram: off discard-stream: off echo-dgram: off echo-stream: off tcpmux-server: off time-dgram: off time-stream: off
以后手动启动
[root@node23 ~]# service zookeeper start [root@node23 ~]# service solr start [root@node23 ~]# service solr2 start