zookeeper 笔记 (一)

一.    分布式简介


1.    概念

    一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统

2.    分布式&集群

分布式:一个业务分拆多个子业务,部署在不同的服务器上。是一种工作方式,解决高并发,高可用。

集群:同一个业务,部署在多个服务器上。是一种物理形态,从物理上定义,解决高可用。


3.    分布式协作中的难点

a.     保证节点高可用(节点故障)

b.     数据的一致性

c.     通讯异常

d.     网络分区



二.    zookeeper简介

1.    概念

    ZooKeeper致力于提供一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务,是雅虎公司创建,是Google的Chubby一个开源的实现,也是Hadoop和Hbase的重要组件。


2.    设计目标

简单的数据结构:共享的树形结构,类似文件系统,存储于内存;

可以构建集群:避免单点故障,3-5台机器就可以组成集群,超过半数正常工作就能对外提供服务;

顺序访问:对于每个读请求,zk会分配一个全局唯一的递增编号,利用这个特性可以实现高级协调服务;

高性能:基于内存操作,服务于非事务请求,适用于读操作为主的业务场景。3台zk集群能达到13w QPS;

3.    应用场景

数据发布订阅: 发布者(producer)讲数据发布到zk节点上,供订阅者(consumer)动态获取
负载均衡:
命名服务:
简单统一命名服务实现
Master选举:Master高可用(挂掉以后,谁来负责工作),保证唯一。
集群管理:Worker集群监控。
配置管理:统一把配置文件存放zk,由ZK统一分发
分布式队列:FIFO

分布式锁:分布式环境访问统一个资源,由第三方配锁实现。由zk统一进行协调,保证数据的一致性。




三.    zookeeper安装与配置

1.    下载

$ tar xvzf zookeeper-3.4.9.tar.gz

$ mv ./zookeeper-3.4.9 /usr/local/

3.    修改配置文件

${ZOOKEEPER_HOME}/conf/zoo_sample.cfg


a.    配置文件详解

tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间
initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值
clientPort:指定当前服务器服务器的端口
dataDir:指定当前服务器数据存放的路径(目录)
dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争
syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。
 

server.1/server.2/server.3 指定服务器的集群情况(有几台服务器)

server.A=B:C:D:
A是一个数字,表示这个是第几号服务器,myid
B是这个服务器的ip地址
C第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口(通讯端口)

D是在leader挂掉时专门用来进行选举leader所用(选举端口)

myid必须手动建立且指定在zk数据目录,也就是dataDir指定的路径(不管真分布还是伪分布都需要指定)
$ echo 1 >>/home/hadoop/tmp/zookeeper/zk1/myid
$ echo 2 >>/home/hadoop/tmp/zookeeper/zk2/myid
$ echo 3 >>/home/hadoop/tmp/zookeeper/zk3/myid

b.    伪分布式部署(server zookeeper只有一份)

/conf/zoo1.cfg zoo2.cfg zoo3.cfg
zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk1(这个目录可以自行指定)
clientPort=2181

server.1=master:2888(通讯端口):3888(选举端口)
server.2=master:2889:3889
server.3=master:2890:3890

zoo2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk2
clientPort=2182

server.1=master:2888:3888
server.2=master:2889:3889
server.3=master:2890:3890


zoo3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk3
clientPort=2183

server.1=master:2888:3888
server.2=master:2889:3889
server.3=master:2890:3890

c.    真分布式部署(配置文件一样,但部署在master、slave1、slave2 三台不同的服务器上)

server1..../conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk
clientPort=2181

server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888


server2..../conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk
clientPort=2181

server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888


server3..../conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk
clientPort=2181

server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

4.    zeekeeper的启动(伪分布式)

停止Zookeeper
$ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo1.cfg
$ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo2.cfg
$ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo3.cfg


启动Zookeeper
$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo1.cfg
$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo2.cfg
$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo3.cfg


查看zookeeper状态
$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo1.cfg
$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo2.cfg
$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo3.cfg








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值