zookeeper原理及搭建

zookeeper

? zookeeper 是什么?

– ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务

? ZooKeeper能干什么哪?

– ZooKeeper是用来保证数据在集群间的事务性一致

? zookeeper 应用场景

– 集群分布式锁

– 集群统一命名服务

– 分布式协调服务

? zookeeper 角色与特性

– Leader:

– 接受所有Follower的提案请求并统一协调发起提案的投票,负责与所有的Follower进行内部的数据交换

– Follower:

– 直接为客户端服务并参与提案的投票,同时与Leader进行数据交换

– Observer:

– 直接为客户端服务但并不参与提案的投票,同时也与Leader进行数据交换

? zookeeper 角色与选举

– 服务在启动的时候是没有角色的 (LOOKING)

– 角色是通过选举产生的

– 选举产生一个 leader,剩下的是 follower

– 选丼 leader 原则:

– 集群中超过半数机器投票选择leader.

– 假如集群中拥有n台服务器,那么leader必须得到n/2+1台服务器投票

? zookeeper 角色与选举

– 如果 leader 死亡,从新选举 leader

– 如果死亡的机器数量达到一半,集群挂起

– 如果无法得到足够的投票数量,就重新发起投票,如果参与投票的机器不足 n/2+1 集群停止工作

– 如果 follower 死亡过多,剩余机器不足 n/2+1 集群也会停止工作

– observer 不计算在投票总设备数量里面

? zookeeper 可伸缩扩展性原理与设计

– leader 所有写相关操作

– follower 读操作不响应leader提议

– 在Observer出现以前,ZooKeeper的伸缩性由Follower来实现,我们可以通过添加Follower节点的

数量来保证ZooKeeper服务的读性能。但是随着Follower节点数量的增加,ZooKeeper服务的写性

能受到了影响。为什么会出现这种情况?在此,我们需要首先了解一下这个"ZK服务"是如何工作的。

? zookeeper 可伸缩扩展性原理与设计

– 客户端提交一个请求,若是读请求,则由每台Server的本地副本数据库直接响应。若是写请求,

需要通过一致性协议(Zab)来处理

– Zab协议规定:来自Client的所有写请求,都要转发给ZK服务中唯一的Leader,由Leader根据该

请求发起一个Proposal。然后,其他的Server对该Proposal进行Vote。之后,Leader对Vote进行收集,

当Vote数量过半时Leader会向所有的Server发送一个通知消息。最后,当Client所连接的Server收到

该消息时,会把该操作更新到内存中并对Client的写请求做出回应

– ZooKeeper 服务器在上述协议中实际扮演了两个职能。它们一方面从客户端接受连接不操作请求,

另一方面对操作结果进行投票。这两个职能在 ZooKeeper集群扩展的时候彼此制约

– 从Zab协议对写请求的处理过程中我们可以发现,增加follower的数量,则增加了对协议中投票过程的压力。

因为Leader节点必须等待集群中过半Server响应投票,于是节点的增加使得部分计算机运行较慢,从而拖慢

整个投票过程的可能性也随之提高,随着集群变大,写操作也会随之下降

– 所以,我们不得不,在增加Client数量的期望和我们希望保持较好吞吐性能的期望间进行权衡。

要打破这一耦合关系,我们引入了不参与投票的服务器,称为Observer。 Observer可以接受客户端

的连接,并将写请求转发给Leader节点。但是,Leader节点不会要求 Observer参加投票。相反,

Observer不参与投票过程,仅仅在上述第3歩那样,和其他服务节点一起得到投票结果

– Observer的扩展,给 ZooKeeper 的可伸缩性带来了全新的景象。我们现在可以加入很多 Observer 节点,

而无须担心严重影响写吞吐量。但他并非是无懈可击的,因为协议中的通知阶段,仍然与服务器的数量呈

线性关系。但是,这里的串行开销非常低。因此,我们可以认为在通知服务器阶段的开销不会成为瓶颈

– Observer提升读性能的可伸缩性

– Observer提供了广域网能力

zookeeper 工作模式

zookeeper 安装

1 、配置 /etc/hosts ,所有集群主机可以相互 ping 通

2、安装java 环境

yum  -y  install  java-1.8.0-openjdk-devel

3、 zookeeper 解压拷贝到 /usr/local/zookeeper

tar  -xf  zookeeper-3.4.10.tar.gz -C .

mv  zookeeper-3.4.10   /usr/local/zookeeper

4、配置文件改名,并在最后添加配置

mv zoo_sample.cfg  zoo.cfg

vim     zoo.cfg      最后添加配置

server.1=node1:2888:3888

server.2=node2:2888:3888

server.3=node3:2888:3888

server.4=nn01:2888:3888:observer

5、拷贝zoo.cfg 到集群其他节点

for  i  in  {11..13} ;do scp  /usr/local/zookeeper/conf/zoo.cfg  192.168.1.$i:/usr/local/zookeeper/conf/

6、 拷贝 /usr/local/zookeeper 到其他集群主机

for  i  in  {11..13} ;do scp  -r  /usr/local/zookeeper  192.168.1.10:/usr/local/zookeeper  ; done

7、 所有节点创建 mkdir /tmp/zookeeper

mkdir  /tmp/zookeeper

ssh  node1 mkdir  /tmp/zookeeper

ssh  node2 mkdir  /tmp/zookeeper

ssh  node3 mkdir  /tmp/zookeeper

8、 创建 myid 文件,id 必须与配置文件里主机名对应的 server.(id) 一致 echo 1 >/tmp/zookeeper/myid

echo  4  >  /tmp/zookeeper/myid

ssh  node1  ‘echo  1  >  /tmp/zookeeper/myid‘

