Skip to content

solr部署

服务规划

服务说明备注节点分布
coreconfigsolr抽取配置文件第一次搭建可能没有,如果先前有相关环境,可能会有189
zookeeperzookeeper安装包官方apache-zookeeper-3.8.4-bin.tar.gz189【节点1、2】192【节点3】
solrsolr安装包官方solr-8.11.2.tgz189【节点1、2】192【节点3、4】

部署Solr集群

部署Zookeeper集群【前置】

  • 安装jdk1.8【统信ARM的操作系统,建议安装openjdk,solr使用jdk可能有问题】

    shell
    $ yum install -y java-1.8.0-openjdk

    校验

    bash
    $ java -version
    openjdk version "1.8.0_372"
    OpenJDK Runtime Environment UnionTech (build 1.8.0_372-b07)
    OpenJDK 64-Bit Server VM UnionTech (build 25.372-b07, mixed mode)

    注:实有jdk1.8-arm版本可能遇到以下问题【出现位置:在在server的logs文件夹solr-console文件里】

    bash
    Error: VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.

    遇到此问题尝试换jdk或openjdk试试,也有可能是jdk环境变量没有配置对,检查下

  • 选择一个空间大的目录,上传zookeeper安装包,并解压缩

    shell
    $ tar -xf apache-zookeeper-3.8.4-bin.tar.gz
  • 修改文件名称

    shell
    $ mv apache-zookeeper-3.8.4-bin zookeeper
  • 编辑配置文件

    这里时189和192两台服务器安装,所以zk分布为189*2、192,相关目录自行调整

    shell
    $ cd zookeeper
    $ mkdir {data,logs}
    $ vi conf/zoo.cfg
    
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/data/zookeeper/data
    dataLogDir=/data/zookeeper/logs
    clientPort=2181
    
    server.1=192.168.2.189:2888:3888
    server.2=192.168.2.189:2889:3889
    server.3=192.168.2.192:2888:3888
  • 配置服务器编号

    shell
    echo 1 > data/myid
    echo 2 > data/myid
    echo 3 > data/myid
  • 配置系统启动脚本

    189上的两个启动为:zookeeper1.servicezookeeper2.service

    shell
    $ vi /usr/lib/systemd/system/zookeeper.service
    
    [Unit]
    Description=Apache Zookeeper service
    Requires=network.target
    After=network.target
    
    [Service]
    Type=forking
    Environment=JAVA_HOME=/data/qzz/jdk1.8
    ExecStart=/data/zookeeper/bin/zkServer.sh start
    ExecStop=/data/zookeeper/bin/zkServer.sh stop
    Restart=on-failure
    RestartSec=10s
    
    [Install]
    WantedBy=multi-user.target
  • 启动集群 systemctl start zookeeper1systemctl start zookeeper2systemctl start zookeeper

  • zookeeper停止命令:systemctl stop zookeeper1systemctl stop zookeeper2systemctl stop zookeeper

  • zookeeper查看状态命令:systemctl status zookeeper1systemctl status zookeeper2systemctl status zookeeper

  • 查看个节点的状态,需要在个节点的根目录执行:./bin/zkServer.sh status,以下仅展示一个示例

    bash
    $ ./bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /data/qzz/zookeeper-1/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower

部署solr集群

文件解压完后目录结构如下:

189节点

bash
/data/qzz
├── solr
│   ├── bin				# 安装目录
│   │   ├── solr1		# solr1 安装目录
│   │   ├── solr2		# solr2 安装目录
│   │   ├── start1.sh	# solr1 启动脚本
│   │   ├── start2.sh	# solr2 启动脚本
│   │   ├── stop1.sh	# solr1 停止脚本
│   │   └── stop2.sh	# solr2 停止脚本
│   ├── core			# 核心配置
│   │   ├── coreconfig	# 核心配置
│   │   │   ├── bzdz	# 标准地址
│   │   │   └── sydw	# 实有房屋
│   │   ├── bzdzSolrUpload.sh # 标准地址上传/更新脚本
│   │   └── sydwSolrUpload.sh # 实有单位上传/更新脚本
│   ├── data			# 数据目录
│   │   ├── solr1		# solr1 数据目录
│   │   └── solr2		# solr2 数据目录
│   ├── logs          	# 日志目录
│   │   ├── solr1		# solr1 日志目录
│   │   └── solr2		# solr2 日志目录
│   └── plugin			# 插件目录
├── zookeeper-1			# zk节点1
└── zookeeper-2			# zk节点2

192节点

