大致是说:配置管理,名字服务,提供分布式同步以及集群管理服务的开源系统。

一、zookeeper介绍

zookeeper官方:
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.

配置管理
在我们的应用中除了代码外,还有一些就是各种配置。比如数据库连接等。一般我们都是使用配置文件的方式,在代码中引入这些配置文件。但是当我们只有一种配置,只有一台服务器,并且不经常修改的时候,使用配置文件是一个很好的做法,但是如果我们配置非常多,有很多服务器都需要这个配置,而且还可能是动态的话使用配置文件就不是个好主意了。这个时候往往需要寻找一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。比如我们可以把配置放在数据库里,然后所有需要配置的服务都去这个数据库读取配置。但是,因为很多服务的正常运行都非常依赖这个配置,所以需要这个集中提供配置服务的服务具备很高的可靠性。一般我们可以用一个集群来提供这个配置服务,但是用集群提升可靠性,那如何保证配置在集群中的一致性呢? 这个时候就需要使用一种实现了一致性协议的服务了。Zookeeper就是这种服务,它使用Zab这种一致性协议来提供一致性。现在有很多开源项目使用Zookeeper来维护配置,比如在HBase中,客户端就是连接一个Zookeeper,获得必要的HBase集群的配置信息,然后才可以进一步操作。还有在开源的消息队列Kafka中,也使用Zookeeper来维护broker的信息。在Alibaba开源的SOA框架Dubbo中也广泛的使用Zookeeper管理一些配置来实现服务治理。

名字服务(名字注册)
名字服务这个就很好理解了。比如为了通过网络访问一个系统,我们得知道对方的IP地址,但是IP地址对人非常不友好,这个时候我们就需要使用域名来访问。但是计算机是不能是别域名的。怎么办呢?如果我们每台机器里都备有一份域名到IP地址的映射,这个倒是能解决一部分问题,但是如果域名对应的IP发生变化了又该怎么办呢?于是我们有了DNS这个东西。我们只需要访问一个大家熟知的(known)的点,它就会告诉你这个域名对应的IP是什么。在我们的应用中也会存在很多这类问题,特别是在我们的服务特别多的时候,如果我们在本地保存服务的地址的时候将非常不方便,但是如果我们只需要访问一个大家都熟知的访问点,这里提供统一的入口,那么维护起来将方便得多了。

分布式锁
其实在第一篇文章中已经介绍了Zookeeper是一个分布式协调服务。这样我们就可以利用Zookeeper来协调多个分布式进程之间的活动。比如在一个分布式环境中,为了提高可靠性,我们的集群的每台服务器上都部署着同样的服务。但是,一件事情如果集群中的每个服务器都进行的话,那相互之间就要协调,编程起来将非常复杂。而如果我们只让一个服务进行操作,那又存在单点。通常还有一种做法就是使用分布式锁,在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即fail over到另外的服务。这在很多分布式系统中都是这么做,这种设计有一个更好听的名字叫Leader Election(leader选举)。比如HBase的Master就是采用这种机制。但要注意的是分布式锁跟同一个进程的锁还是有区别的,所以使用的时候要比同一个进程里的锁更谨慎的使用。

集群管理
在分布式的集群中,经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中其他机器需要感知到这种变化,然后根据这种变化做出对应的决策。比如我们是一个分布式存储系统,有一个中央控制节点负责存储的分配,当有新的存储进来的时候我们要根据现在集群目前的状态来分配存储节点。这个时候我们就需要动态感知到集群目前的状态。还有,比如一个分布式的SOA架构中,服务是一个集群提供的,当消费者访问某个服务时,就需要采用某种机制发现现在有哪些节点可以提供该服务(这也称之为服务发现,比如Alibaba开源的SOA框架Dubbo就采用了Zookeeper作为服务发现的底层机制)。还有开源的Kafka队列就采用了Zookeeper作为Cosnumer的上下线管理。

二、集群部分

环境描述:
10.251.7.21 zk1.xkops.com
10.172.197.15 zk2.xkops.com
10.173.16.83 zk3.xkops.com

1.安装配置jdk
2.安装配置zookeeper(3.4.6)
wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar xf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 /usr/local/
mkdir /var/lib/zookeeper
修改配置文件
cd /usr/local/zookeeper-3.4.6/conf/
grep -Ev '^#|^$' zoo_sample.cfg >zoo.cfg
[root@zk1 zookeeper-3.4.6]# cat /usr/local/zookeeper-3.4.6/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=zk1.xkops.com:2888:3888
server.2=zk2.xkops.com:2888:3888
server.3=zk3.xkops.com:2888:3888
*其中2888为zookeeper服务器之间通信的端口,3888为zookeeper服务器之间选举(leader)的端口。
[root@zk1 zookeeper-3.4.6]# cat /var/lib/zookeeper/myid
1
*zk1.xkops.com 为1,zk2.xkops.com 为2,zk3.xkops.com 为3
配置环境变量
[root@zk1 zookeeper-3.4.6]# cat /etc/profile.d/zookeeper.sh
ZOO_HOME=/usr/local/zookeeper-3.4.6
export PATH=$ZOO_HOME/bin:$PATH
source /etc/profile.d/zookeeper.sh

3.启动zookeeper
zkServer.sh start
查看zookeeper服务器的角色(leader,follower)
zkServer.sh status
连接zookeeper
zkCli.sh -server zk1.xkops.com 2181

