zookeeper基础知识,和dubbo中的应用

****
**zookeeper主要文档**
****
**1. 简介**
1. zookeeper在开发过程中,用作注册中心,进行分布式数据的交互
2. 分布式应用正在运行的一组系统称为集群,而在集群中运行的每台机器被称为节点。
3. zookeeper的文件系统跟linux一致,根节点是“/”,每一个文件目录都挂在根目录下

****
**2. 安装*
1. 下载zookeeper文件
```
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
```
2. 解压移动
```
mv zookeeper-3.4.11.tar.gz /usr/local/
tar xzvf zookeeper-3.4.11.tar.gz
mv zookeeper-3.4.11.tar.gz zookeeper
```
3. 进行相应的配置,配置文件相关介绍、配置要求详见文档后面
```
##创建数据文件夹
mkdir /usr/local/zookeeper/data
##创建配置文件
cd /usr/local/zookeeper/conf
cp -r zoo_sample.cfg zoo.cfg
##修改配置文件
vim zoo.cfg
```
4. 运行zkServer
```
cd /usr/local/zookeeper/bin
./zkServer.sh start
```
5. 运行zkCli
```
./zkCli.sh
```
6. 其他要说的
1. 推荐搭建伪集群/集群模式
2. 配置文件得进行相应的配置才能进行

****
**3. zkServer的相关命令**
1. 启动
```
./zkServer.sh start
```
2. 关闭
```
./zkServer.sh stop
```
3. 重启
```
./zkServer.sh restart
```
4. 状态
1. 提示为singletone为单机模式
2. 提示为model xxxx为集群模式
3. 提示为Error contacting service. It is probably not running.也为集群模式,可考虑是否因为集群服务器只开启当前一台服务器,或配置文件有集群相关配置
```
./zkServer.sh status
```

****
**4. zkCli的相关命令**
1. ZooKeeper命令行界面(CLI)用于与ZooKeeper集合进行交互以进行开发。它有助于调试和解决不同的选项。
2. 创建znode
```
#在path1位置上创建znode,存储数据
create /path1 123season

#znode有临时节点、持久节点、临时顺序节点、持久顺序节点,默认为持久节点

#持久节点
[zk: localhost:2181(CONNECTED) 0] create /path1 123
Created /path1

#持久顺序节点(自动在节点后面添加10位顺序)
[zk: localhost:2181(CONNECTED) 1] create -s /path2 123
Created /path20000000002

#临时节点(生命随着zkCli的关闭而消失)
[zk: localhost:2181(CONNECTED) 4] create -e /path1/ee 123
Created /path1/ee

#临时顺序节点
[zk: localhost:2181(CONNECTED) 5] create -e -s /path1/es 123
Created /path1/es0000000002
```
3. 获取数据
```
[zk: localhost:2181(CONNECTED) 2] get /path1
123
cZxid = 0x100000017
ctime = Tue Mar 27 14:07:44 CST 2018
mZxid = 0x100000017
mtime = Tue Mar 27 14:07:44 CST 2018
pZxid = 0x100000017
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x100002554a10007
dataLength = 3
numChildren = 0
```
4. 监视znode的变化
```
#只需要在get命令后加上任意字符,即可执行监视操作
#注意监视操作只能执行一次,发生改动,监视完成
[zk: localhost:2181(CONNECTED) 1] get /path1 123
123
cZxid = 0x100000009
ctime = Tue Mar 27 14:00:59 CST 2018
mZxid = 0x100000009
mtime = Tue Mar 27 14:00:59 CST 2018
pZxid = 0x100000014
cversion = 6
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 2
[zk: localhost:2181(CONNECTED) 2]
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/path1
```
5. 设置数据
```
[zk: localhost:2181(CONNECTED) 3] set /path1 345
cZxid = 0x100000009
ctime = Tue Mar 27 14:00:59 CST 2018
mZxid = 0x10000001e
mtime = Tue Mar 27 14:13:11 CST 2018
pZxid = 0x100000014
cversion = 6
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 2
```
6. 创建znode的子节点
```
#与之前的创建节点一样,只要节点不存在,即可创建成功
[zk: localhost:2181(CONNECTED) 4] create -e /path1/ee 123
Created /path1/ee
```
7. 列出znode的子节点
```
#ls列出子节点
[zk: localhost:2181(CONNECTED) 4] ls /path1
[e, es]
#get获取该节点数据
[zk: localhost:2181(CONNECTED) 5] get /path1
345

```
8. 检查状态
```
[zk: localhost:2181(CONNECTED) 4] ls /path
[001, 002]

[zk: localhost:2181(CONNECTED) 2] stat /path
cZxid = 0x100000023
ctime = Tue Mar 27 14:24:55 CST 2018
mZxid = 0x100000023
mtime = Tue Mar 27 14:24:55 CST 2018
pZxid = 0x100000025
cversion = 2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 2

[zk: localhost:2181(CONNECTED) 5] stat /path/001
cZxid = 0x100000024
ctime = Tue Mar 27 14:25:20 CST 2018
mZxid = 0x100000024
mtime = Tue Mar 27 14:25:20 CST 2018
pZxid = 0x100000024
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
```
9. 移除/删除znode
```
#若有子节点,一并递归删除
[zk: localhost:2181(CONNECTED) 7] rmr /path1/e
#只能删除该节点数据,如果有子节点,则不能操作
[zk: localhost:2181(CONNECTED) 8] delete /path1
Node not empty: /path1
```
```
[zk: localhost:2181(CONNECTED) 12] create /path 000
Created /path
[zk: localhost:2181(CONNECTED) 13] create /path/001 001
Created /path/001
[zk: localhost:2181(CONNECTED) 14] create /path/002 002
Created /path/002
[zk: localhost:2181(CONNECTED) 16] ls /path
[001, 002]
[zk: localhost:2181(CONNECTED) 17] get /path
000
```

