• Linux下搭建ZooKeeper集群


    摘要

    Zookeeper是针对大型分布式系统的高可靠的协调系统。它基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题。把分布式集群当成zoo,那么zookeeper就是管理员。zookeeper本身也可以是个集群,通过几台follow机器选举leader。zookeeper的主要作用包括,命名服务,配置管理,分布式一致性锁,HA(High available)。真是因为zookeeper在分布式系统领域如此重要,可以说是基石,所以我们绕不开要学习其使用及原理。

    本文基于Ubuntu 16.04 LTS,介绍如何搭建1主2从的zookeeper集群。

    环境依赖

    • 奇数台服务器,且非observer节点数>1;如果是偶数台服务器,可以把多出来的1台设置为observer
    • Java 8+
    • 防火墙开放2181、2888、3888端口:
    ufw allow 2181
    ufw allow 2888
    ufw allow 3888
    ufw reload
    

    一、下载与解压ZooKeeper

    1、下载

    $ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
    

    2、解压到指定位置

    $ tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz -C /usr/local
    
    $ mv /usr/local/apache-zookeeper-3.6.2-bin /usr/local/zookeeper_3.6.2
    
    $ cd /usr/local/zookeeper_3.6.2
    

    二、配置文件

    本小节先在服务器1上进行配置,下一小节再通过scp将配置好的ZooKeeper分发到其他服务器上,减少重复工作。

    1、创建配置文件

    利用模板文件zoo_sample.cfg,通过拷贝创建配置文件zoo.cfg

    $ cd /usr/local/zookeeper_3.6.2/conf
    $ cp zoo_sample.cfg zoo.cfg
    

    2、创建数据目录

    $ mkdir /usr/local/zookeeper_3.6.2/data
    

    3、修改配置文件dataDir

    $ vim /usr/local/zookeeper_3.6.2/conf/zoo.cfg
    
    #修改dataDir为如下内容
    dataDir=/usr/local/zookeeper_3.6.2/data
    

    4、添加server.id

    $ vim /usr/local/zookeeper_3.6.2/conf/zoo.cfg
    
    # 添加如下内容:
    server.1=192.168.1.113:2888:3888
    server.2=192.168.1.114:2888:3888
    server.3=192.168.1.115:2888:3888
    # server.id=zookeeper节点主机名 或 主机ip:2888:3888  选举端口和投票端口固定
    # 如果有四台zookeeper的话,由于非observer节点数必须为奇数个
    # 所以如果有第四台的话,可以使用如下添加方式:
    # server.4=xx.xx.xx.xx:2888:3888:observer
    # id是自己定义的,0~255间,不必一次递增,自己定即可,id表示该节点所持有的投票编号id,必需保证全局唯一
    

    注意:不要在配置后面加注释#,这会导致cfg文件解析失败!从而导致zookeeper无法正常启动!

    server.A=B:C:D中各参数解析如下:

    A:其中 A 是一个数字,表示这个是服务器的编号;
    
    B:是这个服务器的 ip 地址 或 主机名;
    
    C:Leader选举的端口;
    
    D:Zookeeper服务器之间的通信端口。
    

    5、创建myid文件

    在dataDir目录下创建myid文件

    机器192.168.1.113上:

    $ vim /usr/local/zookeeper_3.6.2/data/myid
    
    #输入server.1=192.168.1.113:2888:3888所指定的id:1
    1
    

    机器192.168.1.114上:

    $ vim /usr/local/zookeeper_3.6.2/data/myid
    
    #输入server.1=192.168.1.114:2888:3888所指定的id:2
    2
    

    机器192.168.1.115上:

    $ vim /usr/local/zookeeper_3.6.2/data/myid
    
    #输入server.1=192.168.1.115:2888:3888所指定的id:3
    3
    

    三、将ZooKeeper分发到各个节点

    $ cd /usr/local/
    $ scp -r zookeeper_3.6.2 root@192.168.1.114:/usr/local/
    $ scp -r zookeeper_3.6.2 root@192.168.1.115:/usr/local/
    

    四、配置环境变量

    需要再各个服务器上进行配置:

    vim /etc/profile
    
    #添加如下内容
    export ZOOKEEPER_HOME=/usr/local/zookeeper_3.6.2
    export PATH=$ZOOKEEPER_HOME/bin:$PATH
    
    #激活环境变量
    source /etc/profile
    

    五、启动zkServer

    所有节点上启动zkServer

    $ zkServer.sh start
    
    #输出如下:
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    

    查看集群节点状态:

    $ zkServer.sh status
    
    #一个节点输出如下:
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: leader
    
    #另外两个节点输出如下:
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    

    有一台服务器的zk Mode为leader ,另外两台服务器的zk Mode为follower,如果配置了observer节点,则会有一台服务器的zk Mode为observer

    停止命令:

    zkServer.sh stop
    

    重启命令:

    zkServer.sh restart
    

    六、查看ZooKeeper日志

    如果启动过程出现了failed,可通过查看详细日志进行分析:

    $ cd /usr/local/zookeeper_3.6.2/logs
    $ cat zookeeper-<somthing>.out
    

    至此,ZooKeeper集群环境搭建结束。

    参考

    [1]Apache Zookeeper 集群的搭建[https://blog.csdn.net/qq_33713328/article/details/88854991]

    [2]zookeeper 集群搭建[https://www.cnblogs.com/ysocean/p/9860529.html]

    更多关于大数据、分布式、存储、区块链、Linux相关文章请关注我的微信公众号:asympTech渐进线实验室

    Top
    收藏
    关注
    评论
  • 相关阅读:
    【LeetCode每天一题】Symmetric Tree(对称树)
    【LeetCode每天一题】Same Tree(相同的树)
    【Go】并发
    【LeetCode每天一题】Validate Binary Search Tree(有效的二叉搜索树)
    【LeetCode每天一题】 Unique Binary Search Trees(唯一二叉搜索树)
    【LeetCode每天一题】Binary Tree Inorder Traversal(二叉树的中序遍历)
    【LeetCode每天一题】Reverse Linked List II(旋转链表II)
    【LeetCode每天一题】Subsets II(子集合II)
    【LeetCode每天一题】Partition List(分区链表)
    【Go】面向对象
  • 原文地址:https://www.cnblogs.com/JasonCeng/p/14455836.html
Copyright © 2020-2023  润新知