ssh  node2  ‘echo  2  >  /tmp/zookeeper/myid‘

ssh  node3  ‘echo  3  >  /tmp/zookeeper/myid‘

关于myid文件:

– myid文件中只有一个数字

– 注意,请确保每个server的myid文件中id数字丌同

– server.id 中的 id 不 myid 中的 id 必须一致

– id的范围是1~255

9 、启动服务,单启动一台无法查看状态,需要启动全部集群以后才能查看状态

/usr/local/zookeeper/bin/zkServer.sh start

10、 查看状态

/usr/local/zookeeper/bin/zkServer.sh status

11、利用 api 查看状态的脚本

 

#!/bin/bash
function getstatus(){
    exec 9<>/dev/tcp/$1/2181 2>/dev/null
    echo stat >&9
    MODE=$(cat <&9 |grep -Po "(?<=Mode:).*")
    exec 9<&-
    echo ${MODE:-NULL}
}
for i in node{1..3} nn01;do
    echo -ne "${i}\t"
    getstatus ${i}
done

  

原文地址:https://www.cnblogs.com/zzc-log/p/9591335.html

时间: 2024-11-08 23:45:59

zookeeper原理及搭建的相关文章

8.8.ZooKeeper 原理和选举机制

1.ZooKeeper原理 Zookeeper虽然在配置文件中并没有指定master和slave但是,zookeeper工作时,是有一个节点为leader,其他则为follower,Leader是通 过内部的选举机制临时产生的 2.ZooKeeper选举机制 2.1.概念 2.2. zk的选举机制(全新集群paxos):新搭建,无任何数据(通过myid) 2.3. 非全新集群的选举机制(数据恢复) 原文地址:https://www.cnblogs.com/yaboya/p/9149077.htm

VSFTP通讯原理与搭建详解

VSFTP介绍 ftp是一种古老的明文传输协议,因为其明文传输的特性,也出现过很多重大的危机,进而逐渐演变为支持加密传输的VSFTP(very security FTP),而CentOS默认自带的FTP就为VSFTP.本文主要介绍下VFSTP的传输原理与搭建.为了避免干扰,实验前请关闭Selinux和IPtables. FTP传输机制 FTP通过21端口与Client端进行指令传输,通过20端口进行数据传输,根据工作模式的不同VSFTP分为主动模式和被动模式2种,大多是情况VSFTP是工作在被动

kafka学习(二)-zookeeper集群搭建

zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是hadoop的一个子项目,其发展历程无需赘述.在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制 不适合在某些应用中使用,因此需要有一种可靠的.可扩展的.分布式的.可配置的协调机制来统一系统的状态.Zookeeper的目的就在于此. 1.角色 Zookeeper中的角色主要有以下三

Linux下ZooKeeper集群搭建

首先安装VMWare,装了两个虚拟机,版本是CentOS6.5,IP分别是 192.168.3.20 192.168.3.21 然后下载ZooKeeper包:http://zookeeper.apache.org/,使用命令tar -zxvf  zookeeper.tar.gz 进行解压,解压到/opt/soft目录 修改主机名 vim  /etc/hosts ,在hosts文件中添加一下两项 192.168.1.20 master 192.168.1.21 slave1 进入zookeeper

【zookeeper】 zookeeper 集群搭建

集群搭建环境: 发行版:CentOS-6.6 64bit 内核:2.6.32-504.el6.x86_64 CPU:intel-i7 3.6G 内存:2G 集群搭建步骤: 1. 确保机器安装了jdk [[email protected] ~]# java -version openjdk version "1.8.0_51" OpenJDK Runtime Environment (build 1.8.0_51-b16) OpenJDK 64-Bit Server VM (build

2. zookeeper集群搭建

zookeeper集群搭建 1.zookeeper集群组件: Zookeeper集群中的服务器角色有三种, leader(主)  server, follower(从)  server, observer(从)  server: 2.leader特殊之处在于它有决定权,具有Request Processor (observer server 与follower server的区别就在于不参与leader选举) 3.配置文件: 3.1将zoo_sample.cfg修改为zoo.cfg配置文件(好记

mongo副本集原理,搭建

#进入mongo mongo   默认端口27017启动的mongo服务,直接进入 mongo --port=27027   指定端口27027启动mongo服务,需加端口号启动 mongo 103.56.195.5:27017   登录指定主机的mongo服务,可以以此测试对端防火墙是否放通,mongo服务器端口 #mongo副本集启动参数: [[email protected] db]# ps aux |grep mongo root     112542  0.7  0.1 1058417

Zookeeper 分布式环境搭建

Zookeeper 分布式环境搭建 一.前期环境 安装概览 IP Host Name     Software     192.168.23.128     ae01 JDK 1.7 192.168.23.129 ae02 JDK 1.7 192.168.23.130 ae03 JDK 1.7 若使用虚拟机安装,可以安装samba, smbfs方面对于文件的控制. 系统环境: ubuntu-12.04.2-server-amd64 安装目录: /usr/local/ae JDK 安装目录: ex

CentOS下的ZooKeeper集群搭建

ZooKeeper集群搭建过程: 1.下载ZooKeeper安装包,解压安装: 2.在/etc/profile下配置ZooKeeper环境变量,增加变量$ZOOKEEP_HOME=ZooKeeper安装目录,再将$ZOOKEEPER_HOME/bin添加到$PATH变量: 3.将ZooKeeper安装目录conf下zoo_sample.cfg另存为zoo.cfg, 并修改相关配置信息: 4.将zoo.cfg文件拷贝到集群下的其他服务器上: 5.在每一台ZooKeeperZooKeeper服务器的