Appearance
solr部署
服务规划
| 服务 | 说明 | 备注 | 节点分布 |
|---|---|---|---|
| coreconfig | solr抽取配置文件 | 第一次搭建可能没有,如果先前有相关环境,可能会有 | 189 |
| zookeeper | zookeeper安装包 | 官方apache-zookeeper-3.8.4-bin.tar.gz | 189【节点1、2】192【节点3】 |
| solr | solr安装包 | 官方solr-8.11.2.tgz | 189【节点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文件里】
bashError: 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配置服务器编号
shellecho 1 > data/myid echo 2 > data/myid echo 3 > data/myid配置系统启动脚本
189上的两个启动为:
zookeeper1.service、zookeeper2.serviceshell$ 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 zookeeper1,systemctl start zookeeper2,systemctl start zookeeper。zookeeper停止命令:systemctl stop zookeeper1,systemctl stop zookeeper2,systemctl stop zookeeper。zookeeper查看状态命令:systemctl status zookeeper1,systemctl status zookeeper2,systemctl 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节点2192节点
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.sh,sh start2.sh,sh start3.sh,sh start4.sh。停止solr服务命令:
bin/solr stop -all。上传
bzdz和syfw的配置文件【名称可能和我的不一样,按自己的来】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个中的任意一个都行

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

