zoukankan      html  css  js  c++  java
  • CentOS7.5搭建Solr7.4.0集群服务

    一.Solr集群概念

    solr单机版搭建参考: https://www.cnblogs.com/frankdeng/p/9615253.html

    1.概念

            SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求

    2.结构

            SolrCloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引。SolrCloud需要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成,由zookeeper来进行协调管理。

    二.Solr集群安装

    这里把solr当成独立服务安装,官方参考文档:http://lucene.apache.org/solr/guide/7_4/taking-solr-to-production.html#taking-solr-to-production 

    1. 安装环境,集群部署

    系统节点名称IP

    Java

    zookeeper

    Solr

    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集群安装参考:https://www.cnblogs.com/frankdeng/p/9018177.html    ,启动zookeeper集群 zkServer.sh start

    2. 解压安装包,运行安装脚本

    [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)

    [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]# 

    3.安装多个solr服务

    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 

    4. 配置zk启动优先级

    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:为主机运行的级别,表示主机运行在2、3、4、5个级别时都会启动zookeeper,而0 、1、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

    5. 关联solr集群与zk集群

     1)设置zookeeper集群关联solr集群,更新Solr的包含文件(solr.in.shsolr.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]

    6.配置solr集群的分片规则

    创建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

    7. Web界面查看solr集群状态

    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

    8. 安装IK中文分词器

    解压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

    其他明细参考文档:https://www.cnblogs.com/jepson6669/p/9134652.html

                                    https://my.oschina.net/u/3049601/blog/1800909

  • 相关阅读:
    ABP之动态WebAPI
    ssh下常用操作汇总(good)
    XP下类似%windir% %userprofile% 的变量的说明(转)
    Cannot update paths and switch to branch at the same time(转)
    git branch(转)
    Git提交代码的处理流程(转)
    Android锁定EditText内容和随机生成验证码
    Android L下载
    vi 命令 使用方法
    Openfire开发配置,Openfire源码配置,OpenFire二次开发配置
  • 原文地址:https://www.cnblogs.com/frankdeng/p/9597680.html
Copyright © 2011-2022 走看看