Zookeeper分布式过程协同技术 - 部署及设置
Zookeeper分布式过程协同技术 - 部署及设置
Zookeeper支持单机模式、伪集群模式、集群模式三种部署方式。演示部署环境为CentOS、jdk版本为1.8、Zookeeper版本为3.4.9。
单机模式
单机模式适合入门学习使用,只需要一台机器就可以轻松搭建Zookeeper服务用于学习和测试。
1. 进入官网下载Zookeeper的JAR包,下载地址:https://zookeeper.apache.org/releases.html。
2. 解压压缩包,命令:tar -zxvf zookeeper-3.4.9.tar.gz,解压后目录格式如下。

3. 进入conf目录,复制zoo_sample.cfg文件命名为zoo.cfg。这里可以直接使用默认的参数,也可以根据自己的需要修改。
命令:cp zoo_sample.cfg zoo.cfg
主要配置参数说明
- clientPort
客户端连接的服务器所监听的TCP端口,默认情况下,服务器会监听所有的网络连接的这个端口,除非设置了clientPortAddress参数。客户端口可以设置为任何值,不同的服务器可以设置不同的端口,默认端口号为2181。
- tickTime
tickTime的时长单位为毫秒,Zookeeper集群中使用的超时时间单位通过tickTime指定。tickTime设置了超时时间的下限值,因为最小的超时时间为一个tick时间,客户端最小会话超时时间为2个tick时间。
tickTime的默认值是3000毫秒,更低的tickTime值可以更快地发现超时问题,但也导致更高的网络流量和更高的CPU使用率。
- dataDir
dataDir用于配置内存数据库保存的模糊快照目录,如果某个服务器为集群中的一台,id文件也保存在该目录下。
- dataLogDir
用于配置事务日志的保存目录。服务端在确认一个事务前必须将数据同步到存储中,如果写入磁盘过于忙碌会影响到写入的吞吐能力。因此,比较好的方案是使用专用的日志存储设备,将dataLogDir目录配置指向该设备。
- maxClientCnxns
允许每个IP地址发起socket连接的最大数量。Zookeeper通过流量控制和限制值来避免过载情况的发生。当某个IP地址的客户端建立的连接数大于此值时,服务器会拒绝该IP地址新的连接。
- initLimit
对于追随者最初连接到群首时的超时时间,单位为tick(tickTime)值的倍数。
当某个追随者最初与群首建立连接时,它们之间会传输相当多的数据,尤其是追随者落后整体很多时。配置initLimit参数值取决于群首与追随者之间的网络传输速度以及传输数据量的大小。
但是如果设置值过高,在首次连接到故障的服务器就会消耗更多的时间,同时还会消耗更多的恢复时间。因此在实际部署时,最好进行集群间的网络基准测试来测试出你所期望的时间。
- syncLimit
对于追随者与群首进行sync操作时的超时值,单位为tick(tickTime)值的倍数。
追随者总是会稍落后于群首,如果群首与追随者无法进行sync操作,而且超过了syncLimit的tick时间,就会放弃该追随者。
- leaderServes
配置值为“yes”或“no”标志,指示群首服务器是否为客户端提供服务。担任群首的服务器需要做很多工作,它需要与所有的追随者进行通信并会执行所有的变更操作,这意味着群首的负载会比追随者高很多,如果群首过载,整个系统都有可能受到影响。
4. 进入bin目录,可以看到很多sh脚本文件,通过zkServer.sh来启动zookeeper。

操作命令:
启动命令:.zkServer.sh start
停止命令:.zkServer.sh stop
重启命令:.zkServer.sh restart
状态查看命令:.zkServer.sh status
启动zookeeper服务后,通过status命令可以看到当前服务状态、使用的配置文件、运行模式。

这样Zookeeper的单机部署模式就已经初步完成了。如果需要修改JVM配置,可以修改zkServver.sh文件中的配置,在如下位置加入你需要的参数。

伪集群部署
伪集群部署指在一台机器上部署多个Zookeeper服务。
1. 首先将之前配置好的Zookeeper服务目录另外复制两份,命名为zookeeper-2和zookeeper-3。

2. 然后分别修改三份的zoo.cfg配置项,添加配置 server.x=[hostname]:n:n[:observer],示例如下。
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
Zookeeper服务器需要知道它们如何通信,配置文件中该形式的配置项就指定了服务器x的配置信息,其实x为服务器的ID值(一个整数)。当一个服务器启动后,就会读取data目录下myid文件中的值,之后服务器就会使用这个值作为查找server.x项,通过该项中的数据配置服务器自己。如果需要连接到另外一个服务器y,就会使用server.y项配置信息来与这个服务器进行通信。
hostname为服务器在网络中的名称(ip或者主机名),同时后面跟着两个端口号,第一个端口号用于事务的发送,第二个端口号用于群首选举。如果最后一个字段标记了observer属性(选填),服务器就会进入观察者模式。
三份配置文件的myid和两个配置端口号以及clientPort不可以重复,因为是在一台机器上部署,生产环境集群部署时可以忽略。最终的配置清单如下:

3. 分别添加myid文件,在data目录下添加myid文件。
echo '1' > data/myid
4. 分别启动三个Zookeeper服务,启动成功后通过status命令可以查看服务的状态。可以看到目前集群里有一台leader和两台follower。

