1 特点

  1. 集中式配置管理
  2. 自动化负载均衡和故障切换
  3. ZooKeeper 整合

2 相关概念

  1. Node: solr 实例
  2. Cluster: 一个或者多个 solr 实例
  3. Collection: 在 SolrCloud 集群中逻辑意义上的完整的索引, 可以分到多个 Shards 上
  4. Config Set: Solr Core 提供服务必须的一组配置文件
  5. Leader: 赢得选举的 Shard replicas
  6. Replica: Shard 的一个拷贝
  7. Shard: Collection 的逻辑分片。一个 shard 上面一个 leader replica
  8. Zookeeper: Zookeeper 提供分布式锁功能,对 SolrCloud 是必须的。它处理 Leader 选举。Solr 可以以内嵌的 Zookeeper 运行,但是建议用独立的,并且最好有 3 个以上的主机。

3 简单运行 solr 内置的 Cloud 示例

bin/solr start -e cloud

运行之后会有引导帮助你创建好一个 cloud 环境.

可以通过这个示例感受一下上节讲到的概念.

当然, 这个运行的是一个内置的 zookeeper. 下面来看下如何运行一个外部的 zookeeper 并且建立一个高可用的 zookeeper 集群

4 Zookeeper 单机与集群配置

需要多少 Zookeeper 想要挂掉 F 个机器时还能正常提供服务,就需要 2*F+1 台机器

下载地址:http://zookeeper.apache.org/releases.html

4.1 启动一个实例 standalone

解压之后, cp conf/zoo_sample.cfg conf/zoo.cfg (zookeeper 的默认配置为 conf/zoo.cfg ).

修改 conf/zoo.cfg 内容为:

1
2
3
4
5
6
# 一个滴答(时间单位, 毫秒)同步时间
tickTime=2000
# 数据文件夹配置
dataDir=/var/lib/zookeeper
# 端口号
clientPort=2181

使用命令启动 bin/zkServer.sh start

查看状态 bin/zkServer.sh status

关闭 bin/zkServer.sh stop

4.2 集群方式启动

  1. 配置文件
    • zoo.cfg

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      dataDir=/var/lib/zookeeperdata/1
      clientPort=2181
      # 初始化连接最大忍受的滴答次数
      initLimit=5
      # leader 与 follower 发送消息最大的等待时间
      syncLimit=2
      # server.{第几号服务器}={ip 地址}:{服务器与 leader 交换信息的端口}:{leader 服务器挂掉之后,选举信息通信的端口}
      server.1=localhost:2888:3888
      server.2=localhost:2889:3889
      server.3=localhost:2890:3890
    • zoo2.cfg

      1
      2
      3
      4
      5
      6
      7
      8
      tickTime=2000
      dataDir=~/self/zoo/zoodata/2
      clientPort=2182
      initLimit=5
      syncLimit=2
      server.1=localhost:2888:3888
      server.2=localhost:2889:3889
      server.3=localhost:2890:3890
    • zoo3.cfg

      1
      2
      3
      4
      5
      6
      7
      8
      tickTime=2000
      dataDir=~/self/zoo/zoodata/3
      clientPort=2183
      initLimit=5
      syncLimit=2
      server.1=localhost:2888:3888
      server.2=localhost:2889:3889
      server.3=localhost:2890:3890
    • 生成 myid file

      1
      2
      3
      4
      mkdir -p zoodata/{1,2,3}
      echo 1 > 1/myid
      echo 2 > 2/myid
      echo 3 > 3/myid
    • 启动三个 zookeeper

      1
      2
      3
      4
      5
      6
      cd <ZOOKEEPER_HOME>
      bin/zkServer.sh start zoo.cfg
      bin/zkServer.sh start zoo2.cfg
      bin/zkServer.sh start zoo3.cfg

      bin/zkServer.sh status zoo2.cfg

    自带的示例引用外部 zookeeper

    bin/solr start -e cloud -z localhost:2181,localhost:2182,localhost:2183 -noprompt

    PS: (查看除了 zoo.cfg 之外的节点都需要加上配置名称)

5 solrCloud 与 Zookeeper 配合使用

5.1 启动多个 solr 节点

1
2
3
4
5
6
7
8
9
mkdir -p server/{node1,node2,node3}
节点配置目录下必须要有 solr.xml 文件

cp server/solr/solr.xml server/node2
cp server/solr/solr.xml server/node3
# -p 指定端口 -c 表示以 cloud 模式启动 -z 指定 zookeeper 地址 -s 指定节点配置路径 -m 指定 jvm 内存大小
bin/solr start -p 8983 -c -m 200m -z localhost:2181 -s /Users/wudanyang/self/solr/server/node1 (=zookeeper= 若是集群方式启动则需要指定多个地址, 如: -z localhost:2181,localhost:2182,localhost:2183 )
bin/solr start -p 8984 -c -m 200m -z localhost:2181 -s /Users/wudanyang/self/solr/server/node2
bin/solr start -p 8985 -c -m 200m -z localhost:2181 -s /Users/wudanyang/self/solr/server/node3

5.2 通过 zookeeper 管理配置文件

使用 zkcli.sh 上传配置文件到 zookeeper

1
2
cd /Users/wudanyang/self/solr/server/scripts/cloud-scripts
sh zkcli.sh -cmd upconfig -confdir /Users/wudanyang/self/solr/server/solr/configsets/car_test -confname car_test -z localhost:2181
Last Updated 2017-06-01 四 19:42.
Render by hexo-renderer-org with Emacs 25.1.1 (Org mode 9.0.2)