专栏首页我是攻城师SolrCloud5.4.1集群实战(一)

SolrCloud5.4.1集群实战(一)

古时候,人们用一头牛拉不动一个耕地的犁时,不会去找个比这头牛更大的牛,而是会直接使用两个牛一起参与耕地。在分布式计算中,道理同样如此,Hadoop就是一个典型的例子。诸如此类的有很多,这就是典型水平切分架构。早期的solr仅仅支持主从架构模式,这种架构可以提高集群的吞吐量和可靠性,当面临越来越多的数据时,并不能提升检索性能,所以在solr4.x之后,开始支持cloud模式的集群,可以将一份超大索引水平切分到多台机器上,从而提升系统的检索性能,当然也兼具了主从模式的优点,支持容错,副本,扩容等。 基础环境如下: Centos6.5 JDK1.7 Apache Solr5.4.1 Apache Zookeeper3.4.6 下面看下如何安装集群: 假设外置zk集群已经搭建完毕,如果不知道怎么安装:请参考我的这篇文章:http://qindongliang.iteye.com/blog/1985145

(一):集群安装 1,下载solr wget http://archive.apache.org/dist/lucene/solr/5.4.1/solr-5.4.1.tgz 2,分发solr到你所有的台机器上 3,解压 tar -zxvf solr-5.4.1.tgz 4,依次在每台机器上执行命令启动节点: bin/solr -c -z zk1:2181,zk2:2181:zk3:2181 访问cloud首页,点tree能看到live_nodes:

5, 创建Collection,并指定config初始化,在任何一台机器上执行都可以,如果再zk上的configs下面已经有collection名了,那么下面命令会 自动重用已有的collection配置

Java代码

  1. //创建一个名叫big_search的collection,它的shard是3,副本数是2(包括自身也是一个副本)
  2. /solr create_collection -c big_search -d server/solr/configsets/data_driven_schema_configs/conf/ -shards 3 -replicationFactor 2
  3. //创建一个名叫big_search的collection,它的shard是10,没有副本
  4. /ROOT/server/solr-5.4.1/ && bin/solr create_collection -c big_search -d search/info/conf -shards 10

6,执行完成之后,访问其中任意一台 http://ip:port/solr/#/~cloud便能看到,拓扑云图:

(二)常用命令 configset api操作:

Java代码

  1. //查看zk里面的有多少个collection
  2. curl http://localhost:8983/solr/admin/configs?action=LIST&wt=json
  3. //
  4. curl http://localhost:8983/solr/admin/configs?action=DELETE\&name=big_search

指定端口号,启动一个solr的shard: /ROOT/server/solr-5.4.1/bin/solr start -c -p 7574 -z h1,h2,h3 -s server/solr/ cd /ROOT/server/solr-5.4.1/ && bin/solr start -c -m 4g -p 8983 -z h1,h2,h3 -s server/solr/ 重新启动: bin/solr restart -c -p 8983 -z h1,h2,h3 -s server/solr/ 6,停止solrcloud集群: 按端口停止 /ROOT/server/solr-5.4.1/bin/solr stop -p 8983 停止所有 /ROOT/server/solr-5.4.1/bin/solr stop -all 一些api:

Java代码

  1. curl http://localhost:8983/solr/admin/collections?action=list 查看所有的collection

删除不用的collection:

Java代码

  1. curl http://localhost:8983/solr/admin/collections?action=DELETE\&name=big_search

solr自带的zk命令操作zk上有关solr的文件目录: sh server/scripts/cloud-scripts/zkcli.sh zkcli.sh -zkhost localhost:9983 -cmd bootstrap -solrhome /opt/solr zkcli.sh -zkhost localhost:9983 -cmd upconfig -confdir /opt/solr/collection1/conf -confname myconf zkcli.sh -zkhost localhost:9983 -cmd downconfig -confdir /opt/solr/collection1/conf -confname myconf zkcli.sh -zkhost localhost:9983 -cmd linkconfig -collection collection1 -confname myconf zkcli.sh -zkhost localhost:9983 -cmd makepath /apache/solr zkcli.sh -zkhost localhost:9983 -cmd put /solr.conf 'conf data' zkcli.sh -zkhost localhost:9983 -cmd putfile /solr.xml /User/myuser/solr/solr.xml zkcli.sh -zkhost localhost:9983 -cmd get /solr.xml zkcli.sh -zkhost localhost:9983 -cmd getfile /solr.xml solr.xml.file zkcli.sh -zkhost localhost:9983 -cmd clear /solr zkcli.sh -zkhost localhost:9983 -cmd list zkcli.sh -zkhost localhost:9983 -cmd clusterprop -name urlScheme -val https 清空zk上面的某一个config配置:

