2.BASE理论CAP理论是分布式系统实现的理论基础,主要包括一致性,可用性和分区容易性。
一致性(consistency):保证多个系统之间的数据一致。
可用性(availbilaty):每次请求都能获得响应,但不保证数据是最新数据。
分区容错性(partition tolerance):分布式系统在遇到网络故障时,能够对外提供一致性和可用性服务,除非整个网络瘫痪。
一个系统中最多保证其中的两项,分区容错性是必须的,所以一般只有CP和AP,zookeeper是CP,springCloud中eureka是保证AP。
3.zookeeper介绍BASE理论是对一致性和可用性的妥协,即包括基本可用,软状态和最终一致性。
基本可用:在分布式系统出现故障时,允许损失一定可用性和一致性。
软状态:允许在达到最终一致性时有中间状态,即在延迟后达到最终一致性。
最终一致性:经过一段时间后达到最终一致性。
强一致性:在分布式系统中多个数据备份一旦有更新就要通知其他数据备份更新,保证任意时刻读到的数据是相同的,强一致性一定会损害可用性。
弱一致性:不保证响应的数据是最新的。
最终一致性:在经过一段时间的延迟后最终数据达到一致性的要求。
顺序一致性:任意一次读都能看到最近一次写的数据。写入时是建立在已经同步且确定的基础上。
zookeeper写入时强一致性,读取时顺序一致性。
3.1 zookeeper安装zookeeper是一个开源的分布式协调框架,旨在解决分布式系统中一致性的问题。
zookeeper本质上是一个小型存储系统,主要包括文件服务+监听服务。从设计角度看是从观察者模式设计的分布式服务管理框架。
zookeeper包括节点:持久化目录节点,持久化顺序编号目录节点,临时目录节点,临时目录顺序编号目录节点。container节点,TTL节点zookeeper官网传送门!!!https://zookeeper.apache.org/
3.1.1 常见cli命令下载文件:Apache ZooKeeper
上传文件到目录:/usr/local/zookeeper(没有zookeeper目录就创建一个,mkdir zookeeper)
赋权限:chmod -R 777 apache-zookeeper-3.8.0-bin.tar.gz
解压文件:tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz
切换目录:cd apache-zookeeper-3.8.0-bin
创建data目录:mkdir data复制样例文件zoo.cfg并指定zoo.cfg为启动配置文件:
cd apache-zookeeper-3.8.0-bin/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg dataDir=/tmp/zookeeper 修改为指定的data目录
/usr/local/zookeeper/apache-zookeeper-3.8.0-bin/data
cd ../
bin/zkServer.sh start conf/zoo.cfg
查看server状态:bin/zkServer.sh status
启动客户端bin/zkCli.sh下面步骤非必须步骤:
# 连接远程的zookeeper server
# bin/zkCli.sh -server ip:port关闭server服务: bin/zkServer.sh stop conf/zoo.cfg
ZooKeeper: Because Coordinating Distributed Systems is a Zoo
命令基本语法 | 功能描述 |
help | 显示所有操作命令 |
ls [-s] [-w] [-R] path | 使用 ls 命令来查看当前 znode 的子节点 [可监听] -w: 监听子节点变化 -s: 节点状态信息(时间戳、版本号、数据大小等) -R: 表示递归的获取 |
create [-s] [-e] [-c] [-t ttl] path [data] [acl] | 创建节点 -s : 创建有序节点。 -e : 创建临时节点。 -c : 创建一个容器节点。 t ttl] : 创建一个TTL节点, -t 时间(单位毫秒)。 data:节点的数据,可选,如果不使用时,节点数据就为null。 acl:访问控制 |
get [-s] [-w] path | 获取节点数据信息 -s: 节点状态信息(时间戳、版本号、数据大小等) -w: 监听节点变化 |
set [-s] [-v version] path data | 设置节点数据 -s:表示节点为顺序节点 -v: 指定版本号 |
getAcl [-s] path | 获取节点的访问控制信息 -s: 节点状态信息(时间戳、版本号、数据大小等) |
setAcl [-s] [-v version] [-R] path acl | 设置节点的访问控制列表 -s:节点状态信息(时间戳、版本号、数据大小等) -v:指定版本号 -R:递归的设置 |
stat [-w] path | 查看节点状态信息 |
delete [-v version] path | 删除某一节点,只能删除无子节点的节点。 -v: 表示节点版本号 |
deleteall path | 递归的删除某一节点及其子节点 |
setquota -n|-b val path | 对节点增加限制 n:表示子节点的最大个数 b:数据值的最大长度,-1表示无限制 |
ls -R /
创建持久化节点
create /test
ls -R /
创建持久化节点赋予数据
create /test2 cainiao
ls -R /
查看数据
get /test
get /test2
修改数据
set /test testData
get /test
删除节点
delete /test
ls -R /
创建子节点
create /test2/sub0
ls -R /test2创建顺序节点
create /seq
create -s /seq/seq-
create -s /seq/seq-
create -s /seq/seq-
ls -R /seq
创建顺序节点赋予数据
create -s /seq/seq- datatest
get /seq/seq-0000000005创建临时节点
create -e /ephemeral ephemeralData
查看临时节点与持久化节点ephemeralOwner不同
get -s /ephemeral
get -s /test2CTRL+C
cd ../usr/local/zookeeper/apache-zookeeper-3.8.0-bin/logs
tail -f zookeeper-root-server-localhost.localdomain2.outbin/zkCli.sh
create -e /ephemeral ephemeralData
ls /
CTRL+C
bin/zkCli.sh
ls /
(30秒以后就看不到这个ephemeral临时节点了)
ls /