bash
/data/qzz
├── solr
│   ├── bin				# 安装目录
│   │   ├── solr3		# solr3 安装目录
│   │   ├── solr4		# solr4 安装目录
│   │   ├── start3.sh	# solr3 启动脚本
│   │   ├── start4.sh	# solr4 启动脚本
│   │   ├── stop3.sh	# solr3 停止脚本
│   │   └── stop4.sh	# solr4 停止脚本
│   ├── data			# 数据目录
│   │   ├── solr3		# solr3 数据目录
│   │   └── solr4		# solr4 数据目录
│   ├── logs          	# 日志目录
│   │   ├── solr3		# solr3 日志目录
│   │   └── solr4		# solr4 日志目录
│   └── plugin			# 插件目录
└── zookeeper-3			# zk节点3
  • 选择一个空间大的目录下,创建solrcloud文件夹,进入该文件夹上传并解压缩solr包和coreconfig包

    shell
    $ tar -xf solr-8.11.2.tgz # 来自于官方的安装包
    $ mv solr-8.11.2 solr1    # solr2 - 4 类似
    $ tar -xf coreconfig.tar  # 从原来的生产环境压缩而来
    # 没有可以去solr根目录下的server/solr/configsets/_default/conf 修改成自己需要的配置上传即可

    按上面的结构189上部署solr1、solr2,192上部署solr3、solr4

  • 编辑solr启动脚本,-h 是部署的服务器ip;-p 后面的端口,如果是在不同的服务器上部署,就可以都用同一个端口,ip区分;-z 后面是zookeeper的访问地址;-m 是内存的大小,根据服务器的性能修改;-s 数据文件路径;-a 中的日志和插件路径也需要根据系统环境修改为自己的即可 节点1

    bash
    # 启动
    $ vi start1.sh
    #!/bin/bash
    echo "启动 solr1  端口 8981"
    /data/qzz/solr/bin/solr1/bin/solr start -c -h 192.168.2.189 -p 8981 -s /data/qzz/solr/data/solr1 -z 192.168.2.189:2181,192.168.2.189:2182,192.168.2.192:2181 -m 48g -force -a "-Dsolr.allowPaths=/data/qzz/solr/data/solr1 -Djava.class.path=/data/qzz/solr/plugin/* -Dsolr.log.dir=/data/qzz/solr/logs/solr1/ -Xloggc:/data/qzz/solr/logs/solr1/solr_gc_%t.log"
    
    # 停止
    $ vi stop1.sh
    #!/bin/bash
    echo "停止 solr1  端口 8981"
    /data/qzz/solr/bin/solr1/bin/solr stop -p 8981

    节点2

    bash
    # 启动
    $ vi start2.sh
    #!/bin/bash
    echo "启动 solr2  端口 8982"
    /data/qzz/solr/bin/solr2/bin/solr start -c -h 192.168.2.189 -p 8982 -s /data/qzz/solr/data/solr2 -z 192.168.2.189:2181,192.168.2.189:2182,192.168.2.192:2181 -m 48g -force -a "-Dsolr.allowPaths=/data/qzz/solr/data/solr2 -Djava.class.path=/data/qzz/solr/plugin/* -Dsolr.log.dir=/data/qzz/solr/logs/solr2/ -Xloggc:/data/qzz/solr/logs/solr2/solr_gc_%t.log"
    
    # 停止
    $ vi stop2.sh
    #!/bin/bash
    echo "停止 solr2  端口 8982"
    /data/qzz/solr/bin/solr2/bin/solr stop -p 8982

    节点3

    bash
    # 启动
    $ vi start3.sh
    #!/bin/bash
    echo "启动 solr3  端口 8981"
    /data/qzz/solr/bin/solr3/bin/solr start -c -h 192.168.2.192 -p 8981 -s /data/qzz/solr/data/solr3 -z 192.168.2.189:2181,192.168.2.189:2182,192.168.2.192:2181 -m 48g -force -a "-Dsolr.allowPaths=/data/qzz/solr/data/solr3 -Djava.class.path=/data/qzz/solr/plugin/* -Dsolr.log.dir=/data/qzz/solr/logs/solr3/ -Xloggc:/data/qzz/solr/logs/solr3/solr_gc_%t.log"
    
    # 停止
    $ vi stop2.sh
    #!/bin/bash
    echo "停止 solr3  端口 8981"
    /data/qzz/solr/bin/solr3/bin/solr stop -p 8981

    节点3

    bash
    # 启动
    $ vi start4.sh
    #!/bin/bash
    echo "启动 solr4  端口 8982"
    /data/qzz/solr/bin/solr4/bin/solr start -c -h 192.168.2.192 -p 8982 -s /data/qzz/solr/data/solr4 -z 192.168.2.189:2181,192.168.2.189:2182,192.168.2.192:2181 -m 48g -force -a "-Dsolr.allowPaths=/data/qzz/solr/data/solr4 -Djava.class.path=/data/qzz/solr/plugin/* -Dsolr.log.dir=/data/qzz/solr/logs/solr4/ -Xloggc:/data/qzz/solr/logs/solr4/solr_gc_%t.log"
    
    # 停止
    $ vi stop4.sh
    #!/bin/bash
    echo "停止 solr4  端口 8982"
    /data/qzz/solr/bin/solr4/bin/solr stop -p 8982

    其他说明

    bash
    # -h 是部署的服务器ip
    # -p 后面的端口,如果是在不同的服务器上部署,就可以都用同一个端口,ip区分
    # -z 后面是zookeeper的访问地址
    # -m 是内存的大小,根据服务器的性能修改
    # -s 数据文件路径
    # -a 中的日志和插件路径也需要根据系统环境修改为自己的即可

    添加可执行权限

    bash
    $ chmod +x *.sh
  • 创建solr数据文件夹,每个文件夹与solr节点对应

    shell
    $ mkdir /data/qzz/solr/data/solr1
    $ mkdir /data/qzz/solr/data/solr2
    $ mkdir /data/qzz/solr/data/solr3
    $ mkdir /data/qzz/solr/data/solr4
  • 修改solr.xml文件信息,solr.xml位于每个solr安装目录的根目录下的server/solr/solr.xml。 将host修改为部署的服务器ip 端口与上面的启动脚本中的保持一致。 每个节点都需要修改 solr1的solr.xml配置如下:

    xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <solr>
      <int name="maxBooleanClauses">${solr.max.booleanClauses:1024}</int>
      <str name="sharedLib">${solr.sharedLib:}</str>
      <str name="allowPaths">${solr.allowPaths:}</str>
      <solrcloud>
        <str name="host">192.168.2.189</str>
        <int name="hostPort">8981</int>
        <str name="hostContext">${hostContext:solr}</str>
        <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
        <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
        <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
        <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
        <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>
        <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>
      </solrcloud>
      <shardHandlerFactory name="shardHandlerFactory"
        class="HttpShardHandlerFactory">
        <int name="socketTimeout">${socketTimeout:600000}</int>
        <int name="connTimeout">${connTimeout:60000}</int>
        <str name="shardsWhitelist">${solr.shardsWhitelist:}</str>
      </shardHandlerFactory>
      <metrics enabled="${metricsEnabled:true}"/>
    </solr>

    solr2的solr.xml配置如下:

    xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <solr>
      <int name="maxBooleanClauses">${solr.max.booleanClauses:1024}</int>
      <str name="sharedLib">${solr.sharedLib:}</str>
      <str name="allowPaths">${solr.allowPaths:}</str>
      <solrcloud>
        <str name="host">192.168.2.189</str>
        <int name="hostPort">8982</int>
        <str name="hostContext">${hostContext:solr}</str>
        <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
        <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
        <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
        <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
        <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>
        <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>
      </solrcloud>
      <shardHandlerFactory name="shardHandlerFactory"
        class="HttpShardHandlerFactory">
        <int name="socketTimeout">${socketTimeout:600000}</int>
        <int name="connTimeout">${connTimeout:60000}</int>
        <str name="shardsWhitelist">${solr.shardsWhitelist:}</str>
      </shardHandlerFactory>
      <metrics enabled="${metricsEnabled:true}"/>
    </solr>

    solr3的solr.xml配置如下:

    xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <solr>
      <int name="maxBooleanClauses">${solr.max.booleanClauses:1024}</int>
      <str name="sharedLib">${solr.sharedLib:}</str>
      <str name="allowPaths">${solr.allowPaths:}</str>
      <solrcloud>
        <str name="host">192.168.2.192</str>
        <int name="hostPort">8981</int>
        <str name="hostContext">${hostContext:solr}</str>
        <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
        <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
        <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
        <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
        <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>
        <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>
      </solrcloud>
      <shardHandlerFactory name="shardHandlerFactory"
        class="HttpShardHandlerFactory">
        <int name="socketTimeout">${socketTimeout:600000}</int>
        <int name="connTimeout">${connTimeout:60000}</int>
        <str name="shardsWhitelist">${solr.shardsWhitelist:}</str>
      </shardHandlerFactory>
      <metrics enabled="${metricsEnabled:true}"/>
    </solr>

    solr4的solr.xml配置如下:

    xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <solr>
      <int name="maxBooleanClauses">${solr.max.booleanClauses:1024}</int>
      <str name="sharedLib">${solr.sharedLib:}</str>
      <str name="allowPaths">${solr.allowPaths:}</str>
      <solrcloud>
        <str name="host">192.168.2.192</str>
        <int name="hostPort">8982</int>
        <str name="hostContext">${hostContext:solr}</str>
        <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
        <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
        <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
        <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
        <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>
        <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>
      </solrcloud>
      <shardHandlerFactory name="shardHandlerFactory"
        class="HttpShardHandlerFactory">
        <int name="socketTimeout">${socketTimeout:600000}</int>
        <int name="connTimeout">${connTimeout:60000}</int>
        <str name="shardsWhitelist">${solr.shardsWhitelist:}</str>
      </shardHandlerFactory>
      <metrics enabled="${metricsEnabled:true}"/>
    </solr>
  • 拷贝solr.xml配置文件到solr节点对应的数据目录下:

    shell
    $ cd /data/qzz/solr
    $ cp bin/solr1/server/solr/solr.xml data/solr1
    $ cp bin/solr2/server/solr/solr.xml data/solr2
    $ cp bin/solr3/server/solr/solr.xml data/solr3
    $ cp bin/solr4/server/solr/solr.xml data/solr4
  • 修改web.xml文件信息,web.xml位于每个solr安装目录的根目录下的server/solr-webapp/webapp/WEB-INF/web.xml 每个solr节点都需要修改。主要关注env-entry-value配置即可

    xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
             version="2.5"
             metadata-complete="true"
    >
      <env-entry>
          <env-entry-name>solr/home</env-entry-name>
          <env-entry-value>/data/qzz/solr/data/solr3</env-entry-value>
          <env-entry-type>java.lang.String</env-entry-type>
      </env-entry>
      <!-- Any path (name) registered in solrconfig.xml will be sent to that filter -->
      <filter>
        <filter-name>SolrRequestFilter</filter-name>
        <filter-class>org.apache.solr.servlet.SolrDispatchFilter</filter-class>
        <init-param>
          <param-name>excludePatterns</param-name>
          <param-value>/partials/.+,/libs/.+,/css/.+,/js/.+,/img/.+,/templates/.+</param-value>
        </init-param>
      </filter>
    
      <filter-mapping>
        <filter-name>SolrRequestFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    
      <servlet>
        <servlet-name>LoadAdminUI</servlet-name>
        <servlet-class>org.apache.solr.servlet.LoadAdminUiServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>LoadAdminUI</servlet-name>
        <url-pattern>/index.html</url-pattern>
      </servlet-mapping>
    
      <mime-mapping>
        <extension>.xsl</extension>
        <!-- per http://www.w3.org/TR/2006/PR-xslt20-20061121/ -->
        <mime-type>application/xslt+xml</mime-type>
      </mime-mapping>
    
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
      </welcome-file-list>
    
      <!-- Get rid of error message -->
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>Disable TRACE</web-resource-name>
          <url-pattern>/</url-pattern>
          <http-method>TRACE</http-method>
        </web-resource-collection>
        <auth-constraint/>
      </security-constraint>
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>Enable everything but TRACE</web-resource-name>
          <url-pattern>/</url-pattern>
          <http-method-omission>TRACE</http-method-omission>
        </web-resource-collection>
      </security-constraint> 
    </web-app>
  • 启动solr集群,执行solr启动脚本即可。sh start1.shsh start2.shsh start3.shsh start4.sh

  • 停止solr服务命令:bin/solr stop -all

  • 上传bzdzsyfw的配置文件【名称可能和我的不一样,按自己的来】

    shell
    # 上传 标准地址
    $ vi bzdzSolrUpload.sh
    #!/bin/bash
    echo "上传 标准地址 配置"
    /data/qzz/solr/bin/solr1/server/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.2.189:2181,192.168.2.189:2182,192.168.2.192:2181 -cmd upconfig -confdir /data/qzz/solr/core/coreconfig/bzdz -confname bzdz
    
    # 上传实有房屋
    $ vi sydwSolrUpload.sh 
    #!/bin/bash
    echo "上传 实有单位 配置"
    /data/qzz/solr/bin/solr1/server/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.2.189:2181,192.168.2.189:2182,192.168.2.192:2181 -cmd upconfig -confdir /data/qzz/solr/core/coreconfig/sydw -confname sydw
    
    # 给予可执行权限
    chmod +x bzdzSolrUpload.sh sydwSolrUpload.sh 
    
    # 执行脚本上传配置文件
    ./bzdzSolrUpload.sh
    ./sydwSolrUpload.sh
  • 访问solr集群(ip:port)端口4个中的任意一个都行 image-20240808231350683

    添加bzdz、sydw通道【名称可能和我的不一样,按自己的来】

image-20240808222011739

image-20240808231433133