zk安装

tar vxzf zookeeper-3.4.14.tar.gz 
mkdir /opt/msb
mv zookeeper-3.4.14 /opt/msb
cd conf/
cp zoo_sample.cfg  zoo.cfg
vim zoo.cfg
tickTime=2000 心跳毫秒数 服务间心跳为2秒
initLimit=10 flower追随Leader时主节点可以忍耐 tickTime * initLimit 这么长时间 的初始延迟 得到心跳 超过时间丢弃
syncLimit=5 数据同步 当leader 下达数据同步时 tickTime * syncLimit 10秒没有反馈的话 丢弃
dataDir=/tmp/zookeeper zookeeper是基于内存存储的 需要来做持久化 这里的持久化的地址(dataDir=/var/msb/zk)
clientPort=2181 客户端链接zoopkeeper 端口号
#maxClientCnxns=60 最大连接数 允许链接zookeeper最大连接数
在最后一行添加zookeeper集群的配置写入
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
server.4=node04:2888:3888
行数/2+1 过半数
3888 在主宕机后再里面选举leader
选完之后leader会起2888 与其他集群做链接通信
server.id(这个id 过半的id可以当leader)
保存退出
mkdir -p /var/msb/zk
创建存储目录
cd /var/msb/zk/
进入目录
vi myid
1
这里的1 就是server.(id)

cd /opt
去到opt目录 因为msb 目录根本没有 里面的zookeeper也没有所以用scp 直接传整个目录
先去修改hosts文件
vi /etc/hosts
192.168.1.136 node01
192.168.1.137 node02
192.168.1.138 node03
192.168.1.139 node04
然后分发到各个主机
scp /etc/hosts 192.168.1.137:/etc/
scp /etc/hosts 192.168.1.138:/etc/
scp /etc/hosts 192.168.1.139:/etc/

进入opt目录
copy msb目录下的所有文件 到node02 相同目录下
scp -r ./msb/ node02:`pwd` 
scp -r ./msb/ node03:`pwd` 
scp -r ./msb/ node04:`pwd` 

因为只copy 了文件但是存储文件路径没有 需要创建

mkdir -p /var/msb/zk

echo 2 > /var/msb/zk/myid

cat /var/msb/zk/myid 验证myid 是否为2

若服务器较多可以使用scp命令
 scp -r ./msb node03:`pwd`
直接将msb 下的目录直接传输各个节点
这里vim 直接修改myid
---------------------------------------------------------------------------
修改etc/profile 文件 实现快速启动
export JAVA_HOME=/usr/local/jdk1.8.0_161/
export ZOOKEEPER_HOME=/opt/msb/zookeeper-3.4.14            
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH:$ZOOKEEPER_HOME/bin

保存退出后记得
. /etc/profile 或者 source /etc/profile 文件加载刚才的配置

然后将etc/profile 文件发送到各个主机上
scp /etc/profile node02:/etc/
输入zk 提示就会出现了

---------------------------------------------------------------------启动zookeeper-------------------------------------------------------------------------------------------------

/var/msb/zk
这个是存储目录
/opt/msb/zookeeper-3.4.14
一个是安装目录

zkServer.sh{start|start-foreground|stop|restart|status|upgrade|print-cmd}
这是候如果启动不了 看下防火墙是否关闭
/etc/hosts 文件是否冲突 若有其他干扰 就将zoo.cfg改为ip 即可 不要用名称
zkServer.sh start-foreground 启动所有
zkServer.sh status
查看3 节点是否是leader
zkServer.sh status
若节点3 宕机 则节点4 成为leader 大的会成为leader
新开一个节点leader 的窗口
 zkCli.sh

 

 

create [-s] [-e] path data acl
set path data [version]
rmr path
delete path [version]
create /ooxx
这里无法创建 需要在后面跟上数据才能正常创建

 

 这里会显示创建成功

 

 在节点里还可以创建节点

get /ooxx
获取数据
cZxid = 0x200000002
ctime = Mon Apr 18 23:38:41 PDT 2022
mZxid = 0x200000002
mtime = Mon Apr 18 23:38:41 PDT 2022
pZxid = 0x200000003
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1


set /ooxx "hello"
设置数据
cZxid = 0x200000002
ctime = Mon Apr 18 23:38:41 PDT 2022
mZxid = 0x200000004
mtime = Mon Apr 18 23:41:56 PDT 2022
pZxid = 0x200000003
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 1

get /ooxx
hello
cZxid = 0x200000002 顺序执行自增的事物id ox是16进制 低32位是事物递增序列 前32位是leader的计员(是第几个leader我们之前主动down掉了3的leader)
重新选举出的id leader计员和事物id 都会从0开始 增删改 事物id都会+1
ctime = Mon Apr 18 23:38:41 PDT 2022 创建时间
mZxid = 0x200000004 修改的事物id 0x200000003是创建ooxx那个文件
mtime = Mon Apr 18 23:41:56 PDT 2022 修改时间
pZxid = 0x200000003 当前节点下 创建的最后的那个节点事物id号
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 1

