zookeeper介绍和搭建

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

zookeeper介绍和搭建

一、zookeeper简介

1、zookeeper概念
ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务它提供了一项基本服务分布式锁服务。分布式应用可以基于它实现更高级的服务实现诸如同步服务、配置维护和集群管理或者命名的服务。

Zookeeper服务自身组成一个集群2n+1个奇数服务允许n个失效集群内一半以上机器可用Zookeeper就可用。

假设 3台机器组成的集群可以有允许一台失效如果有2台失效这个集群就不可用1<1.5一般的搭建zookeeper集群时以奇数台机器来搭建。目的是为了提高容错能允许多损失一台。

2、zookeeper数据结构
ZooKeeper数据模型的结构与Linux文件系统很类似整体上可以看作是一棵树每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的数据每个ZNode都可以通过其路径唯一标识。

二、zookeeper工作机制

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架它负责存储和管理大家都关心的数据然后接受观察者的注册一旦这些数据的状态发生变化Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。也就是说 Zookeeper =文件系统通知机制。

1、zookeeper特点
1Zookeeper一个领导者Leader多个跟随者Follower组成的集群。

2Zookeepe集群中只要有半数以上节点存活Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器。

3全局数据一致每个Server保存一份相同的数据副本Client无论连接到哪个Server数据都是一致的。

4更新请求顺序执行来自同一个Client的更新请求按其发送顺序依次执行即先进先出。

5数据更新原子性一次数据更新要么成功要么失败。

6实时性在一定时间范围内Client能读到最新数据。

2、zookeeper应用场景
提供的服务包括统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。

统一命名服务

在分布式环境下经常需要对应用/服务进行统一命名便于识别。例如IP不容易记住而域名容易记住。

统一配置管理
1分布式环境下配置文件同步非常常见。一般要求一个集群中所有节点的配置信息是一致的比如Kafka集群。对配置文件修改后希望能够快速同步到各个节点上。

2配置管理可交由ZooKeeper实现。可将配置信息写入ZooKeeper上的一个Znode。各个客户端服务器监听这个Znode。一旦 Znode中的数据被修改ZooKeeper将通知各个客户端服务器。

统一集群管理

1分布式环境中实时掌握每个节点的状态是必要的。可根据节点实时状态做出一些调整。

2ZooKeeper可以实现实时监控节点状态变化。可将节点信息写入ZooKeeper上的一个ZNode。监听这个ZNode可获取它的实时状态变化。

服务器动态上下线

客户端能实时洞察到服务器上下线的变化。

软负载均衡

在Zookeeper中记录每台服务器的访问数让访问数最少的服务器去处理最新的客户端请求。

三、zookeeper集群部署

官方下载地址https://archive.apache.org/dist/zookeeper/

3.1 实验准备

 192.168.10.40         zookeeper
 192.168.10.50         zookeeper
 192.168.10.60         zookeeper
 三台虚拟机同时进行
 systemctl stop firewalld 
 setenforce 0
 yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel #安装jdk包
 tar xf apache-zookeeper-3.5.7-bin.tar.gz -C /usr/local/zookeeper-3.5.7   #因为之前做了解压所以直接覆盖了

在这里插入图片描述

3.2 修改配置文件

cd /usr/local/zookeeper-3.5.7/conf/              #切换目录
cp zoo_sample.cfg zoo.cfg              #备份
vim zoo.cfg                                #编辑

添加目录路径
 dataDir=/usr/local/zookeeper-3.5.7/data        
 dataLogDir=/usr/local/zookeeper-3.5.7/logs
添加集群ip 
 server.1=192.168.10.40:3188:3288        
 server.2=192.168.10.50:3188:3288
 server.3=192.168.10.60:3188:3288
 保存退出

请添加图片描述

3.3 创建目录以及拷贝文件

拷贝整个文件到其他二台机子上
scp -r /usr/local/zookeeper-3.5.7/ 192.168.10.50:/usr/local/         
scp -r /usr/local/zookeeper-3.5.7/ 192.168.10.60:/usr/local/
三台机子同时创建目录
mkdir /usr/local/zookeeper-3.5.7/data
mkdir /usr/local/zookeeper-3.5.7/logs

DataDir指定的目录下创建一个 myid 的文件每台都需要创建自己单独的
192.168.10.40
echo 1 > /usr/local/zookeeper-3.5.7/data/myid
192.168.10.50
echo 2 > /usr/local/zookeeper-3.5.7/data/myid
192.168.10.60
echo 3 > /usr/local/zookeeper-3.5.7/data/myid

在这里插入图片描述

3.4 配置Zookeeper启动脚本

vim /etc/init.d/zookeeper

#!/bin/bash
#chkconfig:2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/usr/local/zookeeper-3.5.7'
case $1 in
start)
	echo "---------- zookeeper 启动 ------------"
	$ZK_HOME/bin/zkServer.sh start
;;
stop)
	echo "---------- zookeeper 停止 ------------"
	$ZK_HOME/bin/zkServer.sh stop
;;
restart)
	echo "---------- zookeeper 重启 ------------"
	$ZK_HOME/bin/zkServer.sh restart
;;
status)
	echo "---------- zookeeper 状态 ------------"
	$ZK_HOME/bin/zkServer.sh status
;;
*)
    echo "Usage: $0 {start|stop|restart|status}"
esac

chmod  +x /etc/init.d/zookeeper        # 给脚本加上执行权限
scp -r /etc/init.d/zookeeper   192.168.10.50:/etc/init.d/    #拷贝到其他二台机子上
scp -r /etc/init.d/zookeeper   192.168.10.60:/etc/init.d/    #拷贝到其他二台机子上

chkconfig --add zookeeper
service zookeeper start                    #切记三台机子都配置完脚本再启动

在这里插入图片描述
请添加图片描述

3.5 查看启动状态

三台虚拟机
service  zookeeper status

请添加图片描述
请添加图片描述
请添加图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6