• 【2】Zookeeper安装


    一、环境准备

    • Linux操作系统
    • Java运行环境(1.6或以上)
    • 服务器列表:

    配置主机名映射。

    vi /etc/hosts
    ##添加如下内容
    168.5.7.75 server1
    168.5.7.76 server2
    168.5.7.77 server3
    

    二、zookeeper安装

    1、介质准备

    分别登录server1、server2、server3执行,操作、配置相同:

    ##创建安装目录/usr/local/services/zookeeper
    mkdir -p /usr/local/services/zookeeper
    cd /usr/local/services/zookeeper
    ##下载安装包zookeeper-3.4.13.tar.gz
    wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
    ##解压缩zookeeper-3.4.13.tar.gz
    tar -zxvf zookeeper-3.4.13.tar.gz
    

    2、修改配置文件zoo_sample.cfg

    分别登录server1、server2、server3执行,操作、配置相同:

    cd /usr/local/services/zookeeper/zookeeper-3.4.13/conf
    ##先备份,再修改
    cp zoo_sample.cfg zoo.cfg
    

    配置文件参数修改如下,可自行根据需求配置:

    # /usr/local/services/zookeeper/zookeeper-3.4.13/conf/zoo.cfg
    
    # 发送心跳时间,单位:毫秒
    tickTime=2000
    
    #  配置Zookeeper集群中服务端(Leader)接受客户端(Follower)初始化连接的最大心跳时间间隔数
    # 当超过10个(initLimit个)心跳时间2000(tickTime毫秒)后Zookeeper服务器仍未收到客户端返回的信息,则认为客户端(Follower)连接失败
    initLimit=10
    
    # 配置Leader和Follower之间发送消息时,请求和应答时间的长度最大不能超多的多少个(syncLimit个)心跳时间(tickTime毫秒)
    syncLimit=5
    
    # Zookeeper保存数据的目录
    dataDir=/tmp/zkdata
    
    # Zookeeper保存是指数据的目录
    dataLogDir=/tmp/zkdataLog
    
    # 客户端访问 zookeeper 的端口号
    #注意:对于伪集群,端口需要不同。
    clientPort=2181
    
    # 客户端最大连接数
    #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.id=host:port1:port2
    # id 是一个数字(1~255),代表服务器编号Server ID,标识机器在集群中的机器序号,dataDir目录下的myid文件内容就是此 ID
    # host 是此服务器IP地址
    # port1 是此服务器与集群中的Leader服务器交换信息的端口
    # port2 当集群中的Leader服务宕机后,集群中的其他服务器使用此端口相互通信,重新选举出新的Leader
    # 注意:若配置为伪集群,因为 host  都相同,所以 port2  配置的实例通信端口不能一样
    server.1=server1:2888:3888
    server.2=server2:2888:3888
    server.3=server3:2888:3888
    
    

    3、为集群各服务器创建myid文件

    创建的myid文件的位置:zoo.cfg文件中 dataDir=/tmp/zkdata 参数配置的目录;
    创建的myid文件的内容:zoo.cfg文件中 server.id=host:port1:port2 中的id,与服务器一一对应,且集群中的服务器id各不相同。
    分别登录server1、server2、server3执行,操作、配置不同:

    ##登录server1
    cd /tmp/zkdata
    echo "1" > myid
    ##登录server2
    cd /tmp/zkdata
    echo "2" > myid
    ##登录server3
    cd /tmp/zkdata
    echo "3" > myid
    

    4、启动Zookeeper服务

    分别登录server1、server2、server3执行,操作、配置相同:

    cd /usr/local/services/zookeeper/zookeeper-3.4.13/bin
    ##启动服务
    ./zkServer.sh start
    

    ##查看进程号是否存在
    jps
    

    ##查看服务状态
    ./zkServer.sh status
    



    注意:当只启动server1时,执行 ./zkServer.sh status 查看状态如下:

    原因: zoo.cfg配置文件中设置集群内有3台服务器,仅启动节点server1,投票数不会过半,所以server1上提示“It is probably not running”。也就是说:在完成Leader选举之前,集群中启动zookeeper server的服务器并不会创建服务器实例提供服务。若此时执行命令 ./zkServer.sh start-foreground 查看日志,也将有java.net.BindException错误,待启动集群中其它节点后,status将会因产生有效投票结果而变化。

    ##查看服务启动详细日志
    ./zkServer.sh start-foreground
    ##默认服务启动日志文件
    cat /usr/local/services/zookeeper/zookeeper-3.4.13/bin/zookeeper.out
    

    三、常见报错

    1、nexpected exception, exiting abnormally java.net.BindException: 地址已在使用


    检查是否是端口占用,kill相应进程或者更改服务端口:

    sudo netstat -nltp | grep 2181
    

    检查集群中所有服务器的防火墙配置:

    ##查看防火墙状态
    firewall-cmd --state
    ##关闭防火墙
    systemctl stop firewalld.service
    

    四、参考资料

    参考书籍:从Paxos到Zookeeper:分布式一致性原理与实践

  • 作者: DeepInThought
    出处: https://www.cnblogs.com/DeepInThought
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Java线程面试题 Top 50
    深入理解java内存模型
    线程池的理解
    Thread的理解
    ThreadLocal的理解
    排序算法(简)
    排序算法
    【Java集合源码剖析】LinkedHashmap源码剖析
    vsftp上传文件权限问题
    xp 通过注册表修改环境变量
  • 原文地址:https://www.cnblogs.com/DeepInThought/p/11006805.html
  • Copyright © 2020-2023  润新知