1、原子广播,事务一致
- zookeeper集群包含多个zookeeper服务,各个服务的数据必须保持一致。
- 选举成功后,首先做的就是数据同步:leader的数据同步到各个Follower,确保数据的一致性。
- 每个zookeeper服务都可以接收读和写的请求。Follower会把写请求转给leader,由leader统一处理。leader会通过原子广播端口广播给其他节点,并收集每台服务器反馈信息。若有一半的服务成功,则此事务成功提交(过半性)。
- 虽然过半性可能会导致部分zookeeper服务没有更新,但是当事务成功提交后,zookeeper底层会通过一定的机制,确保所有服务数据都更新成功。
2、通过NetCat工具查看Zookeeper集群服务状态
- 下载NetCat工具,链接:https://pan.baidu.com/s/1Lle8FvxvFG8zxUqoMKYhGA 提取码:dihx
- 安装NetCat: rpm -ivh nc-1.84-22.el6.x86_64.rpm
- nc命令测试是否安装成功:
- 使用nc工具查看集群的状态
echo stat | nc 127.0.0.1 2181
echo ruok | nc 127.0.0.1 2181
测试是否启动了该Server,若回复imok表示已经启动
echo conf | nc 127.0.0.1 2181
输出相关服务配置的详细信息。
3、Observer观察者
观察者的特点:
- 可以把某台zookeeper服务配置为观察者,那么这台服务不参与投票,只监听结果。
- 观察者不是zookeeper集群的主要组件,可以故障和断开连接,不影响zk集群的可用性
- 观察者在读和写上与 Follower一样
- 观察者不参与投票,所以对于过半性,并不包含observer的服务。
配置观察者:
- 编辑配置文件conf/zoo.cfg,添加内容:peerType=observer
- 修改每台zookeeper服务的zoo.cfg文件,把需要配置为观察者的服务修改为如下所示:
观察者的使用场景:不可控的地方可以用observer,不参与投票但是支持读和写。
- 例如某个zookeeper集群,在中国和美国都需要使用,但美国网络不可控,中国网络可控
- 显然,在美国部署时把服务配置为observer更合适