协调服务zookeeper

(一)zookeeper概念与集群特性

  1. zookeeper内部而言是一个集群,对外部而言(客户端)可以看作一个整体
  2. zookeeper任何一个节点都可以被连接并查询数据,如果涉及到修改数据,则follower会先通知leader,由leader去下发数据修改的通知到其他节点,并同步数据到所有其他节点,注意这里的数据同步不是按照集群的心跳时间进行,而是实时的。
  3. 集群中只要有半数以上的live节点,服务就可以正常提供,否则服务将会报错。
  4.  集群中的服务器节点数量最好为奇数,这样选举速度更快。

(二)leader选举算法:paxos


(三)通讯端口

  • leader--follower  2888
  • client--zookeeper 2181
  • follower选举leader 3888


(四)配置文件zookeeper.cfg

     1. 将配置拷贝到另外两台机器相同路径下

scp -r zookeeper-3.4.5/ hdp-server-02:/root/app/
scp -r zookeeper-3.4.5/ hdp-server-03:/root/app/

 

      2. 在zookeeper安装目录下创建文件夹data并创建文件命名为myid,将1写进文件(在另外两台机器也创建相同文件并依次写入2,3;命名的id顺序在配置文件中指定)

      3. 在zookeeper的bin目录下启动服务(三台机器一样)

./zkServer.sh start
jps


       4. 查看工作模式(一台leader,两台follower)

./zkServer.sh status


(五)测试集群可用性


1.杀掉leader节点的进程,集群自动选举新的leader

kill -9 | `jps | grep QuorumPeerMain | awk '{print $1}'`


(六)zookeeper可以实现的分布式协调服务包括(只保管数据,不提供真正的服务):

  1. 统一名称服务
  2.  配置管理
  3. 分布式锁
  4. 集群节点状态协调(负载均衡/主从协调)

(七)zookeeper功能:

  1. 替客户端保管数据
  2. 为客户提供数据的监听服务(场景:服务器集群动态感知及故障切换)

(八)zookeeper的数据存储服务

  1. 分布式内存数据库
  2. 像linux的目录树结构
  3. zookeeper中的数据节点

     3.1 每一个节点称为znode,通过路径来访问
     3.2 每一个znode维护着:数据、stat数据结构(ACL,时间戳及版本号)
     3.3 znode维护的数据主要是用于存储协调的数据,如状态、配置、位置等信息,每个节点存储的数据量很小,KB级别。
     3.4 znode数据更新后,版本号等控制信息也会更新(增加)
     3.5 znode还具有原子性操作的特点:写--全部替换,读--全部
     3.6 znode有永久节点和临时节点之分:临时节点值创建它的session一旦结束,该节点即被zookeeper删除。

(九)连接zookeeper(可以在任意节点连接其他节点)

./zkCli.sh -server hdp-server-01

 (十)注册监听器

./zkCli.sh -server hdp-server-01
get PATH watch