资讯专栏INFORMATION COLUMN

zookeeper 高可用集群搭建

sherlock221 / 2873人阅读

摘要:前言记录集群搭建的过程什么是是一个分布式的,开放源码的分布式应用程序协调服务,是的一个开源的实现,是和的重要组件。

前言

记录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压缩包上传到服务器后,解压

//上传压缩包
scp zookeeper-3.4.11.tar.gz root@192.168.2.219:/home/tools
//登录到服务器目录 解压
tar -zxvf zookeeper-3.4.11.tar.gz
//进入zookeeper主目录
cd 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,结果如下:

tcp6       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配置文件如下:

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

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

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

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

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

  Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
  Mode: follower

  Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
  Mode: leader

  Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
  Mode: follower

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

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

总结

Zookeeper启动失败,可以在./zookeeper.out文件查看异常日志

每台机器的myid中内容为服务的唯一标识,不能重复

确保每台机器必须能ping通,必要时请先关闭防火墙

在阿里云服务器上,请使用内网ip进行配置

确保使用的端口未被占用

Zookeeper集群机器数量只能是奇数个,详见 https://www.cnblogs.com/LeeSc...

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

最后

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73169.html

相关文章

  • 大数据入门指南(GitHub开源项目)

    摘要:项目地址前言大数据技术栈思维导图大数据常用软件安装指南一分布式文件存储系统分布式计算框架集群资源管理器单机伪集群环境搭建集群环境搭建常用命令的使用基于搭建高可用集群二简介及核心概念环境下的安装部署和命令行的基本使用常用操作分区表和分桶表视图 项目GitHub地址:https://github.com/heibaiying... 前 言 大数据技术栈思维导图 大数据常用软件安装指...

    guyan0319 评论0 收藏0
  • 可能是全网把 ZooKeeper 概念讲的最清楚的一篇文章

    摘要:的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。具有不可分割性即原语的执行必须是连续的,在执行过程中不允许被中断。 该文已加入开源文档:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识)。地址:https://github.com/Snailclimb... showImg(https:...

    DrizzleX 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<