本帖最后由 泰克教育 于 2023-2-22 11:11 编辑
ZooKeeper是Apache软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。
ZooKeeper的架构通过冗余服务实现高可用性。Zookeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布订阅、负载均衡、命名服务、分布式协调通知、集群管理、Master选举、分布式锁和分布式队列等功能。
Zookeeper模型图如下: ZooKeeper集群由一组Server节点组成,这一组Server节点中只存在一个Leader的节点,其他节点都为Follower。
启动时选举出leader。
ZooKeeper使用自定义的原子消息协议,保证了整个系统中的节点数据的一致性。
Leader节点在接收到数据变更请求后,先写磁盘再写内存。
所以Zookeeper集群在配置好之后,咱们在启动的时候需要每一个节点都去启动一次,咱们只有几个集群的情况下是可行的,但是集群一旦达到几百上千个,咱们还能单独的去启动Zookeeper集群吗?答案是肯定不可能的,所以这时就需要使用Shell命令一键启动Zookeeper集群了。
具体怎么设置一键启动Zookeeper集群呢,具体操作步骤如下:
设置一键启动Zookeeper 脚本 1、进入目录:cd /usr/local/zookeeper/zookeeper-3.4.6/bin/ 2、编写一键启动配置文件:vim zkStart-all.sh,添加shell脚本如下:
- for host in hadoop slave1 slave2 slave3
- do
- ssh $host "source /etc/profile;nohup /usr/local/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start "
- echo "$host zk is running"
- done
复制代码3、写好后保存,为脚本添加执行权限:chmod 777 zkStart-all.sh
4、进入目录(或任意目录):cd /usr/local/zookeeper/zookeeper-3.4.6/bin/ 5、一键启动:./zkStart-all.sh或者sh zkStart-all.sh(任意目录启动用这个命令) 6、查看状态:jps 7、执行效果如下图:
设置一键停止Zookeeper 脚本 1、进入目录:cd /usr/local/zookeeper/zookeeper-3.4.6/bin/ 2、编写一键启动配置文件:vim zkStop-all.sh,添加Shell脚本如下:
- for host in hadoop slave1 slave2 slave3
- do
- ssh $host "source /etc/profile;/usr/local/zookeeper/zookeeper-3.4.6/bin/zkServer.sh stop"
- echo "$host zk is stopping"
- done
复制代码
3、写好后保存,为脚本添加执行权限:chmod 777 zkStop.sh 4、进入目录(或任意目录):cd /usr/local/zookeeper/zookeeper-3.4.6/bin/ 5、一键启动:./zkStop-all.sh 或者:sh zkStop-all.sh(任意目录关闭用这个命令) 6、查看状态:jps 7、执行效果如下图:
技能拓展
以上两个shell脚本在执行完成后需要查看节点状态,但是每台节点都需要查看则要输入三次jps命令,这个过程也比较麻烦,同时也比较耽误时间,那么我们是否可以用脚本完成jps命令查看节点状态的操作?答案也是肯定的,都可以使用Shell脚本完成节点状态的查看,但是由于jps命令是Java提供的,所以,咱们在编写脚本的时候,需要找到JDK的安装目录编写到脚本里面去,具体Shell脚本命令如下:
- #!/bin/bash
- echo '---------------------查看集群状态---------------'
- for i in hadoop slave1 slave2 slave3#----------------------------->这几个是主机名
- do
- echo ${i} '的节点状态'
- ssh ${i} /usr/local/java/jdk1.8.0_161/bin/jps
- done
复制代码执行效果如下图:
|