前言:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户
中心化和去中心化:
分布式架构里面,很多的架构思想采用的是:当集群发生故障的时候,集群中的人群会自动“选举”出一个新的领导,最典型的是:zookeeper/etcd。
典型的 CAP/BASE 理论:
CAP 理论:
C:(一致性 Consistency):所有的节点上的数据时刻保持一致
A:(可用性 Avaliable):每个请求都能够收到一个响应,无论响应成功或者失败。
P:(分区容错 Partition-tolerance):表示系统出现脑裂之后,可能导致默写server与集群中的其他机器失去联系。
CAP 理论仅适用于Nosql场景,不适用于数据库系统,或者原子读写。
BASE 理论:
基于CAP理论,CAP理论并不适用于数据库事务(因为更新一些错误的数据而导致数据出现紊乱,无论什么样的数据库高可用方案都是徒劳),虽然XA 事务虽然可以保证数据库在分布式系统下的ACID特性,但是会带来性能方面的影响。
eBay 尝试了一种完全不同的套路,放宽了对事务的ACID的要求,提出了BASE理论
Basically avaliable 分片:数据库采用分片模式,把100W的用户数据分布在5个实例上,如果破坏了其中一个实例,还可以保证80%的用户可以访问数据库。
soft-state 软状态:在基于client/server模式的系统中,server端是否有状态,决定了系统是否具备良好的水平扩展,负载均衡,故障恢复等特性。server端承诺会维护 client 端状态数据,这个状态仅仅维持一小段时间,这段时间以后,server端就会丢失这个状态,恢复正常状态。
Eventually consistent:数据的最终一致性。
初步认识zookeeper:
zookeeper 是一个开源的分布式协调服务,是由雅虎创建的,基于google chubby。
是什么:是一个分布式数据一致性的解决方案。
能做什么:数据的发布/订阅(配置中心:disconf),负载均衡(dubbo利用zookeeper机制实现的),命名服务,master 选举(kafka,Hadoop,HBASE),分布式队列,分布式锁。
zookeeper 的特性:
顺序一致性:同一个客户端搭起的事务请求,最终会严格按照顺序被应用到zookeeper中。
原子性:所有的事务请求的处理结果在整个集群中的所有机器上的应用情况是一致的,也就是说,要么整个集群中的所有的机器都成功应用了某一个事务,要么都不应用。
可靠性:一旦服务器成功应用了某一个事务数据,并且对客户端做了响应,那么这个数据在整个集群中一定是同步并且保留下来的。
实时性:一旦一个事务被成功应用,客户端就能够立即从服务器读取到事务变更后的最新数据状态;(zookeeper 仅仅保证在一定时间内,近实时)
单机环境下 安装zookeeper:
1.下载zookeeper 的安装包。
https://archive.apache.org/dist/zookeeper/stable/
2.解压 zookeeper :
解压:tar -zxvf zookeeper-3.5.5.tar.gz
3.进入zookeeper-3.5.5:cd zookeeper-3.5.5/
进入 conf 目录下:cd conf/
复制一份 zoo_sample.cfg:cp zoo_sample.cfg zoo.cfg
进入 zoo.cfg:vim zoo.cfg
进入bin目录中:cd ../bin/
有很多shell脚本
4.启动zookeeper: sh zkServer.sh xxx
看到很多命令,键入:sh zkServer.sh start 进行启动
5.连接zookeeper:sh zkCli.sh -server localhost:2181 (2181 zookeeper 默认端口号)
集群环境下安装zookeeper:
zookeeper 集群,包含三种角色:leader/follower/observer
Leader:接收所有Follower 的提案请求并统一协调发起提案的投票,负责与所有的Follower 进行内部的数据交换(同步);
Follower:直接为客户端服务并参与提案的投票,同时与Leader 进行数据交换(同步);
Observer:直接为客户端服务单并不参与提案的投票,同时也与Leader 进行数据交换(同步)。
搭建集群:
比如以下三台机器:
192.168.11.129
192.168.11.131
192.168.11.135
分别在三台机器中安装zookeeper并解压,进行启动测试,此处省略。
第一步:修改配置文件 zoo.cfg
vim zoo.cfg
加入:
server.1=192.168.11.129:2181:3181
server.2=192.168.11.131:2181:3181
server.3=192.168.11.135:2181:3181
进行配置。
既:server.id=host:port:port 且 id不能重复,id 的取值范围是:1~255,用id来标识该机器再集群中的机器序列。
2181 代表zookeeper的端口号;后续客户端连接到zookeeper服务端需要这个端口号,zookeeper各个服务节点之间通信的一个端口号。
3181代表leader选举端口号;
server.x 代表集群中每台机器
第二步:创建myid.
dataDir:表示数据文件存储的目录,如:快照,事务日志。
在每一个服务器的dataDir 目录下创建一个myid的文件,文件就一行数据,数据内容是每台机器对应的serverID的数字。
第三步:启动zookeeper。
未完结,待续。。。