分布式助手Zookeeper(二) - 三劫散仙

2019-03-14 22:52|来源: 网路

散仙在上篇文章介绍了,zookeeper的一系列基础知识,如果,你还不清楚zookeeper的基本架构,或者工作原理,那么,建议看一下散仙的上篇文章。本篇,散仙来介绍下怎么安装部署zookeeper,其实散仙在Hbase的安装部署里,已经介绍过独立的zookeeper的安装部署,本次除了zookeeper的集群安装外,还会额外介绍一下,怎么在zookeeper3.3.0之后的版本里,安装观察者角色(Observer),以便使我们的集群能够获取更好的扩展性,与稳定性。



zookeeper的安装模式也有三种,分别是单机模式,伪分布模式,和完全分布式模式,
本篇,散仙要介绍的是完全分布式模式。


我们需要先下载好zookeeper的安装包,然后解压后,配置zookeeper,修改其config目录下zoo_simple.cfg重命名为zoo.cfg,并在其data目录(自己手动创建)下,新建一个myid文件,server.x后面的x数字一直即可,修改其内容如下:

  
//tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 毫秒时间就会发送一个心跳。  
   tickTime=2000  
//initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。

//当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。
    initLimit=10  
//syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒
    syncLimit=5  
//dataLogDir:日志文件保存的位置
    dataDir=/root/zookeeper/data  
//客户端的端口号  
  clientPort=2181  
      //server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

//如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
    server.1=10.2.143.5:2887:3887  
    server.2=10.2.143.36:2888:3888  
    server.3=10.2.143.37:2889:3889

注意,如上的配置是在3台节点非观察者角色的配置,下面我们来看下,观察者角色的配置内容:

//tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 毫秒时间就会发送一个心跳。    
   tickTime=2000    
//initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。  
  
//当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。  
    initLimit=10    
//syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒  
    syncLimit=5    
//dataLogDir:日志文件保存的位置  
    dataDir=/root/zookeeper/data    
//客户端的端口号    
  clientPort=2181    
      //server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。  
  
//如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

//此处声明表示作为一个观察者角色存在 
peerType=observer
 
    server.1=10.2.143.5:2887:3887    
    server.2=10.2.143.36:2888:3888    
    server.3=10.2.143.37:2889:3889  
//注意观察者角色的末尾,需要拼接上observer
    server.4=10.2.143.38:2886:3886:observer 



通过,以上信息,我们发现,观察者角色的配置还是比较简单的,只在原来的配置中增加了,两处改动,然后我们就可可以启动集群信息,通过查看节点状态,我们可以发现观察者角色的状态为observer,观察者角色,并不会参入投票过程,所以在高并发的情况下,大大的增强了系统的可扩展性和吞吐率。另外需要注意的在启动zookeeper集群的时候,需要把系统的防火墙给关闭,除非你已经对外开放了zookeeper的客户端端口号,否则将有可能导致启动失败。





转自:http://qindongliang.iteye.com/blog/1985145

相关问答

更多
  •   1. 不能重入   2. 没有本地锁,并发性能会比较差,不使用用在并发争锁较多的场景下。本地锁非自旋   3. 未考虑锁等待排序. 这个是redis很难实现的.   可以通过redis的list实现,但缺点是list下每个子节点无超时时间. redis也无法进行模糊查询 key*.   故还是通过zookeeper实现比较好. 但zookeeper 会遇到性能瓶颈,我们线下的就出现了,经常注册不上的情况.   zookeeper原理是临时节点   
  • Mysql本身支持”复制“功能,可以将整个数据库的全部或部分实时同步到另外的服务器上。应用程序通过智能算法,可以同时使用这些数据库,如果其中一个故障,可以做到应用程序继续运行。 这里面的技术也挺多,你搜一下”Mysql 复制“,”mysql 双MASTER",有很多资料的。 ----------------------------------- 呵呵,放松,一切都会好起来的!
  • 1. 利用节点名称的唯一性来实现共享锁 ZooKeeper抽象出来的节点结构是一个和unix文件系统类似的小型的树状的目录结构。ZooKeeper机制规定:同一个目录下只能有一个唯一的文件名。例如:我们在Zookeeper目录/test目录下创建,两个客户端创建一个名为Lock节点,只有一个能够成功。 算法思路: 利用名称唯一性,加锁操作时,只需要所有客户端一起创建/test/Lock节点,只有一个创建成功,成功者获得锁。解锁时,只需删除/test/Lock节点,其余客户端再次进入竞争创建节点,直到所有客户 ...
  • 1. 不能重入   2. 没有本地锁,并发性能会比较差,不使用用在并发争锁较多的场景下。本地锁非自旋   3. 未考虑锁等待排序. 这个是redis很难实现的.   可以通过redis的list实现,但缺点是list下每个子节点无超时时间. redis也无法进行模糊查询 key*.   故还是通过zookeeper实现比较好. 但zookeeper 会遇到性能瓶颈,我们线下的就出现了,经常注册不上的情况.   zookeeper原理是临时节点
  • 当需要获取共享锁是,所有客户端到/shared_lock节点下面创建一个临时顺序节点,/shared_lock/[hostname]-请求类型(W | R)-序号,该节点代编了一个共享锁。 如果是读请求,则创建/shared_lock/192.168.0.1-R-000000000001; 如果是写请求,则创建/shared_lock/192.168.0.1-W-000000000001;
  • 分布式架构是架构设计的基础,也叫集群架构。 主要目的是为了避免服务的单节点和将请求均衡分布给多台机器。
  • 一、DFS为何物? DFS 即微软分布式文件系统的简称,系统管理员可以利用它来有效的整合网络资源,并把这些资源以单一的层次结构呈现给网络用户。管理员利用它可以把资源发布成一 个树形结构,这样大大简化了为用户进行资源配置和对资源管理的工作量。我们可以在不同的机器上调整和移动文件,这不会影响到用户的访问。 二、为什么要使用DES? 1、DFS使用了现有网络中的Share权限,管理员不必进行新的配置 2、通过一个DFS树形结构用户就可以访问多个网络资源,而不用再把远程驱动器映射到本地共享资源中。 3、DFS可以配 ...
  • 分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无复本、数据存于哪个站点以及事务在哪个站点上执行等。 故名思义,分布式 ...
  • 简单的问题复杂化。简单说三层架构只是一种标准。用什么模式开发都是根据当时项目的需求,包括外部环境。业务逻辑上来的。不一定非要用三层或者分布式。要是贯彻三层的概念我现在的项目就用到了9层。另外分布式是为了处理某些方面的压力,使压力分散开。也不是必要的。还是看情况。
  • 是的,服务器a上的一半数据,服务器b上的一半是分布式缓存。 有许多分发数据的方法,尽管某些键的散列似乎是最受欢迎的。 术语服务器和节点通常是可互换的。 节点通常是某些集合的单个单元,通常称为集群。 服务器通常是单个硬件。 在erlang中,您可以在单个服务器上运行erlang运行时的多个实例,因此您将拥有多个erlang节点,但通常您希望每个服务器有一个节点以获得更优化的调度。 (对于非分布式语言和平台,您必须根据需要管理流程。) 如果服务器关闭,并且它是缓存服务器,则数据必须来自其原始源。 EG:缓存通常 ...