百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Solr搜索引擎—SolrCloud安装和集群配置

suiw9 2024-10-31 16:06 22 浏览 0 评论



搞定了一切的一切之后下一步就是正式使用了,但是之前介绍的都是在单台服务器上进行的部署,如果在生产环境出现了单台故障怎么办呢?提供稳定性和性能的最直观的方式就是集群,solr官方提供了cloud的集群方式

附上:

喵了个咪的博客:http://w-blog.cn

Solr官网:http://lucene.apache.org/solr/

PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7.1版本

一、基于tomcat安装solr

下载solr

> cd /app/install/

> wget http://mirror.bit.edu.cn/apache/lucene/solr/7.7.1/solr-7.7.1.tgz

> tar -zxvf solr-7.7.1.tgz

> mv solr-7.7.1 /usr/local/

> vim /etc/profile

export PATH=/usr/local/solr-7.7.1/bin:$PATH

> source /etc/profile

在tomcat包下的webapps目录新建一个目录,取名solr

> cd /data/wwwroot/default

> mkdir solr

  • 将solr解压包/solr-7.7.1/server/solr-webapp/webapp/下的内容拷贝到刚才tomcat下新建的文件夹solr中
  • 将/solr-7.7.1/server/lib/ext/下的jar包拷贝到/tomcat/webapps/solr/WEB-INF/lib/下
  • 将/solr-7.7.1/server/lib/下metrics开头的jar包也拷贝到刚才的目录下
  • 将/solr-7.7.1/dist/下 solr-dataimporthandler-extras-7.7.1.jar、solr-dataimporthandler-7.7.1.jar也拷贝到刚才的目录下