集群部署
生产环境的集群部署步骤和伪集群部署并无太多差异,同样是修改zoo.cfg配置文件并且添加Zookeeper集群信息,集群部署时,客户端端口号、事务端口号、选举端口号都可以保持一致。另外集群部署时需要充分考虑集群机器间的网络情况来制定合理的超时时间设置。
Zookeeper分布式过程协同技术 - 部署及设置的更多相关文章
- Zookeeper分布式过程协同技术 - 概念及基础
Zookeeper分布式过程协同技术 - 概念及基础 Zookeeper是什么? Zookeeper是一种分布式过程协同技术,其所提供的客户端API功能强大,其中包括: 保障强一致性.有序性和持久性. ...
- Zookeeper分布式过程协同技术 - 群首选举
Zookeeper分布式过程协同技术 - 群首选举 群首概念 群首为集群中服务器选择出来的一个服务器,并被集群认可.设置群首目的在与对客户端所发起的状态变更请求进行排序,包括:create.setDa ...
- ZooKeeper分布式过程协同技术详解1——ZooKeeper的概念和基础
简介 分布式系统和应用,不仅能提供更强的计算能力,还能为我们提供更好的容灾性和扩展性. ZooKeeper是Google的Chubby项目的开源实现,它曾经作为Hadoop的子项目,在大数据领域得到广 ...
- ZooKeeper分布式过程协同技术详解2——了解ZooKeeper
这个服务如何实现这些协作方面的原语? ZooKeeper基础
- HBase 1.2.6 完全分布式集群安装部署详细过程
Apache HBase 是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,是NoSQL数据库,基于Google Bigtable思想的开源实现,可在廉价的PC Server上搭建大规模结构化存 ...
- Linux Centos7 环境搭建Docker部署Zookeeper分布式集群服务实战
Zookeeper完全分布式集群服务 准备好3台服务器: [x]A-> centos-helios:192.168.19.1 [x]B-> centos-hestia:192.168.19 ...
- 《从Paxos到ZooKeeper 分布式一致性原理与实践》读书笔记
一.分布式架构 1.分布式特点 分布性 对等性.分布式系统中的所有计算机节点都是对等的 并发性.多个节点并发的操作一些共享的资源 缺乏全局时钟.节点之间通过消息传递进行通信和协调,因为缺乏全局时钟,很 ...
- 从游击队到正规军(三):基于Go的马蜂窝旅游网分布式IM系统技术实践
本文由马蜂窝技术团队电商交易基础平台研发工程师"Anti Walker"原创分享. 一.引言 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商. 从商品复杂性来看,一个 ...
- Zookeeper——分布式一致性协议及Zookeeper Leader选举原理
文章目录 一.引言 二.从ACID到CAP/BASE 三.分布式一致性协议 1. 2PC和3PC 2PC 发起事务请求 事务提交/回滚 3PC canCommit preCommit doCommit ...
随机推荐
- 《学习scrapy框架爬小说》的进一步完善
一.完善目标: 1.为方便使用,把小说拼音或英文名,小说输出中文名,第一章节url地址变量化,修改这些参数即可爬取不同的小说. 2.修改settings.py设置文件,配置为记录debug的log信息 ...
- Postman+Newman+Git+Jenkins接口自动化测试
一.Postman 1.创建Collection,在Collection中创建接口请求,如下图所示. 2.编写接口对应的断言Test和Pre-request Script,如下图所示. 3.配置接口 ...
- Java实现 LeetCode 786 第 K 个最小的素数分数(大小堆)
786. 第 K 个最小的素数分数 一个已排序好的表 A,其包含 1 和其他一些素数. 当列表中的每一个 p<q 时,我们可以构造一个分数 p/q . 那么第 k 个最小的分数是多少呢? 以整数 ...
- Java实现蓝桥杯VIP算法训练 小生物的逃逸
试题 算法训练 小生物的逃逸 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 空间中有n个球,这些球不相交也不相切.有m个可以视为质点的小生物,可能在某些球内,也可能在所有球之外,但 ...
- java实现第七届蓝桥杯有奖竞猜
有奖竞猜 题目描述 小明很喜欢猜谜语. 最近,他被邀请参加了X星球的猜谜活动. 每位选手开始的时候都被发给777个电子币. 规则是:猜对了,手里的电子币数目翻倍, 猜错了,扣除555个电子币, 扣完为 ...
- Pycharm添加Python文件模板
#!/usr/bin/env python# -*- encoding: UTF-8 -*-'''=================================================@P ...
- 如何通过IAM打造零信任安全架构
万物互联时代来临,面对越来越严峻的企业网络安全及复杂的(如微服务,容器编排和云计算)开发.生产环境,企业 IT 急需一套全新的身份和访问控制管理方案. 为了满足企业需求,更好的服务企业用户,青云Qin ...
- protected关键字对父子成员变量的影响
include<iostream> #include<string> using namespace std; class parent{ protected: int mv; ...
- 如何从Debian 9 Stretch升级到Debian10 Buster
Let's first fully upgrade our current Debian Stretch system: # apt-get update # apt-get upgrade # ap ...
- Qt自动生成.rc文件并配置对应属性 程序图标 版本 描述等
Qt项目配置文件pro里需要如下配置,进行qmake,build后会自动生成.rc文件,并将对应的信息写入文件中 VERSION = 1.0.0.1 RC_ICONS = "http.ico ...