共计 12961 个字符,预计需要花费 33 分钟才能阅读完成。
概述:
SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,它的主要思想是使用 Zookeeper 作为集群的配置信息中心。
它有几个特色功能:
1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡
安装 zookeeper
上面也说了 SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,所有要部署 solrCloud+tomcat+zookeeper 的集群,必须先安装 zookeeper
安装环境:
Liux: CentOS release 6.4
JDK:1.7.0_55
因为我研究的是 solr 最新的版本,所以研究的是 solr4.8.0 然后 solr4.8.0 必须跑在 jdk1.7 以上的版本
1、zookeeper 是个什么玩意?
答:顾名思义 zookeeper 就是动物园管理员,他是用来管 Hadoop(大象)、Hive(蜜蜂)、pig(小猪) 的管理员,Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper: 是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目;
2、zookeeper 伪集群安装
因为我演示的这套安装是单机版的安装,所以采用伪集群的方式进行安装,如果是真正的生成环境,将伪集群的 ip 改下就可以了,步骤是一样的,学会了伪集群安装,真正生产的多环境安装不会,那是不可能的一件事情。
第一步:下载最新的 zooper 软件:http://www.apache.org/dyn/closer.cgi/zookeeper/
Ubuntu 14.04 安装分布式存储 Sheepdog+ZooKeeper http://www.linuxidc.com/Linux/2014-12/110352.htm
CentOS 6 安装 sheepdog 虚拟机分布式储存 http://www.linuxidc.com/Linux/2013-08/89109.htm
ZooKeeper 集群配置 http://www.linuxidc.com/Linux/2013-06/86348.htm
使用 ZooKeeper 实现分布式共享锁 http://www.linuxidc.com/Linux/2013-06/85550.htm
分布式服务框架 ZooKeeper — 管理分布式环境中的数据 http://www.linuxidc.com/Linux/2013-06/85549.htm
ZooKeeper 集群环境搭建实践 http://www.linuxidc.com/Linux/2013-04/83562.htm
ZooKeeper 服务器集群环境配置实测 http://www.linuxidc.com/Linux/2013-04/83559.htm
ZooKeeper 集群安装 http://www.linuxidc.com/Linux/2012-10/72906.htm
Zookeeper3.4.6 的安装 http://www.linuxidc.com/Linux/2015-05/117697.htm
第二步:为了测试真实我在我 linux 上面部署三个 zookeeper 服务
1. 创建 zookeeper 的安装目录
2.[root@localhost solrCloud]# mkdir /usr/solrcould
将下载的 zookeeper-3.3.6.tar.gz 复制到该目录下,同时在 /usr/solrcould 目录下新建三个文件夹:如下所示:
1.[root@localhost solrcoulud]# ls
2.service1 service2 servive3 zookeeper-3.3.6.tar.gz
然后在每个文件夹里面解压一个 zookeeper 的下载包,并且还建了几个文件夹,总体结构如下:
1.[root@localhost service1]# ls
2.data datalog logs zookeeper-3.3.6
首先进入 data 目录,创建一个 myid 的文件,里面写入一个数字,比如我这个是 server1, 那么就写一个 1,server2 对应 myid 文件就写入 2,server3 对应 myid 文件就写个 3 然后进入 zookeeper/conf 目录,如果是刚下过来,会有 3 个文件,configuration.xml, log4j.properties,zoo_sample.cfg, 我们首先要做的就是在这个目录下创建一个 zoo.cfg 的配置文件,当然你可以把 zoo_sample.cfg 文件改成 zoo.cfg,配置的内容如下所示:
service1 的 zoo.cfg:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service1/data
dataLogDir=/usr/solrcould/service1/datalog
# the port at which the clients will connect
clientPort=2181
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890
service2 的 zoo.cfg:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service2/data
dataLogDir=/usr/solrcould/service2/datalog
# the port at which the clients will connect
clientPort=2182
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890
service3 的 zoo.cfg:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service3/data
dataLogDir=/usr/solrcould/service3/datalog
# the port at which the clients will connect
clientPort=2183
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890
参数说明:
tickTime:zookeeper 中使用的基本时间单位, 毫秒值.
initLimit: zookeeper 集群中的包含多台 server, 其中一台为 leader, 集群中其余的 server 为 follower。initLimit 参数配置初始化连接时, follower 和 leader 之间的最长心跳时间. 此时该参数设置为 5, 说明时间限制为 5 倍 tickTime, 即 5 *2000=10000ms=10s.
syncLimit: 该参数配置 leader 和 follower 之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为 2, 说明时间限制为 2 倍 tickTime, 即 4000ms.
dataDir: 数据存放目录. 可以是任意目录. 但是我喜欢这么干
dataLogDir: log 目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和 dataDir 相同的设置
clientPort: 监听 client 连接的端口号.
server.X=A:B:C 其中 X 是一个数字, 表示这是第几号 server. A 是该 server 所在的 IP 地址. B 配置该 server 和集群中的 leader 交换消息所使用的端口. C 配置选举 leader 时所使用的端口. 由于配置的是伪集群模式, 所以各个 server 的 B, C 参数必须不同.
配置说明:
需要注意的是 clientPort 这个端口如果你是在 1 台机器上部署多个 server, 那么每台机器都要不同的 clientPort,比如我 server1 是 2181,server2 是 2182,server3 是 2183,dataDir 和 dataLogDir 也需要区分下。
最后几行唯一需要注意的地方就是 server.X 这个数字就是对应 data/myid 中的数字。你在 3 个 server 的 myid 文件中分别写入了 1,2,3,那么每个 server 中的 zoo.cfg 都配 server.1,server.2,server.3 就 OK 了。因为在同一台机器上,后面连着的 2 个端口 3 个 server 都不要一样,否则端口冲突,其中第一个端口用来集群成员的信息交换,第二个端口是在 leader 挂掉时专门用来进行选举 leader 所用。
到这里 zookeeper 的配置就这么配玩了,你没有看错,就是这么简单!
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-03/128915p2.htm
第四步:当然是启动 zookeeper
进入 zookeeper-3.3.2/bin 目录中,./zkServer.sh start 启动一个 server, 这时会报大量错误?其实没什么关系,因为现在集群只起了 1 台 server,zookeeper 服务器端起来会根据 zoo.cfg 的服务器列表发起选举 leader 的请求,因为连不上其他机器而报错,那么当我们起第二个 zookeeper 实例后,leader 将会被选出,从而一致性服务开始可以使用,这是因为 3 台机器只要有 2 台可用就可以选出 leader 并且对外提供服务 (2n+ 1 台机器,可以容 n 台机器挂掉)。
[root@bogon bin]# sh zkServer.sh start #启动
JMX enabled by default
Using config: /usr/solrcould/service3/zookeeper-3.3.6/bin/../conf/zoo.cfg
Starting zookeeper … STARTED
[root@bogon bin]# sh zkServer.sh status #查看当前状态,他会报异常,不要紧,因为是集群,其他两台没有起来,无法进行相互连接,当然报错,启动另外两台就不会报错了!
JMX enabled by default
Using config: /usr/solrcould/service3/zookeeper-3.3.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running
进入不同的 zookeeper 的 bin,分别启动, 常用命令如下
启动 ZK 服务: sh zkServer.sh start
查看 ZK 服务状态: sh zkServer.sh status
停止 ZK 服务: sh zkServer.sh stop
重启 ZK 服务: sh zkServer.sh restart
3、补充单机配置,和实际集群配置
单机部署: 进入 zookeeper/conf 目录,如果是刚下过来,会有 3 个文件,configuration.xml, log4j.properties,zoo_sample.cfg, 这 3 个文件我们首先要做的就是在这个目录下创建一个 zoo.cfg 的配置文件,当然你可以把 zoo_sample.cfg 文件改成 zoo.cfg,配置的内容如下所示:
tickTime=2000
dataDir=/Users/apple/zookeeper/data
dataLogDir=/Users/apple/zookeeper/logs
clientPort=4180
进入 zookeeper-3.3.2/bin 目录中,./zkServer.sh start 启动,单机便完成安装
实际集群部署:集群模式的配置和伪集群基本一致, 由于集群模式下, 各 server 部署在不同的机器上, 因此各 server 的 conf/zoo.cfg 文件可以完全一样.
下面是一个示例:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/zookeeper/data
dataLogDir=/home/zookeeper/datalog
clientPort=4180
server.43=10.1.39.43:2888:3888
server.47=10.1.39.47:2888:3888
server.48=10.1.39.48:2888:3888
需要注意的是, 各 server 的 dataDir 目录下的 myid 文件中的数字必须不同.
solr 集群部署
我的理解,其实安装 solrCloud 非常的简单,就是先安装 zookeeper 然后安装 solr 最后将 zookeeper 和 tomcat 进行关联就 ok 了,如此的简单。
第一步:准备软件
Jdk、tomcat 这些安装在我的文档里面是省略的,如果这两个东西都不会安装,你来安装 solr 集群,那就是非常扯淡的一件事情
再次提醒,如果是 solr4.8 或者以上的版本,记得把 jdk 升级到 1.7 以上,否则 tomcat 起不来。
第二步:在 tomcat 部署 solr, 可以参考:http://www.linuxidc.com/Linux/2016-03/128916.htm,参考上面的企业级安装
你可以参考下我的目录结构
[root@bogon solrcould]# ls
service1 service2 service3 tomcat1 tomcat2 tomcat3 tomcat4
这一步就是简单的在 4 个 tomcat 上面部署 solr,没有做其他任何操作,因为是在同一台机子上面的部署,请记得修改 tomcat 的端口号。
第三步:配置 zookeeper 和各个 tomcat 进行关联
修改 solr 的所在 tomcat 所在服务器, 在 ${tomcat_home}/bin/ 目录下修改 catalina.sh
在第一行添加:
这是我的实例:
tomcat1: 配置如下:
Java_OPTS=”$JAVA_OPTS -DzkHost=192.168.238.133:2181,192.168.238.133:2182,192.168.238.133:2183 -Dbootstrap_confdir=/usr/solrcould/tomcat1/display/solrhome/collection1/conf -Dcollection.configName=myconf -DnumShards=3″
其他 tomcat: 配置如下:
JAVA_OPTS=”$JAVA_OPTS -DzkHost=192.168.238.133:2181,192.168.238.133:2182,192.168.238.133:2183 -DnumShards=3″
参数说明:
-DzkRun 在 Solr 中启动一个内嵌的 zooKeeper 服务器,该服务会管理集群的相关配置。单机版(测试)使用,如果是集群,用下面的 -DzkHost 来替换,含义一样
例如:
JAVA_OPTS=”$JAVA_OPTS -DzkRun -Dbootstrap_conf=true -DnumShards=2″
-DzkHost 跟上面参数的含义一样,允许配置一个 ip 和端口来指定用那个 zookeeper 服务器进行协调
例如:
JAVA_OPTS = “$JAVA_OPTS
-DzkHost=192.168.56.11:2181,192.168.56.12:2181,192.168.56.13:2181
-Dbootstrap_conf=true
-DnumShards=2″
-Dbootstrap_confdir:zooKeeper 需要准备一份集群配置的副本,所以这个参数是告诉 SolrCloud 这些 配置是放在哪里。同时作为整个集群共用的配置文件
-Dcollection.configName 是在指定你的配置文件上传到 zookeeper 后的名字,建议和你所上传的核心名字一致,这样容易识别,当然你也可以在满足规范的情况下自己起名。
-bootstrap_conf=true 将会上传 solr/home 里面的所有数据到 zookeeper 的 home/data 目录, 也就是所有的 core 将被集群管理
-DnumShards=2 配置你要把你的数据分开到多少个 shard 中
-Djetty.port =8080 这个端口跟你所在端口保持一致,这个就是 jetty 的监听端口,实现集群之间进行通信的,如果这个端口不这样配置,那么就是搜索不到数据
当然这个参数也可以再 solr/home/solr.xml 下面配置:如下所示
<solrcloud>
<str name=”host”>${host:}</str>
<int name=”hostPort”>${jetty.port:8080}</int>
<str name=”hostContext”>${hostContext:solr}</str>
<int name=”zkClientTimeout”>${zkClientTimeout:30000}</int>
<bool name=”genericCoreNodeNames”>${genericCoreNodeNames:true}</bool>
</solrcloud>
默认是 8983,如果在 catalina.sh 中指定了,会覆盖上图 solr.xml 中配置的
注意:
-DnumShards, -Dbootstrap_confdir 和 -Dcollection.configName 参数只需要在第一次将 Solr 运行在 SolrCloud 模式的时候声明一次。它们可以把你的配置加载到 zooKeeper 中;如果你在日后重新声明了这些参数重新运行了一次,将会重新加载你的配置,这样你在原来配置上所做的一些修改操作可能会被覆盖。所以官方推荐只在第一个 tomcat 里面加入这几个参数,其他集群的 tomcat 里面不加,启动的第一个 Solr 的端口号,它是你的 SolrCloud 集群的 overseer 节点
第四步:修改 jetty 的监听端口
修改 solr.xml, 该文件在你部署 solr 时自己定的工作目录,例如我的配置在如下地址:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>usr/solrcould/tomcat4/display/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
改动如下:
<int name=”hostPort”>${jetty.port:8983}</int>
改为跟你所在 tomcat 的端口改成一样
<int name=”hostPort”>${jetty.port:8080}</int>
这个端口的作用:-Djetty.port =8080 这个端口跟你所在端口保持一致,这个就是 jetty 的监听端口,实现集群之间进行通信的,如果这个端口不这样配置,那么就是搜索不到数据
然后依次启动 tomcat
看到了没有,这就是启动了,一个有三个节点的集群
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-03/128915.htm
概述:
SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,它的主要思想是使用 Zookeeper 作为集群的配置信息中心。
它有几个特色功能:
1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡
安装 zookeeper
上面也说了 SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,所有要部署 solrCloud+tomcat+zookeeper 的集群,必须先安装 zookeeper
安装环境:
Liux: CentOS release 6.4
JDK:1.7.0_55
因为我研究的是 solr 最新的版本,所以研究的是 solr4.8.0 然后 solr4.8.0 必须跑在 jdk1.7 以上的版本
1、zookeeper 是个什么玩意?
答:顾名思义 zookeeper 就是动物园管理员,他是用来管 Hadoop(大象)、Hive(蜜蜂)、pig(小猪) 的管理员,Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper: 是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目;
2、zookeeper 伪集群安装
因为我演示的这套安装是单机版的安装,所以采用伪集群的方式进行安装,如果是真正的生成环境,将伪集群的 ip 改下就可以了,步骤是一样的,学会了伪集群安装,真正生产的多环境安装不会,那是不可能的一件事情。
第一步:下载最新的 zooper 软件:http://www.apache.org/dyn/closer.cgi/zookeeper/
Ubuntu 14.04 安装分布式存储 Sheepdog+ZooKeeper http://www.linuxidc.com/Linux/2014-12/110352.htm
CentOS 6 安装 sheepdog 虚拟机分布式储存 http://www.linuxidc.com/Linux/2013-08/89109.htm
ZooKeeper 集群配置 http://www.linuxidc.com/Linux/2013-06/86348.htm
使用 ZooKeeper 实现分布式共享锁 http://www.linuxidc.com/Linux/2013-06/85550.htm
分布式服务框架 ZooKeeper — 管理分布式环境中的数据 http://www.linuxidc.com/Linux/2013-06/85549.htm
ZooKeeper 集群环境搭建实践 http://www.linuxidc.com/Linux/2013-04/83562.htm
ZooKeeper 服务器集群环境配置实测 http://www.linuxidc.com/Linux/2013-04/83559.htm
ZooKeeper 集群安装 http://www.linuxidc.com/Linux/2012-10/72906.htm
Zookeeper3.4.6 的安装 http://www.linuxidc.com/Linux/2015-05/117697.htm
第二步:为了测试真实我在我 linux 上面部署三个 zookeeper 服务
1. 创建 zookeeper 的安装目录
2.[root@localhost solrCloud]# mkdir /usr/solrcould
将下载的 zookeeper-3.3.6.tar.gz 复制到该目录下,同时在 /usr/solrcould 目录下新建三个文件夹:如下所示:
1.[root@localhost solrcoulud]# ls
2.service1 service2 servive3 zookeeper-3.3.6.tar.gz
然后在每个文件夹里面解压一个 zookeeper 的下载包,并且还建了几个文件夹,总体结构如下:
1.[root@localhost service1]# ls
2.data datalog logs zookeeper-3.3.6
首先进入 data 目录,创建一个 myid 的文件,里面写入一个数字,比如我这个是 server1, 那么就写一个 1,server2 对应 myid 文件就写入 2,server3 对应 myid 文件就写个 3 然后进入 zookeeper/conf 目录,如果是刚下过来,会有 3 个文件,configuration.xml, log4j.properties,zoo_sample.cfg, 我们首先要做的就是在这个目录下创建一个 zoo.cfg 的配置文件,当然你可以把 zoo_sample.cfg 文件改成 zoo.cfg,配置的内容如下所示:
service1 的 zoo.cfg:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service1/data
dataLogDir=/usr/solrcould/service1/datalog
# the port at which the clients will connect
clientPort=2181
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890
service2 的 zoo.cfg:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service2/data
dataLogDir=/usr/solrcould/service2/datalog
# the port at which the clients will connect
clientPort=2182
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890
service3 的 zoo.cfg:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service3/data
dataLogDir=/usr/solrcould/service3/datalog
# the port at which the clients will connect
clientPort=2183
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890
参数说明:
tickTime:zookeeper 中使用的基本时间单位, 毫秒值.
initLimit: zookeeper 集群中的包含多台 server, 其中一台为 leader, 集群中其余的 server 为 follower。initLimit 参数配置初始化连接时, follower 和 leader 之间的最长心跳时间. 此时该参数设置为 5, 说明时间限制为 5 倍 tickTime, 即 5 *2000=10000ms=10s.
syncLimit: 该参数配置 leader 和 follower 之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为 2, 说明时间限制为 2 倍 tickTime, 即 4000ms.
dataDir: 数据存放目录. 可以是任意目录. 但是我喜欢这么干
dataLogDir: log 目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和 dataDir 相同的设置
clientPort: 监听 client 连接的端口号.
server.X=A:B:C 其中 X 是一个数字, 表示这是第几号 server. A 是该 server 所在的 IP 地址. B 配置该 server 和集群中的 leader 交换消息所使用的端口. C 配置选举 leader 时所使用的端口. 由于配置的是伪集群模式, 所以各个 server 的 B, C 参数必须不同.
配置说明:
需要注意的是 clientPort 这个端口如果你是在 1 台机器上部署多个 server, 那么每台机器都要不同的 clientPort,比如我 server1 是 2181,server2 是 2182,server3 是 2183,dataDir 和 dataLogDir 也需要区分下。
最后几行唯一需要注意的地方就是 server.X 这个数字就是对应 data/myid 中的数字。你在 3 个 server 的 myid 文件中分别写入了 1,2,3,那么每个 server 中的 zoo.cfg 都配 server.1,server.2,server.3 就 OK 了。因为在同一台机器上,后面连着的 2 个端口 3 个 server 都不要一样,否则端口冲突,其中第一个端口用来集群成员的信息交换,第二个端口是在 leader 挂掉时专门用来进行选举 leader 所用。
到这里 zookeeper 的配置就这么配玩了,你没有看错,就是这么简单!
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-03/128915p2.htm