上一篇我们已经把 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