1   什么是SolrCloud

  SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使  用SolrCloud来满足这些需求。

  SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。

  它有几个特色功能:

  1)集中式的配置信息

  2)自动容错

  3)近实时搜索

  4)查询时自动负载均衡

1.1  Zookeeper是个什么玩意?

  顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象)、Hive(蜜蜂)、pig(小猪)的管理员, Apache Hbase和 Apache Solr 的分布式集群都用到了zookeeper;Zookeeper:是一个分布式的、开源的程序协调服务,是hadoop项目下的一个子项目。

1.2   Zookeeper可以干哪些事情

  1、配置管理

  在我们的应用中除了代码外,还有一些就是各种配置。比如数据库连接等。一般我们都是使用配置文件的方式,在代码中引入这些配置文件。但是当我们只有一种配置,只有一台服务器,并且不经常修改的时候,使用配置文件是一个很好的做法,但是如果我们配置非常多,有很多服务器都需要这个配置,而且还可能是动态的话使用配置文件就不是个好主意了。这个时候往往需要寻找一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。比如我们可以把配置放在数据库里,然后所有需要配置的服务都去这个数据库读取配置。但是,因为很多服务的正常运行都非常依赖这个配置,所以需要这个集中提供配置服务的服务具备很高的可靠性。一般我们可以用一个集群来提供这个配置服务,但是用集群提升可靠性,那如何保证配置在集群中的一致性呢? 这个时候就需要使用一种实现了一致性协议的服务了。Zookeeper就是这种服务,它使用Zab这种一致性协议来提供一致性。现在有很多开源项目使用Zookeeper来维护配置,比如在HBase中,客户端就是连接一个Zookeeper,获得必要的HBase集群的配置信息,然后才可以进一步操作。还有在开源的消息队列Kafka中,也使用Zookeeper来维护broker的信息。在Alibaba开源的SOA框架Dubbo中也广泛的使用Zookeeper管理一些配置来实现服务治理。

  2、名字服务

  名字服务这个就很好理解了。比如为了通过网络访问一个系统,我们得知道对方的IP地址,但是IP地址对人非常不友好,这个时候我们就需要使用域名来访问。但是计算机是不能是别域名的。怎么办呢?如果我们每台机器里都备有一份域名到IP地址的映射,这个倒是能解决一部分问题,但是如果域名对应的IP发生变化了又该怎么办呢?于是我们有了DNS这个东西。我们只需要访问一个大家熟知的(known)的点,它就会告诉你这个域名对应的IP是什么。在我们的应用中也会存在很多这类问题,特别是在我们的服务特别多的时候,如果我们在本地保存服务的地址的时候将非常不方便,但是如果我们只需要访问一个大家都熟知的访问点,这里提供统一的入口,那么维护起来将方便得多了。

  3、分布式锁

  其实在第一篇文章中已经介绍了Zookeeper是一个分布式协调服务。这样我们就可以利用Zookeeper来协调多个分布式进程之间的活动。比如在一个分布式环境中,为了提高可靠性,我们的集群的每台服务器上都部署着同样的服务。但是,一件事情如果集群中的每个服务器都进行的话,那相互之间就要协调,编程起来将非常复杂。而如果我们只让一个服务进行操作,那又存在单点。通常还有一种做法就是使用分布式锁,在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即fail over到另外的服务。这在很多分布式系统中都是这么做,这种设计有一个更好听的名字叫Leader Election(leader选举)。比如HBase的Master就是采用这种机制。但要注意的是分布式锁跟同一个进程的锁还是有区别的,所以使用的时候要比同一个进程里的锁更谨慎的使用。

  4、集群管理

  在分布式的集群中,经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中其他机器需要感知到这种变化,然后根据这种变化做出对应的决策。比如我们是一个分布式存储系统,有一个中央控制节点负责存储的分配,当有新的存储进来的时候我们要根据现在集群目前的状态来分配存储节点。这个时候我们就需要动态感知到集群目前的状态。还有,比如一个分布式的SOA架构中,服务是一个集群提供的,当消费者访问某个服务时,就需要采用某种机制发现现在有哪些节点可以提供该服务(这也称之为服务发现,比如Alibaba开源的SOA框架Dubbo就采用了Zookeeper作为服务发现的底层机制)。还有开源的Kafka队列就采用了Zookeeper作为Cosnumer的上下线管理。