这里每个节点只能方1MB大小的数据 不适合存放数据
并且数据是二进制安全的
二进制安全: 客户端推进的是什么二进制数组 里面就怎么传输

[zk: localhost:2181(CONNECTED) 13] get /ooxx/xxoo

cZxid = 0x200000003 这里的事物id 是按照顺序执行的
ctime = Mon Apr 18 23:39:30 PDT 2022
mZxid = 0x200000003
mtime = Mon Apr 18 23:39:30 PDT 2022
pZxid = 0x200000003
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0

[zk: localhost:2181(CONNECTED) 14] set /ooxx/xxoo "321123"
cZxid = 0x200000003
ctime = Mon Apr 18 23:39:30 PDT 2022
mZxid = 0x200000005
mtime = Mon Apr 18 23:55:49 PDT 2022
pZxid = 0x200000003
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

[zk: localhost:2181(CONNECTED) 15] get /ooxx/xxoo "321123"
321123
cZxid = 0x200000003
ctime = Mon Apr 18 23:39:30 PDT 2022
mZxid = 0x200000005
mtime = Mon Apr 18 23:55:49 PDT 2022
pZxid = 0x200000003
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0


[zk: localhost:2181(CONNECTED) 16] get /ooxx
hello
cZxid = 0x200000002
ctime = Mon Apr 18 23:38:41 PDT 2022
mZxid = 0x200000004
mtime = Mon Apr 18 23:41:56 PDT 2022
pZxid = 0x200000003
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 1

create /ooxx ""
create /ooxx/xxoo ""
get /ooxx
cZxid = 0x200000002
mZxid = 0x200000002
pZxid = 0x200000003 这里的子id 是最后创建的xx00
因为穿件ooxx 后再ooxx里面创建了新的xxoo 所以ooxx的子文件指向子修改的文件的事物id mZxid = 0x200000003
set /ooxx "hello"
这里修改了节点ooxx的值
修改的值+1
cZxid = 0x200000002 在原有的id上做修改 修改id 变化
mZxid = 0x200000004
pZxid = 0x200000003

get /ooxx/xxoo
cZxid = 0x200000003 这是新增的事物id
mZxid = 0x200000003
pZxid = 0x200000003

ephemeralOwner = 0x0 临时持有者 没有归属 创建的时候没有设置选项 是持久节点 关闭了Cli后重启还会存在的节点
我们在create 的时候有两个选项 -s -e

 


 -e 是创建一个临时节点

quit

重新退出进入

 

 create -e /xoxo "haha"

[zk: localhost:2181(CONNECTED) 5] get /xoxo
haha
cZxid = 0x200000009
ctime = Tue Apr 19 01:34:43 PDT 2022
mZxid = 0x200000009
mtime = Tue Apr 19 01:34:43 PDT 2022
pZxid = 0x200000009
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x400009a5b6f0001   //这里的Owner 0x400009a5b6f0001  
dataLength = 4
numChildren = 0

 

 

当我们启动另一个节点的zookeeper的cli

zkCli.sh

我们可以get 到之前设置的一些节点信息

这里是node02 查看

[zk: localhost:2181(CONNECTED) 1] get /xoxo
haha
cZxid = 0x200000009
ctime = Tue Apr 19 01:34:43 PDT 2022
mZxid = 0x200000009
mtime = Tue Apr 19 01:34:43 PDT 2022
pZxid = 0x200000009
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x400009a5b6f0001
dataLength = 4
numChildren = 0
[zk: localhost:2181(CONNECTED) 2]

 

 但是这里的会话节点是另一个session

 

我们关闭之前的会话节点node04 

quit

 

 依旧可以在node02上看到之前的节点  但是临时节点消失会话消失  只剩下存储节点   session 所有视图都会统一 

 

 怎么统一?

当我们在node04这里创建出一个节点

[zk: localhost:2181(CONNECTED) 3] get /xoox
cZxid = 0x20000000d
ctime = Tue Apr 19 01:47:14 PDT 2022
mZxid = 0x20000000d
mtime = Tue Apr 19 01:47:14 PDT 2022
pZxid = 0x20000000d
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0

如果我们在另一个node02上创建一个节点  根据事物id的自增性  事物id+1就是下一个节点的事物id

[zk: localhost:2181(CONNECTED) 4] create /oxxo ""
Created /oxxo
[zk: localhost:2181(CONNECTED) 5] get /oxxo

