一、Zookeeper介绍
1. 介绍Zookeeper之前先来介绍一下分布式
1.1 分布式主要是下面两个方面:
1) 任务拆分
任务拆分指的是把传统的单节点服务拆分成多个节点服务部署到不同的机器上对外提供服务。比如一个传统服务有订单+支付+物流等3个模块,拆分成订单系统、支付系统、物流系统3个服务。
2) 节点分工
如上面的服务拆分后,订单系统、支付系统、物流系统各司其职
说明:
分布式解决高可用,高并发的。
集群解决的是高可用。
集群从物理上来定义,分布式一种工作方式。
例如:一个工作任务需要10个小时(单节点)
分布式:10台机器,任务只需要1个小时就能够完成
集群:10台机器,任务还是10个小时。
1.2 分布式协作中的难点:
如果让你设计一个分布式系统,你预见到什么问题?
1) 保证节点高可用(节点故障)
2) 数据的一致性
3) 通讯异常
4) 网络分区
.......
2. Zookeeper简介
Zookeeper就是用来解决分布式协作中的难点的
zookeeper是google的chubby项目开源实现。最早是hadoop的子项目
Zookeeper的使用场景:
小米米聊、淘宝Taokeeper其实是类zookeeper。
Kafka使用zookeeper。消息发布订阅,其中zk就是用于检测节点崩溃。实现主题的发现,并且保持主题的生产和消费状态。
Hbase三段查找,Root-Region=》Meta Region=》Region(Table)。hbase的元数据信息放在HBase。HMaster挂掉,马上要节点恢复。
Hadoop。NameNode(SecondaryNameNode),HA Hadoop。一般情况下一个简单的hadoop集群,只有一个NameNode,如果NameNode挂掉,hadoop集群不可用。HA Haoop里面就要用到zk。
3. Zookeeper解决哪些问题
3.1 Master节点管理
解决的问题:Master高可用(挂掉以后,谁来负责工作),保证唯一。
3.2 配置文件管理
解决的问题:统一把配置文件存放zk,由ZK统一分发修改的内容到各台机器。
3.3 发布与订阅
发布者(producer)将数据发布到zk节点上,供订阅者(consumer)动态获取
3.4 分布式锁
分布式环境访问同一个资源,由第三方配锁实现。
解决的问题:由zk统一进行协调,保证数据的一致性。
3.5 集群的管理
Worker集群监控。保证主数据和备份数据的一致
二、Zookeeper安装配置
环境准备:
一台安装有jdk的虚拟机:192.168.152.130
1. 安装
1.1.下载
cd /software wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz1.2.解压
tar -zxvf zookeeper-3.4.6.tar.gz
2. 配置
说明:这里配置的是伪分布式的zookeeper
注意:配置之前一定要在/etc/hosts里面配置主机映射,否则会报错误:
ERROR [master:3890:QuorumCnxManager$Listener@517] - Exception while listening
java.net.SocketException: Unresolved address
vim /etc/hosts

2.1 先建立zookeeper的三个数据目录
mkdir -p /zookeeper/zk1 mkdir -p /zookeeper/zk2 mkdir -p /zookeeper/zk3
2.2 查看zookeeper的配置文件(已删掉多余的配置和注释)
vim zoo_sample.cfg
tickTime=2000 #session的会话时间 以ms为单位 initLimit=10 #服务器启动以后,master和slave通讯的时间 syncLimit=5 #master和slave之间的心跳检测时间,检测slave是否存活 dataDir=/tmp/zookeeper #保存zk的快照和数据 clientPort=2181 #客户端访问zk的端口

