轻松搭建zookeeper集群

文章目录

  • 前言
    • 准备工作
  • 一、pandas是什么?
  • 二、搭建流程
    • 1.下载zookeeper压缩包
    • 2.安装JDK
    • 3.解压zookeeper压缩包
    • 4.修改配置文件zoo.cfg
    • 5.修改myid文件
    • 6.配置环境变量
    • 7.激动人心的时刻到来了,启动zookeeper测试一下
    • 2.常见错误处理
  • 总结


前言

本篇文章记录了关于zookeeper基本概念以及搭建zookeeper集群的流程,欢迎留言交流。

提示:以下是本篇文章正文内容,下面案例可供参考

准备工作

我们首先准备三台服务器(linux虚拟机),用来搭建zookeeper集群,在搭建zookeeper集群之前,我们先来了解下为什么zookeeper的基本概念。

一、pandas是什么?

1. zookeeper集群通常用来对用户的分布式应用程序提供协调服务的,为了保证数据的一致性,zookeeper集群有三种角色划分:leader、follower、observer。

  • leader:我们称为总统,领导者,负责投票的发起和决议,更新系统状态

  • follower:议员,负责接收客户端请求并向客户端返回结果以及在选举过程中参与投票

  • observer:观察者,可以用来接收客户端请求,将写请求转发到leader节点,但不参与投票,只同步leader状态,一般用来对查询操作做负载。

2.那么zookeeper节点为什么是奇数呢?

我们知道,在每台机器数据保持一致的情况下,zookeeper集群可以保证,客户端发起的每次查询操作,集群节点都能返回同样的结果。

  但是对于客户端发起的修改、删除等能改变数据的操作呢?集群中那么多台机器,你修改你的,我修改我的,最后返回集群中哪台机器的数据呢?

  这就是一盘散沙,需要一个领导,于是在zookeeper集群中,leader的作用就体现出来了,只有leader节点才有权利发起修改数据的操作,而follower节点即使接收到了客户端发起的修改操作,也要将其转交给leader来处理,leader接收到修改数据的请求后,会向所有follower广播一条消息,让他们执行某项操作,follower 执行完后,便会向 leader 回复执行完毕。当 leader 收到半数以上的 follower 的确认消息,便会判定该操作执行完毕,然后向所有 follower 广播该操作已经生效。

  所以zookeeper集群中leader是不可缺少的,但是 leader 节点是怎么产生的呢?其实就是由所有follower 节点选举产生的,讲究民主嘛,而且leader节点只能有一个,毕竟一个国家不能有多个总统。

  这个时候回到我们的小标题,为什么 zookeeper 节点数是奇数,我们下面来一一来说明:

①、容错率

  首先从容错率来说明:(需要保证集群能够有半数进行投票)

  2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不允许挂掉,但是相对于 单节点服务器,2台服务器还有两个单点故障,所以直接排除了。

  3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行可以允许1台服务器挂掉

  4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行可以允许1台服务器挂掉

  5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行可以允许2台服务器挂掉

②、防脑裂

  脑裂集群的脑裂通常是发生在节点之间通信不可达的情况下,集群会分裂成不同的小集群,小集群各自选出自己的leader节点,导致原有的集群出现多个leader节点的情况,这就是脑裂。

  3台服务器,投票选举半数为1.5,一台服务裂开,和另外两台服务器无法通行,这时候2台服务器的集群(2票大于半数1.5票),所以可以选举出leader,而 1 台服务器的集群无法选举。

  4台服务器,投票选举半数为2,可以分成 1,3两个集群或者2,2两个集群,对于 1,3集群,3集群可以选举;对于2,2集群,则不能选择,造成没有leader节点。

  5台服务器,投票选举半数为2.5,可以分成1,4两个集群,或者2,3两集群,这两个集群分别都只能选举一个集群,满足zookeeper集群搭建数目。

  以上分析,我们从容错率以及防止脑裂两方面说明了3台服务器是搭建集群的最少数目,4台发生脑裂时会造成没有leader节点的错误。

