什么是zookeeper
开源的分布式、提供协调服务
zookeeper = 文件系统 + 通知机制
服务器开机后,向zookeeper注册信息
客服端向zookeeper获取服务器的信息
服务器
https://zhuanlan.zhihu.com/p/69114539?utm_source=wechat_session
组成
应用场景
统一命名服务:对服务统一命名,如域名
统一配置管理:同步配置文件
将配置信息写入Znode
各个客户端、服务器监听Znode
如果Znode
中的数据被修改,zookeeper就通知各个客户端、服务器
统一集群管理:实时掌握每个节点的状态
可以将节点信息写入zookeeper上的Znode
监听Znode
的实时状态变化
服务器动态上下线
负载均衡:zookeeper记录每台服务器访问数,访问数最少的服务器处理最新的客户端请求
本地安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz -C /opt/module/ # 名字太长了,我改短一点 mv apache-zookeeper-3.6.1-bin zookeeper-3.6.1 # 修改配置文件 cd zookeeper-3.6.1/conf # 修改zoo.sample.cfg mv zoo_sample.cfg zoo.cfg vim zoo.cfg # 修改下面,zkData可以是其他名字 dataDir=/opt/module/zookeeper-3.6.1/zkData # 在zookeeper-3.6.1下创建文件夹 mkdir zkData # 启动zookeeper服务器 bin/zkServer.sh start # 启动客户端 bin/zkCli.sh # 关闭zookeeper服务器 bin/zkServer.sh stop
1 2 3 4 5 6 7 8 9 10 11 12 # tickTime为心跳,2000毫秒=2秒 tickTime=2000 # initLimit为,10X2秒=20秒,初始化通信最大延迟时间 initLimit=10 # 同步:5X2秒=10秒,集群正常工作时,通信最大延迟时间 syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/opt/module/zookeeper-3.6.1/zkData # the port at which the clients will connect clientPort=2181
zookeeper内部原理 选举机制
通常是奇数台机器
zookeeper没有指定Master和Slave,但是会选举出一个leader:先选自己,不行再选别人
节点类型
持久:客户端与服务器断开,节点不删除
短暂:客户端与服务器断开,节点删除
分布式安装
1 2 3 4 5 6 7 8 9 10 11 12 13 # 将刚才在本地配置好的软件发到其他机器上 xsync zookeeper-3.6.1/ # 给服务器编号,在zkData里面创建myid的文件 touch myid vi myid # 在myid里面添加编号,这里我设置为4、5、6 # 现在要配置zoo.cfg,还需要加上: vim zoo.cfg # server.A=B:C:D A为编号、B为ip地址、C为与Leader交换的端口 # D为leader挂了之后重新选举的leader的新端口 server.4=hadoop104:2888:3888 server.5=hadoop105:2888:3888 server.6=hadoop106:2888:3888
shell操作命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # 客户端命令行操作 # 创建两个节点,一定要有数据才能成功 create /sanguo "jinlian" create /sanguo/shuguo "liubei" # 获取信息 [zk: localhost:2181(CONNECTED) 8] get /sanguo/shuguo liubei # 这里的-e是暂时节点 create -e /sanguo/wuguo "zhouyu" # 创建带有序号的节点 [zk: localhost:2181(CONNECTED) 12] create -s /sanguo/weiguo "caocao" Created /sanguo/weiguo0000000002 [zk: localhost:2181(CONNECTED) 13] create -s /sanguo/weiguo "caocao" Created /sanguo/weiguo0000000003 [zk: localhost:2181(CONNECTED) 14] create -s /sanguo/weiguo "caocao" Created /sanguo/weiguo0000000004 [zk: localhost:2181(CONNECTED) 15] create -s /sanguo/weiguo "caocao" Created /sanguo/weiguo0000000005 # 修改节点数据值 set /sanguo/shuguo "diaochan" # 注册监听/sanguo节点数据变化,只生效一次 # 在hadoop106上监听 get /sanguo watch # 在hadoop105上改变数值 WatchedEvent state:SyncConnected type:NodeDataChanged path:/sanguo # 删除 delete /sanguo/banzhang