cZxid = 0x20000000e   这里事物id 应该是要+2  应为同步给其他节点也会消耗事物id
ctime = Tue Apr 19 01:49:15 PDT 2022
mZxid = 0x20000000e
mtime = Tue Apr 19 01:49:15 PDT 2022
pZxid = 0x20000000e
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0

当大量访问访问zk一个节点是可能会造成数据的覆盖
[zk: localhost:2181(CONNECTED) 12] create -s /abc/xxx "sada"
Created /abc/xxx0000000000
当其他节点创建和它一样的内容时
[zk: localhost:2181(CONNECTED) 5] create -s /abc/xxx "sada"
Created /abc/xxx0000000001
序号会递增 不会覆盖 分布式情况下的统一命名

rmr /abc/xxx0000000001
如果删除了该节点
在创建相同的节点的话
[zk: localhost:2181(CONNECTED) 9] create -s /abc/xxx "sada"
Created /abc/xxx0000000002
[zk: localhost:2181(CONNECTED) 10] ls /abc                  
[xxx0000000000, xxx0000000002]
[zk: localhost:2181(CONNECTED) 11]
不会创建相同的序号节点
client 代码实现
1统一配置管理 1m数据 2分组管理 path结构
3 统一命名 sequential 4 同步 临时节点---分布式锁 --锁依托一个父节点且具备-s 代表父节点下可以有多把锁---队列式事物的锁
HA 选主
[root@node01 node01]# netstat -natp | egrep '(2888|3888)'
tcp6       0      0 192.168.1.136:3888      :::*                    LISTEN      12992/java          
tcp6       0      0 192.168.1.136:3888      192.168.1.139:54200     ESTABLISHED 12992/java          
tcp6       0      0 192.168.1.136:3888      192.168.1.138:43932     ESTABLISHED 12992/java          
tcp6       0      0 192.168.1.136:3888      192.168.1.137:52918     ESTABLISHED 12992/java          
tcp6       0      0 192.168.1.136:37052     192.168.1.139:2888      ESTABLISHED 12992/java    

这是node01节点 因为它不是leader 只有3888在listen状态
它自己的3888端口被其他节点链接了 node02 node03 node04 会链接node01
且自己还拿随机端口号链接leader 的2888端口
[root@node02 node02]# netstat -natp | egrep '(2888|3888)'
tcp6       0      0 192.168.1.137:3888      :::*                    LISTEN      5271/java           
tcp6       0      0 192.168.1.137:52918     192.168.1.136:3888      ESTABLISHED 5271/java           
tcp6       0      0 192.168.1.137:3888      192.168.1.139:39794     ESTABLISHED 5271/java           
tcp6       0      0 192.168.1.137:57548     192.168.1.139:2888      ESTABLISHED 5271/java           
tcp6       0      0 192.168.1.137:3888      192.168.1.138:44612     ESTABLISHED 5271/java    
这是node02节点 因为它不是leader 3888 开启监听状态
他的3888端口被 node03 和 node04 链接了
且自己拿随机端口链接了 node01和node4的2888端口

[root@node03 node03]# netstat -natp | egrep '(2888|3888)'
tcp6       0      0 192.168.1.138:3888      :::*                    LISTEN      5992/java           
tcp6       0      0 192.168.1.138:44994     192.168.1.139:2888      ESTABLISHED 5992/java           
tcp6       0      0 192.168.1.138:3888      192.168.1.139:48332     ESTABLISHED 5992/java           
tcp6       0      0 192.168.1.138:43932     192.168.1.136:3888      ESTABLISHED 5992/java           
tcp6       0      0 192.168.1.138:44612     192.168.1.137:3888      ESTABLISHED 5992/java         

 

[root@node04 node04]# netstat -natp | egrep '(2888|3888)'
tcp6       0      0 192.168.1.139:2888      :::*                    LISTEN      4762/java           
tcp6       0      0 192.168.1.139:3888      :::*                    LISTEN      4762/java           
tcp6       0      0 192.168.1.139:2888      192.168.1.136:37052     ESTABLISHED 4762/java           
tcp6       0      0 192.168.1.139:54200     192.168.1.136:3888      ESTABLISHED 4762/java           
tcp6       0      0 192.168.1.139:2888      192.168.1.138:44994     ESTABLISHED 4762/java           
tcp6       0      0 192.168.1.139:39794     192.168.1.137:3888      ESTABLISHED 4762/java           
tcp6       0      0 192.168.1.139:2888      192.168.1.137:57548     ESTABLISHED 4762/java           
tcp6       0      0 192.168.1.139:48332     192.168.1.138:3888      ESTABLISHED 4762/java    
3888 选主投票用
2888 leader接受请求

 

posted @ 2022-04-19 19:13  花心大萝卜li  阅读(270)  评论(0)    收藏  举报