二、搭建流程

1.下载zookeeper压缩包

官网下载地址:http://mirror.bit.edu.cn/apache/zookeeper/

2.安装JDK

由于zookeeper集群的运行需要Java运行环境,所以需要首先安装 JDK,推荐一个博客https://www.cnblogs.com/ysocean/p/6952166.html

3.解压zookeeper压缩包

把下载好的压缩包上传到/usr/local文件夹下,输入命令:tar -zxvf zookeeper-3.3.6.tar.gz

4.修改配置文件zoo.cfg

轻松搭建zookeeper集群_第1张图片
我们把zoo_sample.cfg文件复制出一份并改名为zoo.cfg,
输入命令cp zoo_sample.cfg zoo.cfg
然后输入命令 vim zoo.cfg 开始修改配置文件
轻松搭建zookeeper集群_第2张图片
上面红色框住的内容即是我们修改的内容:

①、tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime

②、dataDir:存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志。注意:应该谨慎的选择日志存放的位置,使用专用的日志存储设备能够大大提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会很大程度上影像系统性能。

③、client:监听客户端连接的端口。

④、initLimit:允许follower连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。

⑤、syncLimit:表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。

⑥、server.A=B:C:D

A:其中 A 是一个数字,表示这个是服务器的编号;

B:是这个服务器的 ip 地址;

C:Leader选举的端口;

D:Zookeeper服务器之间的通信端口。

我们需要修改的第一个是 dataDir ,在指定的位置处创建好目录。

第二个需要新增的是 server.A=B:C:D 配置,其中 A 对应下面我们即将介绍的myid 文件。B是集群的各个IP地址,C:D 是端口配置。

5.修改myid文件

在上一步dataDir配置的路径下创建myid文件 touch myid
输入vim myid编辑文件,根据上一步server的配置A部分的数字,进行配置
比如:
我们先看我们刚刚配置的server:
在这里插入图片描述
那么我们就需要在192.168.201.129这台机器上,进入到/usr/local/apache-zookeeper-3.6.2-bin/log这个路径下,创建myid文件,输入编辑命令,输入0,保存退出即可,其他机器操作一样

6.配置环境变量

输入vi /root/.bashrc 添加相关的配置信息

export PATH="$PATH:/usr/local/apache-zookeeper-3.6.2-bin/bin"

保存退出后,输入source /root/.bashrc 应用该配置,最后测试下$ echo $PATH,如果能够打印出你添加的路径,代表你就成功了。

7.激动人心的时刻到来了,启动zookeeper测试一下

启动命令:zkServer.sh start
停止命令:zkServer.sh stop
重启命令:zkServer.sh restart
查看集群节点状态:zkServer.sh status

我们分别对集群三台机器执行启动命令。执行完毕后,分别查看集群节点状态:

出现如下即是集群搭建成功:

192.168.201.129节点
在这里插入图片描述
在这里插入图片描述
可以看到,一个leader,两个follower,选举成功了

2.常见错误处理

1、查看集群状态没有出现mode,却出现了Error contacting service. It is probably not running. 首先需要查看日志文件,zookeeper 日志文件目录在:zookeeper目录下logs文件中,文件名称为:zookeeper-root-server-bogon.out。通过查看日志来解决相应的问题。
(1)、查看三台节点的防火墙是否处于关闭状态,

// 查看防火墙状态
service iptables status
//关闭防火墙
chkconfig iptables off

(2)、dataDir配置的目录配置不对

在zoo.cfg配置文件中dataDir配置的路径中没有创建myid文件,注意:myid的文件内容和zoo.cfg文件中的server.A、server.B、server.C分别对应。


总结

zookeeper集群搭建到此就结束了,本人也是刚接触不久,也是一步一步百度+自己研究出来的,欢迎大神留言沟通

你可能感兴趣的:(微服务,zookeeper,分布式,linux,java)