Solr 在 Linux 系统中的产品化安装

本贴最后更新于 2659 天前,其中的信息可能已经时异事殊

目前服务器上安装的 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 即可。

  • 安装

    你若安好,便是晴天。

    128 引用 • 1184 回帖
  • Solr
    16 引用 • 22 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...