准备 node01~node04
1、所有虚拟机安装jdk,并设置javahome
3、下载zookeeper zookeeper.apache.org
3、tar xf zookeeper.*.tar.gz
4、mkdir /opt/mashibing
5、mv zookeeper /opt/mashibing
6、vi /etc/profile
export ZOOKEEPER_HOME=/mashibing/zookeeper.*
export PATH= P A T H : PATH: PATH:ZOOKEEPER_HOME/bin
7、cd zookeeper/conf
8、cp zoo.sem*.cfg zoo.cfg
9、vi zoo.cfg
dataDir=配置持久化目录,尽量不要使用默认配置
server.1=node01:2888:3888
10、mkdir -p /var/mashibing/zk
11、echo 1> /var/mashibing/zk/myid
12、cd /opt && scp -r ./mashibing/ node02:pwd
13、node02~node04 创建myid,在dataDir的设置目录下创建
14、启动顺序 1,2,3,4
15、zkServer.sh start-foreground
集群模式zookeeper表面上看上去是一种主从集群,主为leader,从为follower
增删改,只能发生在leader身上,查询可以发生在所有节点
zookeeper有两种运行状态1、可以状态
2、不可用状态
3、不可用状态恢复到可用状态应该越快越好
分层命名与节点的相似
节点和临时节点类似于文件夹,但是与文件夹的不同,实际为节点的,节点既可以放下一个节点,又可以存放数据,只能存放少量数据,大概为1M
节点划分 持久节点 临时节点:create-eclient通过代码可以实现分布式锁,场景:一个线程拿到了临时节点,其他线程获取该线程的信息就可以,不需要想redis一样需要设置过期时间和通过第二个线程刷新过期时间
序列节点:create-s如果锁依托与父节点,且具备-s,代表父节点下可以有多把锁,并且如果后面的锁根据前面的锁才能运行,可以是事务所或者队列锁
zookeeper理论上可以当数据库用,但是不要把zookeeper当数据库
特征/保障顺序一致性:客户端的更新将按发送顺序应用,因为leader只有一个,会一次请求leader
原子性:更新要么成功或要么失败,没有部分结果
统一视图:无论服务器连接到那个服务器,客户端都将看到相同的服务视图
可靠性:一单应用了更新,它将从那时起持续到客户端覆盖更新
及时性:系统的客户视图保证在特定时间范围内是最新的
命令:
ls:查看所有节点
create:创建节点,可以在节点后面跟上数据值
-e:创建一个临时节点,一个客户端创建的时候会创建一个sessionid,而这个临时节点归属于连接的session,且session是会消耗事务id的(因为其他zookeeper也需要看到session的临时节点,所以其他zookeeper在该zookeepersession创建的时候,消耗一个事务id来创建该session的id),当该session消失,那么这个临时节点就会过期
-s:创建一个序列节点,防止同时操作一个节点的值导致覆盖,会在后面添加序列值,该序列值为递增
get:获取节点中的值
set:设置节点中的值
czxid:0x200000002的表示顺序值,16进制,后面表示你是第几个leader
ctime:创建时间
mzxid:修改的id
mtime:修改时间
pzid:当前节点下创建最后那个节点的czxid
ptime:当前节点下创建的下个节点
quit:退出命令行模式
paxos算法e:创建时间
mzxid:修改的id
mtime:修改时间
pzid:当前节点下创建最后那个节点的czxid
ptime:当前节点下创建的下个节点
quit:退出命令行模式
paxos算法