2   Solr集群的结构

3   Solr集群的搭建

  本教程的这套安装是单机版的安装,所以采用伪集群的方式进行安装,如果是真正的生产环境,将伪集群的ip改下就可以了,步骤是一样的。

  SolrCloud结构图如下:

  需要三个zookeeper节点

  四个solr节点。

  使用伪分布式实现solr集群。需要三个zookeeper实例,4个tomcat实例,可以在一台虚拟机上模拟。建议虚拟机1G以上内存。

4   Zookeeper集群的搭建

4.1   前台条件

三个zookeeper实例。Zookeeper也是java开发的所以需要安装jdk。

1、Linux系统

2、Jdk环境。

3、Zookeeper。

4.2   Zookeeper的安装步骤

第一步:把zookeeper的安装包上传到服务器

第二步:解压缩。

[root@bogon ~]# tar -zxf zookeeper-3.4.6.tar.gz

[root@bogon ~]#

第三步:在/usr/local/目录下创建一个solrcloud目录。把zookeeper解压后的文件夹复制到此目录下三份。分别命名为zookeeper1、2、3

[root@bogon ~]# mkdir /usr/local/solrcloud

[root@bogon ~]# mv zookeeper-3.4.6 /usr/local/solrcloud/zookeeper1

[root@bogon ~]# cd /usr/local/solrcloud

[root@bogon solrcloud]# ll

total 4

drwxr-xr-x. 10 1000 1000 4096 Feb 20  2014 zookeeper1

[root@bogon solrcloud]# cp -r zookeeper1/ zookeeper2

[root@bogon solrcloud]# cp -r zookeeper1/ zookeeper3

[root@bogon solrcloud]#

第四步:配置zookeeper。

1、在每个zookeeper文件夹下创建一个data目录。

2、在data文件夹下创建一个文件名称为myid,文件的内容就是此zookeeper的编号1、2、3

[root@bogon data]# echo 1 >> myid

[root@bogon data]# ll

total 4

-rw-r--r--. 1 root root 2 Sep 17 23:43 myid

[root@bogon data]# cat myid

1

[root@bogon data]#

在zookeeper2、3文件夹下分别创建data目录和myid文件

[root@bogon solrcloud]# mkdir zookeeper2/data

[root@bogon solrcloud]# echo 2 >> zookeeper2/data/myid

[root@bogon solrcloud]# ll zookeeper2/data

total 4

-rw-r--r--. 1 root root 2 Sep 17 23:44 myid

[root@bogon solrcloud]# cat zookeeper2/data/myid

2

[root@bogon solrcloud]# mkdir zookeeper3/data

[root@bogon solrcloud]# echo 3 >> zookeeper3/data/myid

[root@bogon solrcloud]#

3、把zookeeper1下conf目录下的zoo_sample.cfg文件复制一份改名为zoo.cfg

4、修改zoo.cfg的配置

第五步:启动zookeeper。进入zookeeper1/bin目录下。

启动zookeeper:./zkServer.sh start

关闭:./zkServer.sh stop

查看状态:./zkServer.sh status

[root@bogon solrcloud]# zookeeper1/bin/zkServer.sh status

JMX enabled by default

Using config: /usr/local/solrcloud/zookeeper1/bin/../conf/zoo.cfg

Mode: follower

[root@bogon solrcloud]# zookeeper2/bin/zkServer.sh status

JMX enabled by default

Using config: /usr/local/solrcloud/zookeeper2/bin/../conf/zoo.cfg

Mode: leader

[root@bogon solrcloud]# zookeeper3/bin/zkServer.sh status

JMX enabled by default

Using config: /usr/local/solrcloud/zookeeper3/bin/../conf/zoo.cfg

Mode: follower

[root@bogon solrcloud]#

5   Solr实例的搭建

第一步:创建4个tomcat实例,修改其端口。8080-8083

第二步:解压solr-4.10.3.tar.gz压缩包。从压缩包中复制solr.war到tomcat。

第三步:启动tomcat解压war包。把solr-4.10.3目录下example目录下的关于日志相关的jar包添加到solr工程中。

