前言

记录Zookeeper集群搭建的过程!

什么是 Zookeeper ?

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

划重点:分布式应用程序协调服务,在分布式系统中,通常需要一个通用的服务注册与发现中心,因此Zookeeper就是充当这样的角色,国内非常出名的分布式框架Dubbo也建议使用Zookeeper作为服务注册与发现中心。

环境准备

准备三台Linux虚拟机,前往官网下载zookeeper压缩包,如果不知道官网如何下载,可在公众号「张少林同学」回复Java工具获取网盘下载链接

OS 主机名 ip zookeeper/端口
centos7 LIHETEST6 192.168.2.216 zookeeper-3.4.11.tar.gz/2181
centos7 LIHETEST7 192.168.2.217 zookeeper-3.4.11.tar.gz/2181
centos7 LIHETEST8 192.168.2.218 zookeeper-3.4.11.tar.gz/2181

配置服务器 hosts 映射

在三台服务器分别做以下操作,这里以 LIHETEST6 为例:

  • 查看本机主机名:hostname
  • vim /etc/hostname 删除原有内容,新增主机名:LIHETEST6
  • 设置主机名及IP映射 : vim /etc/hosts 在文件尾部添加内容,格式为: IP 地址 主机名 (中间用空格分割),保存退出,例如:192.168.2.216 LIHETEST6
  • 重启网络服务:systemctl restart network

单机部署

Zookeeper压缩包上传到服务器后,解压

1//上传压缩包
2scp zookeeper-3.4.11.tar.gz root@192.168.2.219:/home/tools
3//登录到服务器目录 解压
4tar -zxvf zookeeper-3.4.11.tar.gz
5//进入zookeeper主目录
6cd zookeeper-3.4.11

解压后看看都有哪些内容:

我们只需要把焦点定位到这两个目录:

  • bin目录:脚本执行目录,里面放置一些Zookeeper启动脚本等
  • conf目录:配置文件目录

执行脚本命令./bin/zkServer.sh start 启动Zookeeper,结果如下:

提示找不到 ../conf/zoo.cfg文件,但是最后却打印STARTED,于是执行./bin/zkServer.sh status看看当前Zookeeper状态,结果如下:

上述结果很清晰明了了,Zookeeper启动失败,原因是找不到配置文件:./conf/zoo.cfg./bin/zkServer.sh start命令启动时,默认会使用此配置文件启动,而初始化时./conf目录下并无此文件,查看./conf中存在一个样例配置文件./conf/zoo_sample.cfg,于是执行cp ./conf/zoo_sample.cfg ./conf/zoo.cfg复制一份./conf/zoo.cfg文件出来,再次执行命令启动Zookeeper,结果如下:

可以看出Zookeeper已经启动了,并且是单机模式启动。

再看看启动日志信息cat zookeeper.out:

zookeeper启动,绑定在2181端口,查看一下进程是否存在:netstat -lntp | grep 2181,结果如下:

1tcp6       0      0 :::2181                 :::*                    LISTEN      27201/java 

配置文件解析

  • tickTime:客户端与服务端保持心跳的毫秒数
  • initLimit:初始容忍的心跳数
  • syncLimit:等待最大容忍的心跳数
  • dataDir:存储快照的目录,这里默认是使用系统临时目录,真实使用时建议自定义目录
  • clientPort:暴露给客户端访问的端口

单机伪集群部署

有时候我们会在本机搭建一个伪集群,用于项目代码测试,那么只需要启动三个不同配置的Zookeeper即可,只要端口不同,即可视为不同的程序。

./conf目录下新增zoo1.cfgzoo2.cfgzoo3.cfg配置文件,其中dataDir目录依次都不同,clientPort分别配置为218121822183。启动Zookeeper时,显式指定配置文件,如:./bin/zkServer.sh start conf/zoo3.cfg ,依次启动三个Zookeeper配置文件。。那么最终执行netstat -lntp看下端口监听情况:

可以看到启动了三个监听不同端口的Zookeeper.

多机集群部署

在真实生产环境中,我们一般会搭建一个多机器集群的,目的很明显,为了提高容错能力。

在三台机器中,每台安装一个Zookeeper服务,这三台机器形成一个小规模的集群。

在每台机器中修改./conf/zoo.cfg配置文件如下:

1  initLimit=10 // 初始容忍的心跳数
2  syncLimit=5  // 等待最大容忍的心跳数
3  dataDir=/home/wwwroot/easywits/tools/zookeeper-3.4.11/data    //数据存储目录
4  dataLogDir=/home/wwwroot/easywits/tools/zookeeper-3.4.11/logs //数据日志文件目录
5  clientPort=2181 //zookeeper 监听端口
6  server.1=192.168.2.216:2888:3888 //主机ip/服务间心跳连接端口/数据端口
7  server.2=192.168.2.217:2888:3888
8  server.3=192.168.2.218:2888:3888

分别在每台服务器 数据目录 /home/wwwroot/easywits/tools/zookeeper-3.4.11/data 中新增名为 myid 文本文件,内容依次为 0,1,2,这是集群中每台 Zookeeper服务的唯一标识,不能重复,以第一台为例:

1echo "0"  > /home/wwwroot/easywits/tools/zookeeper-3.4.11/data/myid

启动 Zookeeper : ./bin/zkServer.sh start

查看每台服务器中,Zookeeper状态:./bin/zkServer.sh status,结果分别如下:

1  Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
2  Mode: follower
3
4  Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
5  Mode: leader
6
7  Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
8  Mode: follower

