zookeeper 单机. 集群环境搭建
zookeeper分布式系统中面临的很多问题, 如分布式锁,统一的命名服务,配置中心,集群的管理Leader的选举等
环境准备
分布式系统中各个节点之间通信,Zookeeper保证了这个过程中 数据的唯一性,安全可靠
- 修改配置文件
将/conf/zoo_sample.cfg 修改成 zoo.cfg
配置文件解读
# zookeeper 服务器和客户端之间维持心跳的时间间隔,即每隔ticktime发送一个心跳包,单位是毫秒
# zookeeper 中session过期的时间是 ticktime*2
tickTime=2000
# Leader 允许Follower在initLimit时间内完成从Leader身上同步全部数据的工作, 随机集群的不断扩大,Follower从Leader上同步数据的时间就会变成,此时有必要,默认是0
initLimit=10
# Leader会和集群中的其他机器进行通信,在syncLimit时间内,都没有从Follower上获取返回数据,就认为这个节点挂了
syncLimit=5
# 存储快照文件的目录,默认情况下事务日志也在这里了,下面单独配置,因为因为日志的写性能影响zookeeper的性能
dataDir=E:\\zookeeper\\zookeeper-3.4.14\\data
dataLogDir=E:\\zookeeper\\zookeeper-3.4.14\\log
# the port at which the clients will connect
# 客户端连接的端口
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
- 启动
启动的脚本在 /bin/目录下
linux启动 ./zkCli.sh -server localhost:2181
启动成功,进入客户端控制台
# 默认的节点叫zookeeper
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
# 创建一个节点
[zk: localhost:2181(CONNECTED) 11] create /changwu1 "num1"
Created /changwu1
# 重新查看
[zk: localhost:2181(CONNECTED) 14] ls /
[zookeeper, changwu1]
# 获取节点的内容
[zk: localhost:2181(CONNECTED) 17] get /changwu1
num1
cZxid = 0x2
ctime = Mon Sep 16 15:56:27 CST 2019
mZxid = 0x2
mtime = Mon Sep 16 15:56:27 CST 2019
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
# 退出
quit
# 删除一个节点
[zk: localhost:2181(CONNECTED) 32] delete /changwu1
[zk: localhost:2181(CONNECTED) 33] ls /
[zookeeper]
# 递归删除节点
rmr /path1/path2
这个path1 和 path2 其实是两个节点
# 修改节点数据
set /path "value"
# 节点的状态
[zk: localhost:2181(CONNECTED) 50] stat /z1
cZxid = 0x5
ctime = Mon Sep 16 16:04:35 CST 2019
mZxid = 0x7
mtime = Mon Sep 16 16:06:31 CST 2019
pZxid = 0x6
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 1
# 创建永久有序节点
create -s /path
创建节点的形式,和我们mkdir,创建一个目录结构是相似的
集群搭建
- 将zoo.cfg复制三份,并修改配置文件

