Zookeeper集群搭建(配置详解)

来源:互联网 发布:python语言是什么 编辑:程序博客网 时间:2024/05/09 23:51

软件环境准备:

  • Linux服务器一台、三台、五台(2*n+1台);
  • Java jdk 1.7;
  • zookeeper 3.4.6版;

软件安装:

  1. 解压jdk、zookeeper文件到指定目录,执行命令tar -zvxf xxxx.tar.gz -C /usr/local/program
  2. 配置环境变量,vi /etc/profile
  3. #set enviromentexport JAVA_HOME=/usr/local/program/jdk1.7.0_79export ZK_HOME=/usr/local/program/zk/zookeeper-3.4.6export PATH=$JAVA_HOME/bin:$ZK_HOME/bin:$PATH

  4. java -version 命令测试是否成功配置jdk
  5. [root@localhost ~]# java -versionjava version "1.7.0_79"Java(TM) SE Runtime Environment (build 1.7.0_79-b15)Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

  6. 配置zookeeper;首先建立两个文件夹mkdir /usr/local/program/zk/zkdata ,mkdir /usr/local/program/zk/zkdataLog 
  7. 然后执行命令cd /usr/local/program/zk/zookeeper-3.4.6/conf/ 进入配置文件目录,拷贝一份配置文件cp zoo_sample.cfg zoo.cfg改名为zoo.cfg
  8. 编辑配置文件修改配置(将端口改大的目的是为了防止冲突):
  9. # The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just # example sakes.dataDir=/usr/local/program/zk/zkdatadataLogDir=/usr/local/program/zk/zkdataLog# the port at which the clients will connectclientPort=12181# 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=1server.1=192.168.0.102:12888:13888server.2=192.168.0.103:12888:13888server.3=192.168.0.104:12888:13888

  10. 进入zkdata目录,执行命令echo “1” > myid创建myid文件并输入值为1
  11. 依次在另外两台机器上执行同样的操作,myid的数值依次为2,3
  12. 配置成功,执行命令zkServer.sh start分别启动三台机器
  13. 执行命令zkServer.sh status查看对应的状态发现出现:zookeeper Error contacting service. It is probably not running错误
  14. 执行命令:tail -f zookeeper.out
    查看到错误记录:
    2016-04-21 06:56:56,242 [myid:1] – WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Follower@89] – Exception when following the leader
    java.net.NoRouteToHostException: No route to host
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at org.apache.zookeeper.server.quorum.Learner.connectToLeader(Learner.java:225)
    at org.apache.zookeeper.server.quorum.Follower.followLeader(Follower.java:71)
    at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:786)

  15. 经验证:防火墙的问题,执行命令service iptables stop关闭防火墙(如要永久关闭防火墙执行命令:chkconfig iptables off)
  16. 重启机器,执行命令zkServer.sh status 分别查看每台机器的状态为leader、follower、follower则表明启动成功

配置说明:

作用:leader:从客户端接收读写请求,响应读写请求,向slaver发送数据slaver:从leader同步数据,当leader失败时,从新投票选举新的leader配置详解:myid:位于快照目录,是用来标识本台机器在集群中的唯一标识zoo.cfg:tickTime:是initLimit 和 syncLimit的时间单位(毫秒)initLimit:集群机器之间的同步时间,比如启动m1,s1在这个时间段内必须都起来syncLimit:leader与follower之间的通信时间(心跳),超时则说明follower失败#快照日志的存储路径dataDir=/usr/local/program/zk/zkdata#zk事物日志存储目录 (如果不配置zkdataLog那么快照日志和事务日志都将写到dataDir中,严重影响性能)dataLogDir=/usr/local/program/zk/zkdataLog# the port at which the clients will connect#本台机器的端口,默认为2181clientPort=12181log4j.properties:日志文件,zookeeper.out位置bin下面,可以更改注意:需要定期清理事务日志文件,否则会造成性能下降(crontab)crontab -l查看当前用户定时任务crontab -e编辑定时任务(例:0 0 * * 0 sh /usr/local/program/zk/cleanup.sh)另外2台机器执行同样的操作#server.1标识本台机器,通过myid文件指定id=1;ip:机器之间通信端口(默认为2888):leader选举端口(默认为3888)server.1=192.168.0.102:12888:13888
0 0