热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Zookeeper分布式过程协同技术部署及设置

Zookeeper分布式过程协同技术-部署及设置Zookeeper支持单机模式、伪集群模式、集群模式三种部署方式。演示部署环境为CentOS、jdk版本为1.8、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集群信息,集群部署时,客户端端口号、事务端口号、选举端口号都可以保持一致。另外集群部署时需要充分考虑集群机器间的网络情况来制定合理的超时时间设置。

 


推荐阅读
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • Kafka Topic 数据管理与清理策略
    本文探讨了在生产环境中如何有效管理和定期清理Kafka Topic中的数据。介绍了基于时间、日志大小和日志起始偏移量三种清除方式,并重点讲解了基于时间的清除策略及其配置方法。 ... [详细]
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 区块链的兴起:恰逢其时,犹如1996年的互联网
    本文探讨了区块链技术的发展阶段,将其与1996年互联网的兴起进行对比,分析了当前区块链技术的现状及其未来潜力。 ... [详细]
  • 本文深入探讨Java编程语言的关键特性,包括但不限于其简洁性、强大的面向对象能力、跨平台兼容性、安全机制、高效性能及多线程支持等方面。文章旨在为开发者提供全面理解Java特性的指导。 ... [详细]
  • 本文详细介绍了使用ZooKeeper构建高可用集群的方法,包括必要的软件环境准备、配置文件调整及集群启动等关键步骤。通常,一个ZooKeeper集群由奇数个节点组成,以确保Leader选举的有效性。 ... [详细]
author-avatar
mobiledu2502852753
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有