zookeeper 3.6.2 集群搭建(docker环境)
一、Zookeeper简介:
1.什么是zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
简单来说:Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目,在集群起协调作用
- 接收观察者(集群中各个节点)的注册
- 负责存储数据和管理数据
- 存储的数据一旦发生变化,负责将这个信息告诉已在Zookeeper注册的观察者
2、zookeeper特点
- Zookeeper: 一个领导者(leader),多个跟随者(Follower)组成的集群(一种主从架构)
- Zookeeper集群中只要半数节点存活,Zookeeper集群就能正常服务(一般来说建议,集群中节点水量为奇数,最少3台)
- 全局数据一致:只用leader节点提供读写服务,其他节点只提供读服务,每个Server保存的的都是leader上的副本,无论连接那一个Server,数据都是一致的
- 更新请求顺序执行:来自同一个Client的更新请求都是按其发送顺序依次执行
- 数据更新原子性:要么都成功,要么都失败
- 实时性:在一定的时间范围内(较短),Client能读到最新的数据
3、应用场景
- 统一命名服务
- 统一配置管理
- 统一集群管理
- 服务器节点动态上下线
- 软负载均衡
二、集群搭建
需要一定的linux基础和Docker基础知识
2.1、环境准备
- docker
- centos 7 可以自己虚拟机,也可使用云服务器
- xshell
2.2、安装docker
Docker安装比较简单,按照官网文档说明即可
官方安装说明各个版本都有
2.3、测试安装成功
输入docker --version
出现如上版本信息即Docker安装成功
2.4、设置镜像加速器
docker提供的镜像需要从外网拉取,速度较慢,可以使用镜像加速器aliyun
、tianghua
、huawei
等都可
以aliyun加速器为例
注册阿里云账号,找的容器镜像服务可免费获取一个加速器地址
2.5、拉取Zookeeper镜像
执行命令将zookeepr的镜像拉取到本地(也可使用自己制作的zookeeper镜像)
docker pull zookeeper:latest
查看本地拉取到的镜像
docker images
创建容器网络通道,在docker中如果创建多个相不关联的集群,可为每个集群创建容器间的网络通道(非必须默认桥接模式)
docker network create -d bridge my-net
2.6、创建zookeeper容器
docker run -d --name zookeeper1 -p 2181:2181 --network=my-net --hostname zookeeper1 zookeeper
docker run -d --name zookeeper2 -p 2182:2181 --network=my-net --hostname zookeeper2 zookeeper
docker run -d --name zookeeper3 -p 2183:2181 --network=my-net --hostname zookeeper3 zookeeper
也可编写docker-compose.yml脚本,通过执行脚本一键搭建
–name: 指定容器名
–hostname: 指定容器主机名
-p: 端口映射
–network:指定容器间的通信网络
-d: 后台运行
如上创建了三个zookeeper容器并运行
端口说明:
-
2181:对cline端提供服务
-
3888:选举leader使用
-
2888:集群内机器通讯使用(Leader监听此端口)
2.7、zookeeper集群配置
2.7.1、查看zookeeper的目录
进入容器zookeeper1中
docker exec -it zookeeper1 /bin/bash
~~
进入根目录
如图:为zookeeper的主要目录(其中conf为配置文件夹,data存放了节点数据信息)
配置集群时,主要配置这两了文件夹中的 zoo.cfg和myid文件
从容器中将文件拷贝到宿主机中进行修改后,再拷贝回去
docker cp zookeeper1:/conf/zoo.cfg zoo.cfg
docker cp zookeeper1:/data/myid myid
2.7.2、修改zoo.cfg
如上配置配置文件,集群中所有节点的配置文件都是相同的所以,将其拷贝到各个节点即可
docker cp zoo.cfg zookeeper1:/conf/zoo.cfg
配置文件配置完成
2.7.3、修改mybi文件
每个节点的mybi是不一样的(默认为1),且要与zoo.cfg中的节点序号对应
即:
zookeepeer1 ---------> 1
zookeepeer2 ---------> 2
zookeepeer3 ---------> 3
echo 2 > mybi
docker myid cp zookeeper2:/data/myid
echo 3 > mybi
docker myid cp zookeeper3:/data/myid
mybi配置完成
2.7.4、重启容器
docker restart zookeeper1
docker restart zookeeper2
docker restart zookeeper3
2.7.5、查看容器IP
docker inspect zookeeper1
依次查看zookeeper1
、zookeeper2
、zookeeper3
则:
zookeeper1 172.18.0.2
zookeeper2 172.18.0.3
zookeeper3 172.18.0.4
2.7.5、查看zookeeper运行状态
echo stat | nc 172.18.0.2 2181
可知集群搭建完成,并选举zookeeper2为leader,zookeeper1、zookeeper3为Follower
接着便可以使用java调用zookeeper api进行后续开发