> cp -rf /usr/local/solr-7.7.1/server/solr-webapp/webapp/* /data/wwwroot/default/solr

> cp -rf /usr/local/solr-7.7.1/server/lib/ext/* /data/wwwroot/default/solr/WEB-INF/lib

> cp -rf /usr/local/solr-7.7.1/server/lib/metrics-* /data/wwwroot/default/solr/WEB-INF/lib

> cp -rf /usr/local/solr-7.7.1/dist/solr-dataimporthandler-extras-7.7.1.jar /data/wwwroot/default/solr/WEB-INF/lib

> cp -rf /usr/local/solr-7.7.1/dist/solr-dataimporthandler-7.7.1.jar /data/wwwroot/default/solr/WEB-INF/lib

  • 在你本地的/home下新建一个文件夹,取名solr-home,将/solr-7.7.1/server/solr下的内容拷贝到刚才新建的solr-home下

> mkdir /home/solr-home

> cp -rf /usr/local/solr-7.7.1/server/solr/* /home/solr-home/

  • 打开并编辑/tomcat/webapps/solr/WEB-INF/web.xml并且注释文件末尾的所有 元素节点

> vim /data/wwwroot/default/solr/WEB-INF/web.xml

<env-entry>

<env-entry-name>solr/home</env-entry-name>

<env-entry-value>/home/solr-home</env-entry-value>

<env-entry-type>java.lang.String</env-entry-type>

</env-entry>

<!--

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

-->

  • 配置solr日志(可选)
  • 将/solr-7.7.1/server/resources/下的log4j2.xml文件拷贝到solr/WEB-INF/classes/下,如果没有则自己创建一个。

分别给予权限

> chown -R www:www /home/solr-home/

> chown -R www:www /data/wwwroot/default/solr/

  • - - -

二,SolrCloud配置子节点

把配置好的solr 和 solrhome 复制到其余两个节点

> scp -r /home/solr-home root@solr-2:/home/

> scp -r /home/solr-home root@solr-3:/home/

> scp -r /data/wwwroot/default/solr root@solr-2:/data/wwwroot/default/

> scp -r /data/wwwroot/default/solr root@solr-3:/data/wwwroot/default/

配置solrCloud相关的配置。每个solrhome下都有一个solr.xml,把其中的ip及端口号配置好

> vim /home/solr-home/solr.xml


让zookeeper统一管理配置文件。需要把/conf目录上传到zookeeper

> cd /app/install/solr-7.7.1/server/scripts/cloud-scripts


> ./zkcli.sh -zkhost solr-1:2181,solr-2:2181,solr-3:2181 -cmd upconfig -confdir /home/solr-home/new_core/conf -confname myconf


使用zkCli.sh来确认一下文件已经上传了


修改tomcat/bin目录下的catalina.sh文件,关联solr和zookeeper 三台都需要修改

> vim /usr/local/tomcat/bin/catalina.sh

JAVA_OPTS="-DzkHost=solr-1:2181,solr-2:2181,solr-3:2181"

此时重启所有的tomcat就可以正常访问到solr-ui了

三、添加Collection使用索引功能




PS:集群下的Collection等同于单机的core

四、配置mysql索引

使用SolrCloud来去进行配置过程和单机模式基本一致,但是有以下几个多出来的事情:

> vim server/solr/new_core/conf/solrconfig.xml

在solrconfig.xml 下添加以下配置,添加位置大约在 680行,SearchHandler 配置上面:

<!-- Request Handlers

http://wiki.apache.org/solr/SolrRequestHandler

Incoming queries will be dispatched to a specific handler by name

based on the path specified in the request.

If a Request Handler is declared with startup="lazy", then it will

not be initialized until the first request that uses it.

-->

<!-- add property -->

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">

<lst name="defaults">

<str name="config">data-config.xml</str>

</lst>

</requestHandler>

<!-- SearchHandler

http://wiki.apache.org/solr/SearchHandler

For processing Search Queries, the primary Request Handler

provided with Solr is "SearchHandler" It delegates to a sequent

of SearchComponents (see below) and supports distributed

queries across multiple shards

-->

> vim server/solr/new_core/conf/data-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<dataConfig>

<dataSource name="source"

type="JdbcDataSource"

driver="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/appstore"

user="root"

password="sunmi388"

/>

<document>

<entity name="app"

pk="id"

dataSource="source"

query="select * from app"

deltaImportQuery="select * from app where id = '${dih.delta.id}'"

deltaQuery="select id from app where update_date > '${dataimporter.last_index_time}' and type = 1">

<field column="id" name="id"/>

<field column="app_name" name="app_name"/>

<field column="update_date" name="update_date"/>

</entity>

</document>

</dataConfig>

> vim server/solr/new_core/conf/managed-schema

<!-- add propertity -->

<field name="appName" type="string" indexed="true" stored="true" />

<field name="score" type="string" indexed="true" stored="true" />

<field name="downLoadNum" type="string" indexed="true" stored="true" />

<field name="top" type="string" indexed="true" stored="true" />

<field name="type" type="string" indexed="true" stored="true" />

<field name="update_date" type="string" indexed="true" stored="true" />

添加jar包时每个节点都需要添加

> cd /data/wwwroot/default/solr/WEB-INF/lib/

> wget http://pic.w-blog.cn/mysql-connector-java.jar

上传配置:

> ./zkcli.sh -zkhost solr-1:2181,solr-2:2181,solr-3:2181 -cmd upconfig -confdir /home/solr-home/new_core/conf -confname myconf

PS:分词配置和依赖jar包同理

五、集群机制测试

测试容错

  1. 关闭主节点solr-1
  2. 在数据查询上 另外两个节点依然可以提供数据查询服务
  3. 重启 solr-1,再次查看界面可以发现主节点已经路由给了solr-2



测试分词在集群下的生效范围,在solr-1增加新的分词

> vim /data/wwwroot/default/solr/WEB-INF/classes/ext.dic

美团

增加了分词文件的节点可以识别


未增加分词文件的节点无法识别


影响范围是局部的,并且一定要重启才能生效(当然这个是IK分词库决定的)

六、集群压力分散情况

验证 查询时自动负载均衡通过一台服务器对一台进行压力查看整个集群的情况

> ab -c 1000 -n 100000 -k "http://solr-1:8080/solr/mycollection/select?q=appName%3Agongju"


solr-1


solr-2 -3


承载了接口请求的节点压力会比较大,其余在集群情况下提供了支持

相关推荐

俄罗斯的 HTTPS 也要被废了?(俄罗斯网站关闭)

发布该推文的ScottHelme是一名黑客,SecurityHeaders和ReportUri的创始人、Pluralsight作者、BBC常驻黑客。他表示,CAs现在似乎正在停止为俄罗斯域名颁发...

如何强制所有流量使用 HTTPS一网上用户

如何强制所有流量使用HTTPS一网上用户使用.htaccess强制流量到https的最常见方法可能是使用.htaccess重定向请求。.htaccess是一个简单的文本文件,简称为“.h...

https和http的区别(https和http有何区别)

“HTTPS和HTTP都是数据传输的应用层协议,区别在于HTTPS比HTTP安全”。区别在哪里,我们接着往下看:...

快码住!带你十分钟搞懂HTTP与HTTPS协议及请求的区别

什么是协议?网络协议是计算机之间为了实现网络通信从而达成的一种“约定”或“规则”,正是因为这个“规则”的存在,不同厂商的生产设备、及不同操作系统组成的计算机之间,才可以实现通信。简单来说,计算机与网络...

简述HTTPS工作原理(简述https原理,以及与http的区别)

https是在http协议的基础上加了一层SSL(由网景公司开发),加密由ssl实现,它的目的是为用户提供对网站服务器的身份认证(需要CA),以至于保护交换数据的隐私和完整性,原理如图示。1、客户端发...

21、HTTPS 有几次握手和挥手?HTTPS 的原理什么是(高薪 常问)

HTTPS是3次握手和4次挥手,和HTTP是一样的。HTTPS的原理...

一次安全可靠的通信——HTTPS原理

为什么HTTPS协议就比HTTP安全呢?一次安全可靠的通信应该包含什么东西呢,这篇文章我会尝试讲清楚这些细节。Alice与Bob的通信...

为什么有的网站没有使用https(为什么有的网站点不开)

有的网站没有使用HTTPS的原因可能涉及多个方面,以下是.com、.top域名的一些见解:服务器性能限制:HTTPS使用公钥加密和私钥解密技术,这要求服务器具备足够的计算能力来处理加解密操作。如果服务...

HTTPS是什么?加密原理和证书。SSL/TLS握手过程

秘钥的产生过程非对称加密...

图解HTTPS「转」(图解http 完整版 彩色版 pdf)

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。...

HTTP 和 HTTPS 有何不同?一文带你全面了解

随着互联网时代的高速发展,Web服务器和客户端之间的安全通信需求也越来越高。HTTP和HTTPS是两种广泛使用的Web通信协议。本文将介绍HTTP和HTTPS的区别,并探讨为什么HTTPS已成为We...

HTTP与HTTPS的区别,详细介绍(http与https有什么区别)

HTTP与HTTPS介绍超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的...

一文让你轻松掌握 HTTPS(https详解)

一文让你轻松掌握HTTPS原文作者:UC国际研发泽原写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。...

如何在Spring Boot应用程序上启用HTTPS?

HTTPS是HTTP的安全版本,旨在提供传输层安全性(TLS)[安全套接字层(SSL)的后继产品],这是地址栏中的挂锁图标,用于在Web服务器和浏览器之间建立加密连接。HTTPS加密每个数据包以安全方...

一文彻底搞明白Http以及Https(http0)

早期以信息发布为主的Web1.0时代,HTTP已可以满足绝大部分需要。证书费用、服务器的计算资源都比较昂贵,作为HTTP安全扩展的HTTPS,通常只应用在登录、交易等少数环境中。但随着越来越多的重要...

取消回复欢迎 发表评论: