• Linux->ZooKeeper集群搭建


    人,总免不了有心结,限制着自己,难以前行。对于ZooKeeper的理解,以及实践也拖了很久,今天用零散时间学习一下,补点干货。酷

       

    一、简述

    Zookeeper是Google的Chubby一个开源的实现,是高有效和可靠的协同工作系统,Zookeeper能够用来选举Leader(基于Fast Paxos协议),配置信息维护等,在一个分布式的环境中,需要一个Master实例或存储一些配置信息,确保文件写入的一致性等。
    ZooKeeper是一个分布式,开放源码的分布式应用程序协调服务,包含一个简单的原语集,是Hadoop和Hbase的重要组件,提供Java和C的接口。
    ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

    二、配置服务

    我直接在ubuntu服务器上开搞了,跳过下载、安装等基本操作,直奔主题。
    ZooKeeper建议使用hostname,而非ip。这需要对主机的/etc/hostname/etc/hosts做host绑定。
    ZooKeeper以Fast Paxos算法为基础,用于完成leader的选举工作,所以至少需要3个节点。
    为此,我准备了以下3个节点:
    192.168.158.135 ubuntu-zookeeper-01
    192.168.158.151 ubuntu-zookeeper-02
    192.168.158.152 ubuntu-zookeeper-03

          首先,为各个主机配置自己的hostname:

    1. sudo vim /etc/hostname   
    sudo vim /etc/hostname 

         例如,在192.168.158.135机器上配置/etc/hostname为:

    ubuntu-zookeeper-01

         然后,为各个主机配置host绑定:

    1. sudo vim /etc/hosts  
    sudo vim /etc/hosts

        例如:
        

        在各主机上做好host绑定。

    达到如下效果,说明配置ok
    zlex@ubuntu-zookeeper-01:~$ ping ubuntu-zookeeper-02
    PING ubuntu-zookeeper-02 (192.168.158.151) 56(84) bytes of data.
    64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=1 ttl=64 time=5.64 ms
    64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=2 ttl=64 time=0.643 ms
    64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=3 ttl=64 time=0.821 ms
    64 bytes from ubuntu-zookeeper-02 (192.168.158.151): icmp_seq=4 ttl=64 time=0.873 ms
    ^C
    --- ubuntu-zookeeper-02 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3006ms
    rtt min/avg/max/mdev = 0.643/1.994/5.641/2.107 ms

     
        接下来配置zookeeper的配置,让它快速跑起来。

        把刚才准备好的hostname配置在这个文件中:

    1. sudo vim /etc/zookeeper/conf/zoo.cfg  
    sudo vim /etc/zookeeper/conf/zoo.cfg

        
        
     配置文件的说明:

      • tickTime :基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
      • dataDir :存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
      • clientPort :这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
      • initLimit:这个配置项是用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过 5 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒。
      • syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
      • server.A = B:C:D : A表示这个是第几号服务器,B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader

        接着,使server.1~server.3 与各主机的 /etc/zookeeper/conf/myid 相对应:

    1. sudo vim /etc/zookeeper/conf/myid     
    sudo vim /etc/zookeeper/conf/myid   

        例如,ubuntu-zookeeper-01server.1相对应,其myid的值就是1

    $ cat /etc/zookeeper/conf/myid
    1

        如果出现类似错误:

    zlex@ubuntu-zookeeper-01:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
    JMX enabled by default
    Using config: /etc/zookeeper/conf/zoo.cfg
    Error contacting service. It is probably not running.

       说明myid文件中与hostname中对应的标示不一致,即ubuntu-zookeeper-01server.1相对应,myid的值应为1。

        现在,我们就可以启动服务了:

    1. sudo /usr/share/zookeeper/bin/zkServer.sh start  
    sudo /usr/share/zookeeper/bin/zkServer.sh start

        具体可用的命令有:

    {start|start-foreground|stop|restart|status|upgrade|print-cmd}

        最后,观察启动日志:    

    1. tail -f /var/log/zookeeper/zookeeper.log   
    tail -f /var/log/zookeeper/zookeeper.log 

        究竟哪台机器成为leader:

    zlex@ubuntu-zookeeper-01:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
    JMX enabled by default
    Using config: /etc/zookeeper/conf/zoo.cfg
    Mode: follower

    zlex@ubuntu-zookeeper-02:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
    JMX enabled by default
    Using config: /etc/zookeeper/conf/zoo.cfg
    Mode: follower

    zlex@ubuntu-zookeeper-03:~$ sudo /usr/share/zookeeper/bin/zkServer.sh status
    JMX enabled by default
    Using config: /etc/zookeeper/conf/zoo.cfg
    Mode: leader

        服务都启动了,ubuntu-zookeeper-03成为Leader节点了~

     后台启动ZooKeeper

    nohup ./zkServer.sh start >> /logs/zookeeper.file 2>&1 & 

    nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。 
      该命令的一般形式为:nohup command & 
      使用nohup命令提交作业 
      如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: 
      nohup command > myout.file 2>&1 & 
      在上面的例子中,输出被重定向到myout.file文件中。 
      使用 jobs 查看任务。 
      使用 fg %n 关闭。 
      另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样就可以利用这些命令在后台上传和下载文件了。
     

    转自:http://snowolf.iteye.com/blog/2156019

  • 相关阅读:
    一点创业想法
    【转】Java程序员常用工具类库
    向着高薪前进
    web开发可不可以是这样的?
    java 读取文本文件超简单的方法
    java操作xml超简单的方法
    Dijkstra算法
    ubuntu linux下如何配置ip地址以及DNS
    有关于string的一些用法
    Linux mint 17.2 系统下安装hust oj
  • 原文地址:https://www.cnblogs.com/taomylife/p/7560319.html
Copyright © 2020-2023  润新知