集群版solr(solrcloud)

什么是SolrCloud

solr的分布式搜索方案

为什么要有SolrCloud

当索引数据量大,搜索请求并发量高时

  • 降低单机处理的压力,能保证高并发下的高可用
  • 提高单机存储的索引上限,提高了可扩展性

SolrCloud做了什么

  • 自动容错
  • 实时搜索
  • 查询时自动负载均衡
  • 配置文件集中管理

如何实现SolrCloud

solr+zookeeper
将索引数据分片(Shard)存储到不同的服务器上
每个分片由主服务器以及多个备份从服务器共同维护
不同的搜索请求由不同分片的服务器提供服务
在这里插入图片描述

  • 物理结构
    一个SolrCloud由多个solr节点组成
    一个solr节点由多个solr core组成
  • 逻辑结构
    一个solr core包含一个独立索引库
    一个完整索引库由多个分片组成
    一个分片由多个solr core提供服务(主从)

SolrCloud搭建

第一步:搭建zookeeper集群

一、准备工作

  • 安装jdk:
  • 将安装包上传后解压

二、准备集群节点

  • 创建集群目录: mkdir /usr/local/solr-cloud
  • 准备多个zookeeper节点
    cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper01
    cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper02
    cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper03
  • 修改zookeeper节点配置
    1. 创建各个节点的数据存放目录:
      cd /usr/local/solr-cloud/zookeeper0X
      mkdir data
      echo 1 >> data/myid
    2. 修改各个节点的配置文件:
      cp zoo_simple.cfg zoo.cfg
      vim zoo.cfg
      修改数据存放位置dataDir
      修改客户端连接端口clientPort
      添加以下内容指定集群中的节点ip:投票端口:选举端口
      server.1=ip:2881:3881
      server.2=ip:2882:3882
      server.3=ip:2883:3883
    3. 启动zookeeper:./zkServer.sh start
      关闭为./zkServer.sh stop
      查看服务状态为./zkServer.sh status
第二步:搭建solr集群

一、准备tomcat

  • 准备多个tomcat:
    拷贝多个tomcat解压文件到solr-cloud中:
    cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat0X
  • 修改tomcat配置文件中的端口:
    vim tomcat0X/conf/server.xml

二、准备solr节点

  • 把单机版的solr复制到tomcat下
    cp -r solr /usr/local/solr-cloud/tomcat0X/webapps
  • 为每个solr实例创建solrhome
    cp -r solrhome /usr/local/solr-cloud/solrhome0X
  • 为每个solr实例关联对应的solrhome
    修改tomcat0X/webapps/solr/WEB-INF/web.xml中的配置
  • 为每个solrhome设置所在的tomcatIP以及端口
    vim tomcat0X/webapps/solr/WEB-INF/web.xml
    修改每个solrhome下的solr.xml文件:
    在这里插入图片描述

三、将配置文件上传到zookeeper

  1. 启动zookeeper集群
  2. cd /root/solr-4.10.3/example/scripts/cloud-scripts
  3. 上传配置文件: 用zkcli.sh命令将任一/usr/local/solr-cloud/solrhome0X/collection1/conf目录上传到zookeeper
    ./zkcli.sh -zkhost zookeeperIp1:端口1,zookeeperIp2:端口2,zookeeperIp3:端口 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf
  4. 查看是否上传成功:
    cd /usr/local/solr-cloud/zookeeper01/bin
    ./zkCli.sh
    确保包含schema.xml以及solrconfig.xml
    在这里插入图片描述

四、告诉每个solr节点zookeeper的位置

  1. 修改tomcat0X/bin/catalina.sh中的配置,添加:
    JAVA_OPTS="-DzkHost=zookeeperIp1:端口1,zookeeperIp2:端口2,zookeeperIp3:端口
  2. 启动所有solr节点,访问其中的一个
    在这里插入图片描述

五、集群分片

  1. 浏览器访问
    http://solrIp1:port1/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
    在这里插入图片描述
    在这里插入图片描述
  2. 删除不用的collection1
    http://solrIp1:port1/solr/admin/collections?action=DELETE&name=collection1
    在这里插入图片描述

solr集群导入数据

从数据库中根据sql语句查询数据,遍历数据创建文档对象,把文档对象写入索引库

//从数据库中查询数据
List<SearchItem> items = itemMapper.importItems();
for (SearchItem item : items) {
	//创建文档
	SolrInputDocument document = new SolrInputDocument();
					
	//向文档中添加域
	document.addField("id", item.getId());
	document.addField("item_title", item.getTitle());
	document.addField("item_sell_point", item.getSell_point());
	document.addField("item_price", item.getPrice());
	document.addField("item_image", item.getImage());
	document.addField("item_category_name", item.getCategory_name());
	document.addField("item_desc", item.getItem_desc());
					
	//将文档写入索引库
	solrServer.add(document);
	}
//提交
solrServer.commit();

但service层配置和单机版不同

<!-- 集群版solr -->
<bean id = "cloudSolrServer" class = "org.apache.solr.client.solrj.impl.CloudSolrServer">
	<constructor-arg name = "zkHost" value = "192.168.134.131:2181,192.168.134.131:2182,192.168.134.131:2183"/>
	<property name="defaultCollection" value="Collection2"></property>
</bean>

项目中使用solr集群

同单机版相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值