第四步:创建solrhome。修改web.xml指定solrhome的位置。

6   solr集群的搭建

6.1   第一步

把solrhome中的配置文件上传到zookeeper集群。使用zookeeper的客户端上传。

客户端命令位置:/root/solr-4.10.3/example/scripts/cloud-scripts

./zkcli.sh -zkhost 192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf

红色字体部分的ip表示zookeeper集群的ip地址以及对应的端口。

查看配置文件是否上传成功:

[root@bogon bin]# ./zkCli.sh

Connecting to localhost:2181

[zk: localhost:2181(CONNECTED) 0] ls /

[configs, zookeeper]

[zk: localhost:2181(CONNECTED) 1] ls /configs

[myconf]

[zk: localhost:2181(CONNECTED) 2] ls /configs/myconf

[admin-extra.menu-top.html, currency.xml, protwords.txt, mapping-FoldToASCII.txt, _schema_analysis_synonyms_english.json, _rest_managed.json, solrconfig.xml, _schema_analysis_stopwords_english.json, stopwords.txt, lang, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt, synonyms.txt, scripts.conf, update-script.js, velocity, elevate.xml, admin-extra.menu-bottom.html, clustering, schema.xml]

[zk: localhost:2181(CONNECTED) 3]

6.2   第二步

修改solrhome下的solr.xml文件,指定当前实例运行的ip地址及端口号。

6.3   第三步

修改每一台solr的tomcat 的 bin目录下catalina.sh文件中加入DzkHost指定zookeeper服务器地址:

JAVA_OPTS="-DzkHost=192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"         红色字体的ip表示zookeeper集群的ip以及端口号

(可以使用vim的查找功能查找到JAVA_OPTS的定义的位置,然后添加)

6.4   第四步

重新启动tomcat

一个主节点多个备份节点,集群只有一片。

6.5   第五步

创建一个两片的collection,每片是一主一备。

使用以下命令创建:

http://192.168.25.154:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

6.6   第六步

删除collection1.

http://192.168.25.154:8080/solr/admin/collections?action=DELETE&name=collection1

7  Solr集群的使用

使用solrj操作集群环境的索引库。

7.1   Solrj测试

 1 public class SolrCloudTest {
 2
 3     @Test
 4     public void testAddDocument() throws Exception {
 5         //创建一个和solr集群的连接
 6         //参数就是zookeeper的地址列表,使用逗号分隔
 7         String zkHost = "192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183";
 8         CloudSolrServer solrServer = new CloudSolrServer(zkHost);
 9         //设置默认的collection
10         solrServer.setDefaultCollection("collection2");
11         //创建一个文档对象
12         SolrInputDocument document = new SolrInputDocument();
13         //向文档中添加域
14         document.addField("id", "test001");
15         document.addField("item_title", "测试商品");
16         //把文档添加到索引库
17         solrServer.add(document);
18         //提交
19         solrServer.commit();
20     }
21
22     @Test
23     public void deleteDocument() throws SolrServerException, IOException {
24         //创建一个和solr集群的连接
25         //参数就是zookeeper的地址列表,使用逗号分隔
26         String zkHost = "192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183";
27         CloudSolrServer solrServer = new CloudSolrServer(zkHost);
28         //设置默认的collection
29         solrServer.setDefaultCollection("collection2");
30
31
32         solrServer.deleteByQuery("*:*");
33         solrServer.commit();
34     }
35 }

7.2   Solrj和spring集成

修改spring的配置文件,添加集群版的配置:

1 <!-- 集群版 -->
2     <bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
3         <constructor-arg name="zkHost" value="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"></constructor-arg>
4         <property name="defaultCollection" value="collection2"></property>
5     </bean>

转载于:https://www.cnblogs.com/append/p/5747956.html