第二个端口2887,用来同步Leader 和 Follower之间的数据, 第三个端口选举新的Leader使用
- 在tmp目录创建六个目录 分别是 zoo_data_1-3 zoo_logs_1-3
- 创建myid文件
[root@139 tmp]# echo 1 > zoo_data_1/myid
[root@139 tmp]# echo 2 > zoo_data_2/myid
[root@139 tmp]# echo 3 > zoo_data_3/myid
启动集群服务端
[root@139 bin]# ./zkServer.sh start ../conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo1.cfg
Starting zookeeper ... STARTED
[root@139 bin]# ./zkServer.sh start ../conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo2.cfg
Starting zookeeper ... STARTED
[root@139 bin]# ./zkServer.sh start ../conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo3.cfg
Starting zookeeper ... STARTED
分别查看各个节点的状态
[root@139 bin]# ./zkServer.sh status ../conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo3.cfg
Mode: follower
[root@139 bin]# ./zkServer.sh status ../conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo1.cfg
Mode: leader
[root@139 bin]# ./zkServer.sh status ../conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo2.cfg
Mode: follower
连接客户端
./zkCli -server localhost:服务端的端口号
zkCli.sh -server localhost:2181
zkCli.sh -server localhost:2182
zkCli.sh -server localhost:2183
添加观察者
- 和前三个一样,在tmp目录创建哨兵使用的目录 分别是 zoo_data_4 zoo_logs_4
- 在zoo_data_4目录下创建它myid文件,写入4
- 更改前三个节点的配置文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zoo_data_1
dataLogDir=/tmp/zoo_logs_1
clientPort=2181
# 第一个端用于Leader和Leanner之间同步, 第二个端口,用户选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
server.4=localhost:2890:3890:observer
- 添加观察者的配置文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zoo_data_4
dataLogDir=/tmp/zoo_logs_4
# 观察者的配置
peerType=observer
clientPort=2184
# 第一个端用于Leader和Leanner之间同步, 第二个端口,用户选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
server.4=localhost:2890:3890:observer
集群中的角色
Leader
发起投票和决议,已经更新最终状态
Follower
接收处理客户端的请求,参与Leader发起的决议
Observer
接受客户端的连接,将请求转发给Leader字节,但是它不参加投票,而仅仅同步Leader的状态,它是zookeeper拓展的方式
为什么会添加Observer呢? 这和zookeeper的工作方式息息相关:
一个zookeeper集群由多个Server组成,每一个Server都可以去处理多个client的请求, 如果是读请求,用当前的Server的本地数据库分本直接相应,但是,如果请求是改变zookeeper状态的写请求,就变得麻烦起来, zookeeper的leader节点会发起投票这个机制就是zab协议,超过半数的节点同意时,才会把这个操作加载到内存中,并对client进行回复
在这个过程中,zookeeper担任两个职能,一方面接受客户端的连接,另一方面又得去发起投票决议, 这两个功能限制了zookeeper的扩展想支持更多的客户端连接,就得添加server,但是server越来越多每次发起投票就变的沉重,于是Observer应运而生
Observer,不会参加投票,在其他节点处于投票阶段时,Observer接收client的连接,把连接转发的leader,而且,它还会收到投票的处理结果,保证自己和其他机器是数据一致性,从而大大提高系统的吞吐量
Learner
和Leader一起同步状态的节点的统称,Observer和Follower统称为Learner
Zookeeper的CPA
CP: 当集群中的节点仅仅剩下Leader Follower时, Leader挂了,就得重新选举,选举的过程中系统不可用
AP: Leader Follower Observer ,这三者组成的就群,实现了AP, 当Leader挂了,同样进行选举, 但是Observer可以继续接受client的请求,只不过Observer中的数据可能不是最新的数据
zookeeper 单机. 集群环境搭建的更多相关文章
- ZooKeeper伪集群环境搭建
1.从官网下载程序包. 2.解压. [dev@localhost software]$ tar xzvf zookeeper-3.4.6.tar.gz 3.进入zookeeper文件夹后创建data文 ...
- 【Zookeeper】集群环境搭建
一.概述 1.1 Zookeeper的角色 1.2 Zookeeper的读写机制 1.3 Zookeeper的保证 1.4 Zookeeper节点数据操作流程 二.Zookeeper 集群环境搭建 2 ...
- Zookeeper的单机&集群环境搭建
单机环境的安装 首先下载ZK的二进制安装包:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/ 将安装包上传到Linux上: 进行解 ...
- Hadoop+HBase+ZooKeeper分布式集群环境搭建
一.环境说明 集群环境至少需要3个节点(也就是3台服务器设备):1个Master,2个Slave,节点之间局域网连接,可以相互ping通,下面举例说明,配置节点IP分配如下: Hostname IP ...
- zookeeper集群环境搭建详细图文教程
zookeeper集群环境搭建详细图文教程 zhoubang @ 2018-01-02 [文档大纲] 友情介绍 软件环境 注意点 环境安装 1. 新建用于存储安装包以及软件安装的目录 2. 下载安装z ...
- 【Hadoop离线基础总结】zookeeper的介绍以及集群环境搭建、网络编程和RPC的简单了解
ZooKeeper的介绍以及集群环境搭建.网络编程和RPC的简单了解 ZooKeeper介绍 概述 ZooKeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题.例如 ...
- ZooKeeper 系列(二)—— Zookeeper单机环境和集群环境搭建
一.单机环境搭建 1.1 下载 1.2 解压 1.3 配置环境变量 1.4 修改配置 1.5 启动 1. ...
- ZooKeeper —— 单机环境和集群环境搭建
一.单机环境搭建 1.1 下载 下载对应版本Zookeeper,这里我下载的版本3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # w ...
- ZooKeeper学习之路(二)—— Zookeeper单机环境和集群环境搭建
一.单机环境搭建 1.1 下载 下载对应版本Zookeeper,这里我下载的版本3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # w ...
随机推荐
- Myeclipse8.5上基于JAX-WS开发WebService
1.JAX-WS介绍 JAX-WS规范是一组XML web services的JAVA API. 2.开发步骤 基于JAX-WS的WebService开发步骤如下: 2.1 新建一个Web Servi ...
- 轻量级移动端类库,大小20多k,支持多指触摸。
/* * 移动端 公共类库 * 作者:hqs */ (function(global, factory) { // cmd commonjs if (typeof module === "o ...
- 通过注解实现通用导出Excel
Javaweb开发中数据的导入导出很常见,每次我们都需要写很多代码,所以我就在想能不能写一些通用的方法,之前已经在网上 整理过一些通用的方法,最近在网上看到一位牛人封装的更加简介,自己拿过来整理了一下 ...
- js拖拽上传图片
有时候,在开发中,需要遇到拖拽上传图片的需求,即从磁盘选中一张或多张图片,然后按着鼠标把图片拖动到页面上指定的区域,实现图片的上传. 1.后端上传图片的接口 我是之前用vue写一个简单的后台系统的时候 ...
- Cocos Creator经典游戏制作之:信使(The Messenger)
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- 天天都用消息队列,却不知道为啥要用MQ,这就有点尴尬了
1.为什么要使用消息队列? 分析:一个用消息队列的人,不知道为啥用,有点尴尬.没有复习这点,很容易被问蒙,然后就开始胡扯了. 回答:这个问题,咱只答三个最主要的应用场景(不可否认还有其他的,但是只答三 ...
- nginx之gzip压缩提升网站速度
目录: 为啥使用gzip压缩 nginx使用gzip gzip的常用配置参数 nginx配置gzip 注意 为啥使用gzip压缩 开启nginx的gzip压缩,网页中的js,css等静态资源的大小会大 ...
- 激活Cisco路由器和交换机的right-to-use
一.确认当前正在使用license版本 show license #路由器2911测试可行 show license summary #交换机C4503测试可行 show version # ...
- Windows Server 2008磁盘管理
下面学习一下磁盘管理,基本磁盘 分区 空间只能是同一块磁盘的空间,动态磁盘 卷 空间可以是多块硬盘上的空间,怎么创建 RAID-0 条带卷 读写快 无容错 适合存放不太重要的数据 ,RAID-1 ...
- 轻松pick移动开发第二篇,rem布局
一.为什么要使用rem布局 前面我写了flex布局的优点,分配伸缩盒容器中子盒子占的份数及排列方式,使其不受屏幕缩放的影响,使布局变得简单.然而,在有些时候,不可避免要给盒子设置高度的值,怎么让高度也 ...