Zookeeper 集群配置

1.下载Zookeeper
2.解压缩,进入zookeeper/conf 目录下修改 zoo.cfg配置文件
3.相关配置讲解
   tickTime=2000     #ZooKeeper服务器心跳时间 ,单位为ms
   initLimit=10         #投票选举新Leader的初始化时间
   syncLimit=5         #Leader与Follower心跳检测最大容忍时间 响应不能超过syncLimit*tickTime 否则leader认为follwer死掉
   clientPort=2181  #端口
   dataDir=/tmp/ZooKeeper/data     #数据目录
   dataLogDir/tmp/ZooKeeper/log   #日志记录
  
  #配置zookeeper的集群
   server.1=node1:2888:3888
   server.2=node2:2888:3888
   server.3=node3:2888:3888

4. 在zookeeper的工作目录中创建myid
    mkdir /opt/zookeeper
    cd /opt/zookeeper
   vi myid
   cat myid
   1
   然后将这个文件分别传递到node2 node3 修改myid的值为 2和3
   scp -r zookeeper  root@node3:/opt/
   然后传递zookeeper传递到node2  node3

5. 然后配置zk的环境变量
   进入etc/profile
   export JAVA_HOME=/usr/lib/jvm/java7
   export JRE_HOME=${JAVA_HOME}/jre
   export PATH=$JAVA_HOME/bin:$PATH
   export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
   export PATH=$PATH:/home/zk/bin   #配置zk的环境变量

   然后让环境变量立即生效使用
   source /etc/profile
   然后同步这个文件到 node2  node3 在分别使用source 生效

6. 然后这个时候就可以启动zookeeper了 要在三个节点上分别启动
   [ root@node3 home]# zkServer.sh start
   JMX enabled by default
   Using config: /home/zk/bin/../conf/zoo.cfg
   Starting zookeeper ... STARTED
   [ root@node3 home]# jps
   2848 Jps
   2827 QuorumPeerMain   # 这个就是zookeeper的java进程的名字


7.安装验证
通过这个命令来查看Leader 或Follower
  1. zkServer.sh status  


zookeeper详解
zookeeper集群是一个独立的分布式协调服务集群,"独立"的含义就是说,如果想使用zookeeper实现分布式应用的协调与管理,简化协调与管理,任何分布式应用都可以使用,这就要归功于zookeeper的数据模型(Data Model)和层次命名空间(Hierarchical Namespace),在设计你的分布式应用协调服务时,首要的就是考虑如何组织层次命名空间

主机名称到ip地址映射配置
zookeeper集群中具有两个关键的角色:Leader和Follower,集群中所有的结点作为一个整体对分布式应用提供服务,集群中每个结点之间都相互连接,所以,在配置的zookeeper集群的时候,每一个结点的host到ip地址的映射都要配置上集群中其他结点的映射信息
所以要修改/etc/hosts文件,为各个结点配置上
192.168.12.128  node1
192.168.12.129  node2
192.168.12.130  node3
192.168.12.131  node4
zookeeper采用一种称为Leader election 的选举算法,在整个集群运行过程中,只有一个Leader,其他的都是Follower,如果zookeeper集群在运行过程中Leader出了问题,系统会采用该算法重新选出一个Leader,因此,各个结点之间要能够保证互相连接,必须配置上述映射

设置myid
创建一个myid文件,里面内容为一个数字,用来标识当前主机 conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字

查看启动日志
  1. 2012-01-08 06:51:19,133 - INFO  [main:QuorumPeerConfig@310] - Defaulting to majority quorums  
  2. 2012-01-08 06:51:19,167 - INFO  [main:QuorumPeerMain@119] - Starting quorum peer  
  3. 2012-01-08 06:51:19,227 - INFO  [main:NIOServerCnxn$Factory@143] - binding to port 0.0.0.0/0.0.0.0:2181  
  4. 2012-01-08 06:51:19,277 - INFO  [main:QuorumPeer@819] - tickTime set to 2000  
  5. 2012-01-08 06:51:19,278 - INFO  [main:QuorumPeer@830] - minSessionTimeout set to -1  
  6. 2012-01-08 06:51:19,279 - INFO  [main:QuorumPeer@841] - maxSessionTimeout set to -1  
  7. 2012-01-08 06:51:19,281 - INFO  [main:QuorumPeer@856] - initLimit set to 5  
  8. 2012-01-08 06:51:19,347 - INFO  [Thread-1:QuorumCnxManager$Listener@473] - My election bind port: 3888  
  9. 2012-01-08 06:51:19,393 - INFO  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:QuorumPeer@621] - LOOKING  
  10. 2012-01-08 06:51:19,396 - INFO  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:FastLeaderElection@663] - New election. My id =  1, Proposed zxid = 0  
  11. 2012-01-08 06:51:19,400 - INFO  [WorkerReceiver Thread:FastLeaderElection@496] - Notification: 1 (n.leader), 0 (n.zxid), 1 (n.round), LOOKING (n.state), 1 (n.sid), LOOKING (my state)  
  12. 2012-01-08 06:51:19,416 - WARN  [WorkerSender Thread:QuorumCnxManager@384] - Cannot open channel to 2 at election address slave-02/192.168.0.178:3888  
  13. java.net.ConnectException: Connection refused 
这个是正常的现象,由于zookeeper集群启动的时候,每个结点都试图去连接集群中的其他结点,先启动的肯定连不上后面还没启动,所以上面日志前面部分的异常是可以忽略的,通过后面部分可以看到,集群在选出一个Leader后,最后稳定了







你可能感兴趣的:(Zookeeper)