分布式协调服务-zookeeper初识与安装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28893679/article/details/83751196

1、为什么要使用zookeeper

zookeeper一般使用在分布式系统中,分布式存在的特点主要有:分布性、并发性和无序性。程序运行过程中,并发性操作是很常见的。比如同一个分布式系统中的多个节点,同时访问一个共享资源。数据库、分布式存储。进程之间的消息通信,会出现顺序不一致问题。

分布式架构存在的问题:
1、网络通信:网络本身的不可靠性,因此会涉及到一些网络通信问题
2、网络分区:当网络发生异常导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式架构的所有节点,只有部分节点能够正常通信
3、三态:在分布式架构里面,接口调用成功、失败,以及常见的超时
4、分布式事务

2、中心化与去中心化

中心化:冷备或者热备
去中心化:分布式架构里面,很多的架构思想采用的是:当集群发生故障的时候,集群中的人群会自动“选举”出一个新的领导。最典型的是: zookeeper / etcd

3、经典的CAP/BASE理论

C、(一致性 Consistency): 所有节点上的数据,时刻保持一致
A、可用性(Availability):每个请求都能够收到一个响应,无论响应成功或者失败
P、分区容错 (Partition-tolerance):表示系统出现脑裂以后,可能导致某些server与集群中的其他机器失去联系
CP / AP

CAP理论仅适用于原子读写的Nosql场景,不适用于数据库系统
BASE
基于CAP理论,CAP理论并不适用于数据库事务(因为更新一些错误的数据而导致数据出现紊乱,无论什么样的数据库高可用方案都是
徒劳) ,虽然XA事务可以保证数据库在分布式系统下的ACID特性,但是会带来性能方面的影响;

eBay尝试了一种完全不同的套路,放宽了对事务ACID的要求。提出了BASE理论
Basically available : 数据库采用分片模式, 把100W的用户数据分布在5个实例上。如果破坏了其中一个实例,仍然可以保证
80%的用户可用

soft-state: 在基于client-server模式的系统中,server端是否有状态,决定了系统是否具备良好的水平扩展、负载均衡、故障恢复等特性。
Server端承诺会维护client端状态数据,这个状态仅仅维持一小段时间, 这段时间以后,server端就会丢弃这个状态,恢复正常状态

Eventually consistent:数据的最终一致性

4、初步认识zookeeper

1、zookeeper是什么
分布式数据一致性的解决方案

2、zookeeper能做什么
数据的发布/订阅(配置中心:disconf) 、 负载均衡(dubbo利用了zookeeper机制实现负载均衡) 、命名服务、
master选举(kafka、hadoop、hbase)、分布式队列、分布式锁
3、zookeeper的特性
顺序一致性:从同一个客户端发起的事务请求,最终会严格按照顺序被应用到zookeeper中
原子性
所有的事务请求的处理结果在整个集群中的所有机器上的应用情况是一致的,也就是说,要么整个集群中的所有机器都成功应用了某一事务、要么全都不应用
可靠性
一旦服务器成功应用了某一个事务数据,并且对客户端做了响应,那么这个数据在整个集群中一定是同步并且保留下来的
实时性
一旦一个事务被成功应用,客户端就能够立即从服务器端读取到事务变更后的最新数据状态;(zookeeper仅仅保证在一定时间内,近实时)

5、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.到bin目录下查看zkServer.sh脚本,该脚本可以携带这些参数:sh zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
在这里插入图片描述
5.使用sh zkServer.sh start启动zk。zk启动的默认端口是2181
在这里插入图片描述
在这里插入图片描述
6.如果需要从客户端连接zk,可以使用如下命令:sh zkCli.sh -server ip:port
在这里插入图片描述

集群环境
说明:
1、zookeeper集群, 包含三种角色: leader / follower /observer
2、leader/follower:leader即领导、follower为跟随者。
3、observer:observer 是一种特殊的zookeeper节点。可以帮助解决zookeeper的扩展性(如果大量客户端访问我们zookeeper集群,需要增加zookeeper集群机器数量。从而增加zookeeper集群的性能。 导致zookeeper写性能下降, zookeeper的数据变更需要半数以上服务器投票通过。造成网络消耗增加投票成本) observer不参与投票。 只接收投票结果 .不属于zookeeper的关键部位。

环境准备:
三台虚拟机,分别是192.168.10.125、192.168.10.127和192.168.10.128
在这里插入图片描述

安装部署步骤:
1、在每台服务器上单机安装zookeeper,不启动。
2、在每台服务器的config/zoo.cfg文件中添加如下配置:
serveri.id=ip:port1:port2
id表示每个服务在集群里面的唯一表示,取值范围为1-255
port1:zk的端口号,节点之间通信的端口号,不能是2181,因为客户端会使用该接口
port2:表示leader选举的端口号
在这里插入图片描述
3、创建myid:每个节点的唯一标识。
在每个节点服务器的dataDir目录下创建一个myid的文件,文件内容里面为每个节点id的数字。
如:192.168.10.127:dataDir为/tmp/zookeeper,id为1
在这里插入图片描述
则在/tmp/zookeeper目录下创建myid的文件,文件内容为1即可。
在这里插入图片描述
4、分别登录到每台服务器,使用sh zkServer.sh start命令启动zk即可。

6、zookeeper流程

在这里插入图片描述

7、observer的作用

当集群的节点需要动态扩充的时候,就可以新增observer的方式来进行新增
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_28893679/article/details/83751196