4.测试zookeeper通知状态
在zk1上连接zookeeper服务,创建znode,并get /mynode信息。
zkCli.sh -server zk1.xkops.com:2181
create /mynode 'hello'
get /mynode 1 --其中1为必须,或者为2等
在zk2上连接zookeeper服务,更改/mynode信息,查看zk1上客户端通知信息。
zkCli.sh -server zk2.xkops.com:2181
set /mynode 'hi'
此时在zk1上会看到通知信息。

参考文档:

博客园:http://www.cnblogs.com/yuyijq/p/3424473.html
官方安装文档地址:http://zookeeper.apache.org/doc/r3.4.6/zookeeperStarted.html#sc_Prerequisites
IBMdevelop:http://www.ibm.com/developerworks/cn/data/library/bd-zookeeper/

转载于:https://www.cnblogs.com/xkops/p/5595000.html

zookeeper集群相关推荐

  1. 2021年大数据ZooKeeper(二):ZooKeeper集群搭建

    目录 ZooKeeper集群搭建 第一步:下载zookeeeper的压缩包,下载网址如下 第二步:解压 第三步:修改配置文件 第四步:添加myid配置 ​​​​​​​第五步:安装包分发并修改myid的 ...

  2. Zookeeper集群部署和使用

    Zookeeper 由 Apache Hadoop 的 Zookeeper 子项目发展而来,Google Chubby的一个开源实现.它是一个分布式应用程序协调服务,提供的功能包括:配置管理,名字服务 ...

  3. 面试官:说说你对ZooKeeper集群与Leader选举的理解?

    作者:TalkingData 史天舒 来自:TalkingData ZooKeeper是一个开源分布式协调服务.分布式数据一致性解决方案.可基于ZooKeeper实现命名服务.集群管理.Master选 ...

  4. 【Zookeeper】Zookeeper集群“脑裂”问题处理大全

    本文重点分享Zookeeper脑裂问题的处理办法.ZooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调内核,用户可以在此之上构建更多复杂的分布式协调功能. 脑裂通常会出现在 ...

  5. ZooKeeper集群安装

    ZooKeeper是Apache提供的.分布式服务协调系统,应用比較广泛. 由于项目中使用Kafka MQ,而Kafka全然使用ZooKeeper实现Kafka各组件的服务协调,包含Broker.Co ...

  6. Kafka不停机,如何无感知迁移ZooKeeper集群?

    Kafka 在 Yelp 的应用十分广泛,Yelp 每天通过各种集群发送数十亿条消息,在这背后,Kafka 使用 Zookeeper 完成各种分布式协调任务. 因为Yelp 非常依赖 Kafka,那么 ...

  7. 使用Cloudera Manager搭建zookeeper集群及HDFS HA实战篇

    使用Cloudera Manager搭建zookeeper集群及HDFS HA实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用Cloudera Manager搭建zo ...

  8. Zookeeper集群 + Kafka集群 + KafkaOffsetMonitor 监控

    一.Zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一 ...

  9. 学习Docker容器网络模型 - 搭建分布式Zookeeper集群

    ZooKeeper是一个流行的分布式协调服务.它提供了两种不同的部署方式:单机模式和分布式模式.其中单机模式的部署非常简单,网上也有很多资料,我们今天会利用Docker搭建分布式Zookeeper集群 ...

  10. 构建高可用ZooKeeper集群(转载)

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

最新文章

  1. 4蓝图遍历actor_【虚幻4笔记15】浮动平台
  2. 华为实习日记——第二十二天
  3. RHEL5系统配置双网卡绑定
  4. 排查链接是否失效_Linux服务器入侵检测排查方法
  5. gradle 构建包含源码配置
  6. Linux更改显示管理器,聊聊Linux操作系统中的显示管理器及如何更换
  7. 收起虚拟键盘的各种方法 -- IOS
  8. ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number;
  9. html页面循环报错,wxs 脚本中 for 循环的一种写法导致 page-frame.html 报错
  10. 26.如何使用python操作我们自己创建的docker image呢?
  11. JQuery:常用方法一览
  12. Mysql中的日期及时间相关函数
  13. 10个大数据思维原理,你了解多少?
  14. 挑战运筹学——单纯形法,大M法
  15. 世界语言缩写,各国语言简称,各国域名缩写
  16. C/C++ 内存泄漏-原因、避免以及定位
  17. Cabbage教学(2)——类型转换与字符串操作
  18. HTML简单表格的制作
  19. 云之讯实现发送短信验证码(python版本)
  20. AD19学习笔记之原理图的绘制

热门文章

  1. 用mysqlslap对MySQL进行压力测试
  2. Effective_STL 学习笔记(二十六) 尽量使用 iterator 代替 const_iterator,reverse_iterator和const_reverse_iterator...
  3. PostgreSQL GPU 加速(HeteroDB pg_strom) (GPU计算, GPU-DIO-Nvme SSD, 列存, GPU内存缓存)
  4. vs2013代码模板设置
  5. C++实现二维码扫码登录
  6. Linux环境下实现简单进度条
  7. UDP协议相关及报文格式
  8. 【HNOI 2016】序列
  9. 分分钟使用Retrofit+Rxjava实现网络请求
  10. coin collector(一道测试题)