目前服务器上安装的 solr 版本:5.3.1,不同于测试和研究,如果要把 solr 产品化部署,需要将其安装成一个服务。在 solr 压缩包中的 bin/目录下有一个脚本文件 install_solr_service.sh,负责 solr 的安装,并注册为自启动的 service。
环境准备
首先需要创建一个 solr 用户,并赋予其相应的权限:
groupadd zpsolr
useradd -g zpsolr zpsolr
passwd zpsolr
chown -R zpsolr:zpsolr /var/solr /usr/local/solrcloud/
同时也建立两个目录,用于将 solr 的安装文件与动态文件区分出来:
-
/var/solr, 动态文件目录,存在索引数据,日志等,与 solr 的安装目录不同,便于以后管理和升级
-
/usr/local/solrcloud,使用脚本安装时的缺省安装目录,安装文件会自动为 solr 目录建立一个软链接,指向对应的 solr 安装目录,便于以后的升级(solr -> /usr/local/solrcloud/solr-5.3.1)
此时/usr/local 目录的文件类似下面的结构:
lrwxrwxrwx. 1 zpsolr zpsolr 31 12月 11 18:20 solr -> /usr/local/solrcloud/solr-5.3.1
drwxr-xr-x. 9 zpsolr zpsolr 4096 12月 11 18:20 solr-5.3.1
drwxr-xr-x. 3 zpsolr zpsolr 4096 12月 11 01:27 tmp
drwxr-xr-x. 4 zpsolr zpsolr 4096 12月 11 00:57 zookeeper
安装服务脚本
solr 中提供了在服务器上安装 solr 服务的相关脚本,注意需要 root 权限才可以安装成功:
sudo bash ./bin/install_solr_service.sh ../solr-5.3.1.tgz -i /usr/local/solrcloud -d /var/solr -u zpsolr -s solr -p 8983
这里就指定了 solr 安装目录,数据和配置文件目录,使用用户,服务名称以及默认 http 端口等信息,其中的 solr 脚本参数说明:
- -d 动态文件目录,缺省为“/var/solr”
- -i solr 加压安装目录,缺省为“/opt”
- -p 工作/监听端口,缺省为“8983”
- -s 安装成 Linus 服务的名字,缺省为“solr”
- -u 运行 solr 的用户名,如果用户不存在,会自动创建,缺省为“solr”
服务安装完成后,就可以通过 service 的方式来对 solr 服务进行启动/停止操作:
sudo service solr start/stop/status ...
solr 目录文件说明
├── data
│ ├── brand
│ │ ├── core.properties
│ │ └── data(solr索引数据目录)
│ ├── conf
│ │ └── dataimport.properties
│ ├── lib
│ │ ├── mmseg4j-core-1.10.0.jar
│ │ ├── mmseg4j-solr-2.3.0.jar
│ │ ├── mysql-connector-java-5.1.37.jar
│ │ ├── solr-1.0.0.jar
│ │ ├── solr-dataimporthandler-5.3.1.jar
│ │ └── solr-dataimporthandler-extras-5.3.1.jar
│ ├── solr.xml
├── logs
│ ├── solr-8983-console.log
│ ├── solr_gc.log
│ ├── solr.log
├── log4j.properties
├── logs
├── solr-8983.pid
└── solr.in.sh
solr.in.sh
该文件用户配置 solr 启动的模式,对应的 java 虚拟机参数等信息,对应的 solrHome 等信息:
SOLR_PID_DIR=/var/solr
SOLR_HOME=/var/solr/data
LOG4J_PROPS=/var/solr/log4j.properties
SOLR_LOGS_DIR=/var/solr/logs
SOLR_PORT=8983
solr 从 5 版本后就已经加入了集群模式,在 solr.in.sh 文件中配置 ZK_HOST,就会以 solrCloud 模式启动,不同的 solr 节点可以注册到同一个 zookeeper 目录上,这样就会组成一个集群。
data
data 目录中存放了比较关键的各个 collection 配置,每个 collection 以文件夹的方式存放,collection 中存放了对应的配置目录以及数据目录,配置目录中会存在对应的描述文件。
但如果是 solrCloud 模式,collection 是统一建立的,而且在建立之前必须要将所有的配置事先上传到 zookeeper 上,对于上传和下载 collection,可以使用 solrcloud 中提供的脚本就可以:
/usr/local/solrcloud/solr/server/scripts/cloud-scripts/zkcli.sh -zkhost 127.0.0.1:9983 -cmd upconfig -confname my_new_config -confdir server/solr/configsets/basic_configs/conf
/usr/local/solrcloud/solr/server/scripts/cloud-scripts/zkcli.sh -cmd downconfig -zkhost 192.168.1.162:2181,192.168.1.163:2181,192.168.1.165:2181/solrcloud -confname evaluation -confdir .
单机模式下,配置文件仅存放在 data/conf 目录下即可。
REST API
https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-api11
SolrCloud 迁移数据
如果将 solrCloud 向 solr 单点迁移的话,比较简单,直接将在 zookeeper 上的配置 download 到本地,将其放在在本地保存到 conf 目录即可(注意,zk 的目录结构与本地会有所不同),然后在 solr.in.sh 中去掉 ZK_HOST 一行或将其注释掉,重启即可。
但如果将 solr 单点组成 solrCloud,会有所不同,而且也会比较麻烦,原因是组成的 solrCloud 集群可能会有一些服务器明明可以提供服务,但在 clusterstatus 中会显示失败(down 状态),此时就需要先将 replica 删除。
在 api 中可以先删除 replica,注意需要提供 replica name,在本地文件中的 core.properties,
name=brand_brand_replica1
shard=brand
collection=brand
coreNodeName=core_node2
其中 coreNodeName 就是对应的 replicaName,通过 REST API 中的 DELETE URL 即可。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于