Zookeeper安装

安装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/



 

第二步:为了测试真实我在我linux上面部署三个zookeeper服务

Java代码   收藏代码
  1. 创建zookeeper的安装目录  
  2. [root@localhost solrCloud]# mkdir /usr/solrcould  

 

     将下载的zookeeper-3.3.6.tar.gz复制到该目录下,同时在/usr/solrcould目录下新建三个文件夹:如下所示:

Java代码   收藏代码
  1. [root@localhost solrcoulud]# ls  
  2. service1  service2  servive3  zookeeper-3.3.6.tar.gz  

 

   然后在每个文件夹里面解压一个zookeeper的下载包,并且还建了几个文件夹,总体结构如下:

Java代码   收藏代码
  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:

Java代码   收藏代码
  1. # The number of milliseconds of each tick  
  2. tickTime=2000  
  3. # The number of ticks that the initial   
  4. # synchronization phase can take  
  5. initLimit=5  
  6. # The number of ticks that can pass between   
  7. # sending a request and getting an acknowledgement  
  8. syncLimit=2  
  9. # the directory where the snapshot is stored.  
  10. dataDir=/usr/solrcould/service1/data  
  11. dataLogDir=/usr/solrcould/service1/datalog  
  12. # the port at which the clients will connect  
  13. clientPort=2181  
  14. server.1=192.168.238.133:2888:3888  
  15. server.2=192.168.238.133:2889:3889  
  16. server.3=192.168.238.133:2890:3890  

 

service2 的zoo.cfg:

Java代码   收藏代码
  1. # The number of milliseconds of each tick  
  2. tickTime=2000  
  3. # The number of ticks that the initial   
  4. # synchronization phase can take  
  5. initLimit=5  
  6. # The number of ticks that can pass between   
  7. # sending a request and getting an acknowledgement  
  8. syncLimit=2  
  9. # the directory where the snapshot is stored.  
  10. dataDir=/usr/solrcould/service2/data  
  11. dataLogDir=/usr/solrcould/service2/datalog  
  12. # the port at which the clients will connect  
  13. clientPort=2182  
  14. server.1=192.168.238.133:2888:3888  
  15. server.2=192.168.238.133:2889:3889  
  16. server.3=192.168.238.133:2890:3890  

 

 service3 的zoo.cfg:

Java代码   收藏代码
  1. # The number of milliseconds of each tick  
  2. tickTime=2000  
  3. # The number of ticks that the initial   
  4. # synchronization phase can take  
  5. initLimit=5  
  6. # The number of ticks that can pass between   
  7. # sending a request and getting an acknowledgement  
  8. syncLimit=2  
  9. # the directory where the snapshot is stored.  
  10. dataDir=/usr/solrcould/service3/data  
  11. dataLogDir=/usr/solrcould/service3/datalog  
  12. # the port at which the clients will connect  
  13. clientPort=2183  
  14. server.1=192.168.238.133:2888:3888  
  15. server.2=192.168.238.133:2889:3889  
  16. 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的配置就这么配玩了,你没有看错,就是这么简单!

第四步:当然是启动zookeeper

     进入zookeeper-3.3.2/bin 目录中,./zkServer.sh start启动一个server,这时会报大量错误?其实没什么关系,因为现在集群只起了1台server,zookeeper服务器端起来会根据zoo.cfg的服务器列表发起选举leader的请求,因为连不上其他机器而报错,那么当我们起第二个zookeeper实例后,leader将会被选出,从而一致性服务开始可以使用,这是因为3台机器只要有2台可用就可以选出leader并且对外提供服务(2n+1台机器,可以容n台机器挂掉)。

Java代码   收藏代码
  1. [root@bogon bin]# sh zkServer.sh start  #启动  
  2. JMX enabled by default  
  3. Using config: /usr/solrcould/service3/zookeeper-3.3.6/bin/../conf/zoo.cfg  
  4. Starting zookeeper ... STARTED   
  5. [root@bogon bin]# sh zkServer.sh status #查看当前状态,他会报异常,不要紧,因为是集群,其他两台没有起来,无法进行相互连接,当然报错,启动另外两台就不会报错了!  
  6. JMX enabled by default  
  7. Using config: /usr/solrcould/service3/zookeeper-3.3.6/bin/../conf/zoo.cfg  
  8. Error contacting service. It is probably not running  

 

 
 进入不同的zookeeper的bin,分别启动,常用命令如下

Java代码   收藏代码
  1. 启动ZK服务:       sh zkServer.sh start  
  2. 查看ZK服务状态:   sh zkServer.sh status  
  3. 停止ZK服务:       sh zkServer.sh stop  
  4. 重启ZK服务:       sh zkServer.sh restart  

 

3、补充单机配置,和实际集群配置

单机部署:进入zookeeper/conf目录,如果是刚下过来,会有3个文件,configuration.xml, log4j.properties,zoo_sample.cfg,这3个文件我们首先要做的就是在这个目录下创建一个zoo.cfg的配置文件,当然你可以把zoo_sample.cfg文件改成zoo.cfg,配置的内容如下所示:

Java代码   收藏代码
  1. tickTime=2000    
  2. dataDir=/Users/apple/zookeeper/data    
  3. dataLogDir=/Users/apple/zookeeper/logs    
  4. clientPort=4180  

 进入zookeeper-3.3.2/bin 目录中,./zkServer.sh start启动,单机便完成安装

 

实际集群部署:集群模式的配置和伪集群基本一致,由于集群模式下, 各server部署在不同的机器上, 因此各server的conf/zoo.cfg文件可以完全一样.

下面是一个示例:

Java代码   收藏代码
  1. tickTime=2000    
  2. initLimit=5    
  3. syncLimit=2    
  4. dataDir=/home/zookeeper/data    
  5. dataLogDir=/home/zookeeper/datalog    
  6. clientPort=4180  
  7. server.43=10.1.39.43:2888:3888  
  8. server.47=10.1.39.47:2888:3888    
  9. server.48=10.1.39.48:2888:3888  
  10. 需要注意的是, 各server的dataDir目录下的myid文件中的数字必须不同.  

 

Windows下安装

把下载的zookeeper的文件解压到指定目录

E:\Program\zookeeper-3.4.6

修改conf下增加zoo1.cfg,zoo2.cfg,zoo3.cfg

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir= /Program/zk_data/1
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

对应三个实例:

clientPort 三个文件分别为2181,2182,2183

dataDir三个文件分别为/Program/zk_data/1,/Program/zk_data/2,/Program/zk_data/3

在三个dataDir内,创建myid文件,里面内容对应1,2,3


复制zkServer.cmd为zkServer1.cmd,zkServer2.cmd,zkServer3.cmd

修改cmd,添加set ZOOCFG=..\conf\zoo1.cfg,三个cmd文件对应各自的cfg文件,例如:

?
1
2
3
4
5
6
7
8
9
setlocal
call  "%~dp0zkEnv.cmd"
 
set  ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
set  ZOOCFG=..\conf\zoo1.cfg
echo  on
java  "-Dzookeeper.log.dir=%ZOO_LOG_DIR%"  "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%"  - cp  "%CLASSPATH%"  %ZOOMAIN%  "%ZOOCFG%"  %*
 
endlocal

启动三个cmd,会完成几个节点的互相通信

使用JPS,会看到三个启动的java主进程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值