协调服务zookeeper
(一)zookeeper概念与集群特性
- zookeeper内部而言是一个集群,对外部而言(客户端)可以看作一个整体
- zookeeper任何一个节点都可以被连接并查询数据,如果涉及到修改数据,则follower会先通知leader,由leader去下发数据修改的通知到其他节点,并同步数据到所有其他节点,注意这里的数据同步不是按照集群的心跳时间进行,而是实时的。
- 集群中只要有半数以上的live节点,服务就可以正常提供,否则服务将会报错。
- 集群中的服务器节点数量最好为奇数,这样选举速度更快。
(二)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可以实现的分布式协调服务包括(只保管数据,不提供真正的服务):
- 统一名称服务
- 配置管理
- 分布式锁
- 集群节点状态协调(负载均衡/主从协调)
(七)zookeeper功能:
- 替客户端保管数据
- 为客户提供数据的监听服务(场景:服务器集群动态感知及故障切换)
(八)zookeeper的数据存储服务
- 分布式内存数据库
- 像linux的目录树结构
- 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