****
**5. 配置文件相关解释**
```
##心跳时间,为毫秒,zookeeper服务器之间进行判断是否live的设定
tickTime=2000

## 参数设定了允许所有跟随者与领导者进行连接并同步的时间,如果在设定的时间段内,半数以上的跟随者未能完成同步,领导者便会宣布放弃领导地位,进行另一次的领导选举。如果zk集群环境数量确实很大,同步数据的时间会变长,因此这种情况下可以适当调大该参数。默认为10
initLimit=10

## 参数设定了允许一个跟随者与一个领导者进行同步的时间,如果在设定的时间段内,跟随者未完成同步,它将会被集群丢弃。所有关联到这个跟随者的客户端将连接到另外一个跟随着。
syncLimit=5

#数据存放地址
dataDir=/usr/local/zookeeper/zookeeper-01/data

#客户端连接Server端口号(监听client连接的端口号)
clientPort=2181

#集群之间的配置
#server.No=IP:PortA:PortB
#No:是一个数字, 表示这是第几号server
#IP:是server所在的IP地址
#PortA:服务器与leader进行数据交换的监听端口
#PortB:leader选举监听端口
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
```


****
**6. 单机模式、伪集群模式、集群模式**
1. 单机模式只需要配置tickTime、dataDir、clientPort就行了,如果配置多了,有可能被认为是集群模式
2. 伪集群模式跟集群模式只是一个服务器跟多台服务器的区别
3. 集群基本配置
1. 配置2个容忍时间
2. 配置集群列表
3. 在dataDir目录下创建
```
cd /usr/local/zookeeper/zookeeper-01/data
vi myid
#在文件中写入配置文件中该服务器的No数字
```
4. 伪集群配置
1. 因为ip是同一个,所以3个端口号都不能一样

猜你喜欢

转载自www.cnblogs.com/season1992/p/10062209.html
今日推荐