目录
1.分布式环境的特点
2.分布式环境下面临的问题
3.初步认识zookeeper
4.zookeeper安装
a)分布性
b)并发性:程序运行过程中,并发性操作是很常见的。比如同一个分布式系统中的多个节点,同时访问一个共享资源。数据库、分布式存储
c)无序性:进程之间的消息通信,会出现顺序不一致问题
a)网络通信:网络本身的不可靠性,因此会涉及到一些网络通信问题
b)网络分区(脑裂):当网络发生异常导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式架构的所有节点,只有部分节点能够正常通信
c)三态:在分布式架构里面,除了成功、失败还有超时
d)分布式事务:ACID(原子性、一致性、隔离性、持久性)
e)中心化和去中心化:冷备或者热备,热备是随时可用,冷备是要激活才可用
分布式架构里面,很多的架构思想采用的是:当集群发生故障的时候,集群中的人群会自动“选举”出一个新的领导。
最典型的是: zookeeper / etcd
zookeeper是一个开源的分布式协调服务,是由雅虎创建的,基于google chubby。
a)zookeeper是什么
分布式数据一致性的解决方案
b)zookeeper能做什么
数据的发布/订阅(配置中心:disconf) 、 负载均衡(dubbo利用了zookeeper机制实现负载均衡) 、命名服务、
master选举(kafka、hadoop、hbase)、分布式队列、分布式锁
c)zookeeper的特性
(1)顺序一致性:从同一个客户端发起的事务请求,最终会严格按照顺序被应用到zookeeper中
(2)原子性:所有的事务请求的处理结果在整个集群中的所有机器上的应用情况是一致的,也就是说,要么整个集群中的所有机器都成功应用了某一事务、要么全都不应用
(3)可靠性:一旦服务器成功应用了某一个事务数据,并且对客户端做了响应,那么这个数据在整个集群中一定是同步并且保留下来的。
(4)实时性:一旦一个事务被成功应用,客户端就能够立即从服务器端读取到事务变更后的最新数据状态;(zookeeper仅仅保证在一定时间内,近实时)
单机环境安装
1.下载zookeeper的安装包
http://apache.fayea.com/zookeeper/stable/zookeeper-3.4.10.tar.gz
2.解压zookeeper
tar -zxvf zookeeper-3.4.10.tar.gz
3.cd 到 ZK_HOME/conf , copy一份zoo.cfg
cp zoo_sample.cfg zoo.cfg
4.sh zkServer.sh(sh zkServer.sh start)
{start|start-foreground|stop|restart|status|upgrade|print-cmd}
5.sh zkCli.sh -server ip:port(sh zkCli.sh -server localhost:2181)连接测试
e)集群环境
zookeeper集群, 包含三种角色: leader / follower /observer
zookeeper一般是由 2n+1台服务器组成
(1)observer
observer 是一种特殊的zookeeper节点。可以帮助解决zookeeper的扩展性(如果大量客户端访问我们zookeeper集群,需要增加zookeeper集群机器数量。从而增加zookeeper集群的性能。 导致zookeeper写性能下降, zookeeper的数据变更需要半数以上服务器投票通过。造成网络消耗增加投票成本)
1.observer不参与投票。 只接收投票结果。
2.不属于zookeeper的关键部位。
(2)配置
1.在zoo.cfg里面增加
peerType=observer
第一步: 修改配置文件
server.id=host:port:port
id的取值范围: 1~255; 用id来标识该机器在集群中的机器序号
2181是zookeeper的端口; //3306
3181表示leader选举的端口
server.1=192.168.98.165:2888:3181
server.2=192.168.98.166:2888:3181
server.3=192.168.98.167:2888:3181
server.4=192.168.98.168:2888:3181:observer
第二步:创建myid
在每一个服务器的dataDir目录下创建一个myid的文件,文件就一行数据,数据内容是每台机器对应的server ID的数字
第三步:启动zookeeper
/usr/data/program/zookeeper-3.4.10/bin/zkServer.sh start
/usr/data/program/zookeeper-3.4.10/bin/zkServer.sh status
/usr/data/program/zookeeper-3.4.10/bin/zkServer.sh restart
/usr/data/program/zookeeper-3.4.10/bin/zkCli.sh -server localhost:2181
#命令
vim /usr/data/program/zookeeper-3.4.10/conf/zoo.cfg
vim /tmp/zookeeper/myid
tail -500f /usr/data/program/zookeeper-3.4.10/bin/zookeeper.out