Solr集群的搭建以及使用(内涵zookeeper集群的搭建指南)相关推荐

  1. zeekooper集群搭建_How to do - ZooKeeper集群搭建(我见过最详细的完整教学)

    ZooKeeper集群介绍 最典型集群模式: Master/Slave 模式(主备模式).在这种模式中,通常 Master服务器作为主服务器提供写服务,其他的 Slave 服务器从服务器通过异步复制的 ...

  2. 面试官:Zookeeper集群怎么搭建?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,可以微信搜索[小奇JAVA面试]第一时间阅 ...

  3. zookeeper集群搭建与使用

    1.概念 1.1集群中的角色 leader服务器:zookeeper集群的核心 follower服务器:zookeeper集群状态的跟随者 observer服务器:观察者1.2会话 会话是指客户端与z ...

  4. Zookeeper命令操作(初始Zookeeper、JavaAPI操作、分布式锁实现、模拟12306售票分布式锁、Zookeeper集群搭建、选举投票)

    Zookeeper命令操作(初始Zookeeper.JavaAPI操作.分布式锁实现.模拟12306售票分布式锁.Zookeeper集群搭建.选举投票) 1.初始Zookeeper Zookeeper ...

  5. 构建高可用ZooKeeper集群(转载)

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  6. Docker部署Zookeeper集群

    Docker部署Zookeeper集群 官方网站: http://zookeeper.apache.org/ http://zookeeper.apache.org/doc/r3.4.8/zookee ...

  7. zookeeper集群在线迁移(扩容)详解

    zk集群原理 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现. 分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅.负载均衡.命 ...

  8. ZooKeeper 集群:集群概念、选举流程、机器数量

    文章目录 集群 集群角色 选举 服务器启动时期的选举 服务器运行时期的选举 集群的机器数量 集群 集群角色 通常在分布式系统中,构成一个集群的每一台机器都有自己的角色,最常见的集群模式就是Master ...

  9. CentOS7下安装配置zookeeper集群及设置开机自启

    1.在做zookeeper集群之前需要有至少三台centos机器或虚拟机 一.Zookeeper原理简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程 ...

  10. Zookeeper集群与分布式理论

    文章目录 1.分布式理论之强一致性概念 2.分布式理论之最终一致性概念 3. Zookeeper集群选举原理策略 4.构建Zookeeper集群环境 5.为什么zookeeper集群节点最好要是奇数 ...

最新文章

  1. java static 可见性_Java多线程 synchronized与可见性的关系以及可见性问题总结
  2. 【UVALive 4642】Malfatti Circles(圆,二分)
  3. ANSYS FLEXlm License Manager的卸载方法
  4. 2021-10-11 ! LeetCode226. 翻转二叉树 的前中后层序遍历写法
  5. 云原生生态周报 Vol. 19 | Helm 推荐用户转向 V3
  6. 利用WindowsPhone7_SDK_Full.rar_for_xp,在xp下安装sdk,部署xap软件的教程
  7. GitHub真把代码冰封北极1000年!
  8. 使用ANTLR4,用于代码镜像和基于Web的DSL的Primefaces扩展
  9. 干货|Spring Cloud Stream 体系及原理介绍
  10. fopen文件路径怎么写_php的多功能文件操作类
  11. 【html5插入透明Webm视频】
  12. 硬件基础知识笔记(二极管、三极管、MOS管、运放、滤波器、跟随器、整流)
  13. 华为+android+root权限获取root,华为emui5.0系统如何root?华为荣耀v8 emui5.0获取7.0系统的root权限方法...
  14. mac虚拟摄像头插件_macOS平台下虚拟摄像头的研发总结
  15. geoserver配置SQL图层 cql_filter模糊查询
  16. 炫云全新支持优化渲染质量了
  17. weex 打包成android的apk之后安装提示安装包解析错误
  18. 我们用4行代码节省了100万 相见恨晚的PCDN
  19. 你的磁力链为什么下不动了?(干货)
  20. China Science投稿模板

热门文章

  1. 阿里达摩院金榕:从技术到科学,中国AI向何处去?
  2. 论文推荐 | 一文了解百度10篇ACL 2019概况和该技术的实际可落地应用
  3. ICLR最佳论文“彩票假设”:如何通过彩票假设构建轻量化模型(上)
  4. 深度学习2.0-10.tensorflow的高阶操作之张量的限幅
  5. 机器学习之特征工程(二)
  6. Spinnaker:云原生多云环境持续部署的未来
  7. 经验之谈:程序员应该如何学好大数据技术
  8. 《数源思维》提问工具之“语法套”
  9. 互联网之达芬奇密码:浪潮揭秘:与中国五亿网民互为影响的互联网DNA
  10. Oracle J.D.Edwards技术与应用