Solr7.2.1整合 spring5.0.2 以及集群版和单机版 spring 配置 第三篇

上一篇我们已经把 solr7.2.1的单机版和 spring5.0.2进行了整合。并且实现了 solr7 客户端由 spring 进行管理。

接下来我们开始集群版的配置。

首先,我们还是打开官方文档,我说了,当你不知道干什么的时候,不妨打开官方文档。

还是以 solr 生产的那个页面。往下拉,你会看到如下:


欧克欧克。懂了.我们在 shell 中输入:

sudo bash ./install_solr_service.sh solr-7.2.1.tgz -s solr2 -p 8984
sudo bash ./install_solr_service.sh solr-7.2.1.tgz -s solr3 -p 8985

控制台输出如下:我们可以看到8984端口以及成功。同理8985也一样。

完成后我们要浏览器访问下他们的端口,看看是不是正常启动。

安装完成后我们的Linux 上现在运行着三个 solr。其中8983的 solr 是单机版。8984和8985端口的 solr 是集群版。他们都是互不干扰的。而且8984和8985两个 solr 并没有建立集群关系。

由于 solr 需要 zookeeper。当然,集群版不能使用内置 zookeeper。安装 zookeeper 我这里不多做讲解,网上很多教程。

安装好了 zookeeper 我们开始solr 集群。

还是回到官方文档,还是这个页面。我们可以看到如下:


包含文件就是/etc/default/solr.in.sh 我们按照官方文档来:

vi /etc/default/solr2.in.sh
vi /etc/default/solr3.in.sh

分别修改 8984端口(solr2)和8985端口(solr3)的包含文件。(名字这样定义是因为我们安装的使用用的 solr2和 solr3)


我们添加了一个ZK_HOST和一个 ZK_CLIENT_TIMEOUT(连接超时时间)。注意!要加引号!!

注意!!!要是我们只是这样配置。zookeeper 内存储的将会是 solr 集群节点内网 ip!!内网我们外网是不可能访问到的。除非你是人才!!!所以,下面一步很重要!!但是官方文档没有说明!!!!

我们修改 solr 的 solr.xml文件

vi /var/solr2/data/solr.xml
vi /var/solr3/data/solr.xml

修改如下:加入 solr集群节点的公网 ip和暴露端口:


必须修改!不修改 solrj 从 zookeeper 获得的solr 集群节点 ip 就不对!

上面的完成以后我们重启solr2和 solr3

service solr2 restart
service solr3 restart

浏览器访问8984或者8985.我们会发现左侧多了一个 cloud 和 collection 选项。现在是集群版。所以我们接下来创建的是集合,不是核心!solr 给我们提供了图形化创建集合的方法。我们点击 collection。numShards我们只分两片。因为只有2个节点。repli 那个是备份节点。我们暂时不要,不做修改。点击确定。


稍等,然后刷新网页,点击 cloud我们能够看到两个集群的情况,都是主,没有备份:


接下来我们开始 solr7 整合 spring5

由于 CloudSolrClient 是以非静态工程方法实例化的一个对象。所以我们不能用 spring 构造实例。只能用 spring 的非静态工程实例化 solr。spring配置如下:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.2.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
    
    <!-- 单机版solr的连接 -->
	<bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrClient">
		<constructor-arg name="builder" value="http://192.168.11.22:8983/solr/core"/>
	</bean>

	<!-- 集群版solr的连接 -->
	<bean id="emptyBuilder" class="org.apache.solr.client.solrj.impl.CloudSolrClient.Builder" />
            <bean  id="builder" factory-bean="emptyBuilder" factory-method="withZkHost">
            <!-- <constructor-arg value="192.168.146.137:2182,192.168.146.137:2183,192.168.146.137:2184" type="java.lang.String"/> -->
            <constructor-arg value="192.168.11.11:2181" type="java.lang.String"/>
        </bean>
        <bean  id="cloudSolrServer" factory-bean="builder" factory-method="build">
            <property name="defaultCollection" value="collection"/>
        </bean>
</beans>

java 实例文件如下:

import java.io.IOException;
import java.util.UUID;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

	public static void main(String[] args) throws SolrServerException, IOException {
		final SolrClient client = getSolrClient();
		final SolrInputDocument doc = new SolrInputDocument();
		doc.addField("id", UUID.randomUUID().toString());
		doc.addField("name", "My Mac!");
		// final UpdateResponse updateResponse = client.add("core1", doc);
		client.add(doc);
		client.commit();
		client.close();
	}

	public static SolrClient getSolrClient() {
		// final String solrUrl = "http://192.168.33.137:8984/solr";
		// return new
		// HttpSolrClient.Builder(solrUrl).withConnectionTimeout(10000).withSocketTimeout(60000).build();
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
				"classpath:spring/applicationContext-dao.xml");
		//单机版
//		SolrClient solrClient = (SolrClient) applicationContext.getBean("httpSolrServer");
//		return solrClient;
		
		//集群版
		SolrClient solrClient = (SolrClient) applicationContext.getBean("cloudSolrServer");
		return solrClient;
	}

}

运行后查看浏览器:


好了。整个 solr7.2.1整合 spring5.0.2就大工告成!

这里有几个理念:

  • 习惯优于配置
  • 当你不知道怎么做的时候,不妨打开官方文档

大家有问题的可以评论和留言哈,我可以帮忙解决。另qq:417342582

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值