可以看到启动模式,第一台与第三台为follower,而第二台为leader

注意:Zookeeper集群规模,机器数量只能是奇数个,在三台机器集群的情况下,最多只能挂掉其中一台,如果主节点挂掉,剩下两台服务会重新选举一台作为主节点。

总结

  • Zookeeper启动失败,可以在./zookeeper.out文件查看异常日志
  • 每台机器的myid中内容为服务的唯一标识,不能重复
  • 确保每台机器必须能ping通,必要时请先关闭防火墙
  • 在阿里云服务器上,请使用内网ip进行配置
  • 确保使用的端口未被占用
  • Zookeeper集群机器数量只能是奇数个,详见 https://www.cnblogs.com/LeeScofiled/p/7390937.html

ps:关于需要用到的工具,可在公众号「张少林同学」回复Java工具获取网盘下载链接

最后

记录一波Zookeeper搭建过程,后续会不定期更新原创文章,欢迎关注公众号 「张少林同学」!

zookeeper 高可用集群搭建的更多相关文章

  1. zookeeper高可用集群搭建

    前提:已经在master01配置好hadoop:在各个slave节点配置好hadoop和zookeeper: (该文是将zookeeper配置在各slave节点上的,其实也可以配置在各master上, ...

  2. hadoop+yarn+hbase+storm+kafka+spark+zookeeper)高可用集群详细配置

    配置 hadoop+yarn+hbase+storm+kafka+spark+zookeeper 高可用集群,同时安装相关组建:JDK,MySQL,Hive,Flume 文章目录 环境介绍 节点介绍 ...

  3. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  4. zookeeper+activemq高可用集群搭建

    一.准备工作: 准备三台机器:192.168.35.111192.168.35.112192.168.35.113 二.搭建zookeeper 三台机器上均要搭建zookeeper服务// 下载zoo ...

  5. hadoop高可用集群搭建小结

    hadoop高可用集群搭建小结1.Zookeeper集群搭建2.格式化Zookeeper集群 (注:在Zookeeper集群建立hadoop-ha,amenode的元数据)3.开启Journalmno ...

  6. Spark高可用集群搭建

    Spark高可用集群搭建 node1    node2    node3   1.node1修改spark-env.sh,注释掉hadoop(就不用开启Hadoop集群了),添加如下语句 export ...

  7. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  8. spring cloud 服务注册中心eureka高可用集群搭建

    spring cloud 服务注册中心eureka高可用集群搭建 一,准备工作 eureka可以类比zookeeper,本文用三台机器搭建集群,也就是说要启动三个eureka注册中心 1 本文三台eu ...

  9. Hbase 完全分布式 高可用 集群搭建

    1.准备 Hadoop 版本:2.7.7 ZooKeeper 版本:3.4.14 Hbase 版本:2.0.5 四台主机: s0, s1, s2, s3 搭建目标如下: HMaster:s0,s1(备 ...

随机推荐

  1. [Training Video - 5] [Groovy Script Test Step - Collections, Exceptions] Exception Handling in groovy

    def x = new String[3] x[0] = "A" x[1] = "B" x[2] = "C" log.info"X ...

  2. Disruptor 系列(一)快速入门

    Disruptor 系列(一)快速入门 Disruptor:是一个开源的并发框架,能够在 无锁 的情况下实现网络的 Queue 并发操作,所以处理数据的能力比 Java 本身提供的并发类容器要大的多, ...

  3. python 中numpy的var,std及cov

    var:表示方差, 即各项-均值的平方求和后再除以N , std:表示标准差,是var的平方根. cov:协方差 ,与var类似,但是除以(N-1)

  4. 如何用Python实现常见机器学习算法-1

    最近在GitHub上学习了有关python实现常见机器学习算法 目录 一.线性回归 1.代价函数 2.梯度下降算法 3.均值归一化 4.最终运行结果 5.使用scikit-learn库中的线性模型实现 ...

  5. php 访问用友u8数据

    <?php namespace app\api\controller; use think\Controller; use think\Db; use think\Log; /** * desc ...

  6. 第二届CCCC赛后感想 2017-04-15 23:56 88人阅读 评论(0) 收藏

    第一次写赛后感想,也不算什么很正规的比赛,不过这次比赛的时间恰好处于思想变化的阶段,留贴纪念. 先谈谈这次比赛,弱校萌新,依靠申请进了总决赛,发现和第一届不一样,缺少了团队奖心中有点缺乏动力,比赛2个 ...

  7. 机器学习—集成学习(Adaboost)

    一.原理部分: 二.sklearn实现: from sklearn.ensemble import AdaBoostClassifier from sklearn.datasets import lo ...

  8. 如何在Mirth Connect中创建和调用自定义Java代码

    0-前言 本文章将向您展示如何创建自定义Java类,将其编译/打包到JAR中,将其包含在Mirth Connect在,并在JavaScript中调用它,您可以从任何JavaScript上下文调用自定义 ...

  9. task4: 结对编程-词频统计[修改版]

    问题描述: 读取一个文件,统计其中单词出现次数,并按从高到低的顺序显示,相同顺序的字典序排列. 思路: 基于上次的程序用正则提取出文本里的单词,然后利用字典计数(先get,为null则置1,不为nul ...

  10. MySQL 笔记整理(20) --幻读是什么,幻读有什么问题?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 20) --幻读是什么,幻读有什么问题? 我们先来看看表结构和初始化数据 ...