Java代码

  1. sh server/scripts/cloud-scripts/zkcli.sh -zkhost h1 -cmd clear /configs/big_search

上传本地的conf到zk上:

Java代码

  1. sh server/scripts/cloud-scripts/zkcli.sh -zkhost h1,h2,h3 -cmd upconfig -confdir /ROOT/server/solr-5.4.1/search/info/conf/ -confname big_search

添加副本: 给shard3在186上面加一个副本 Java代码

  1. curl http://localhost:8983/solr/admin/collections?action=ADDREPLICA\&collection=big_search\&shard=shard3\&node=192.168.1.186:8983_solr

删除副本: 删除副本前,到对应的solr目录下,看该core的cat core.properties文件,并拷贝其中的core_name作为该url的最后一个参数,才行 Java代码

  1. curl http://localhost:8983/solr/admin/collections?action=DELETEREPLICA\&collection=big_search\&shard=shard1\&replica=core_node4

总结几点: (1)SolrCloud依赖zookeeper,leader的选举通过zk实现,所有的词库和配置文件,都在集中zk上,所有的节点会从 zk上加载词库和scheml。 如果配置文件更新,不需要分发到各个机器上,最多reload下core (2)Elasticsearch的不依赖zookeeper,master选举通过找到node.master=true的所有节点,然后排序取id值最小的一个升为master, mapping字段映射关系维护在内存中,不建议经常变动,否则会oom,更改后所有节点生效,但词库文件不在内存中,更改后,必须分发所有节点 (3)事实证明,并不是shard越多越好,一般情况下有几台机器就分配几个shard就可以了,当然如果机器比较牛逼,可以在一个机器上多几个shard也行。 (4)全量索引的的时候,尽量删除副本,提高写入性能,无论elasticsearch,还是solrcloud都是这样的,因为副本会随时同步leader的索引,造成IO和网络IO大量占用。 (5)索引完毕,可以添加副本,这一点es和solrcloud都可以轻松扩展,添加副本的目的,是提高容错,提高吞吐和抗并发能力 (6)如果索引中,有大量的需要分词的字段,比如大文本或者业务需求里面有大量排序操作,在配置机器时,尽量提升机器的CPU,当然磁盘的IO也是越快越好,对写入性能有比较大影响。 参考资料: https://cwiki.apache.org/confluence/display/solr/SolrCloud

本文分享自微信公众号 - 我是攻城师(woshigcs)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-02-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Solr5.1.0如何安装部署?

    我是攻城师
  • 如何使用Hive集成Solr?

    我是攻城师
  • 最新版Solr6.2.1安装记录

    我是攻城师
  • solr安装配置

    环境介绍 solr 6.5.1 tomcat8 jdk1.8

    似水的流年
  • solr初探-安装使用

    Solr是一个高性能,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优...

    kl博主
  • solr安装配置

    下载地址:http://www.apache.org/dyn/closer.lua/lucene/solr

    似水的流年
  • solr install

         Solr是一个独立的企业及搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的...

    week
  • 搜索服务Solr集群搭建 使用ZooKeeper作为代理层

    上篇文章搭建了zookeeper集群 那好,今天就可以搭建solr搜服服务的集群了,这个和redis 集群不同,是需要zk管理的,作为一个代理层 安装四个tom...

    风间影月
  • (二)Solr的安装配置及部署

    qubianzhong
  • 腾讯云-Solr企业级搜索引擎实战

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件...

    用户5224393

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动