zookeeper集群搭建

1.什么是ZooKeeper?

1.1.ZooKeeper:分布式应用程序的分布式协调服务

Apache ZooKeeper致力于开发和维护开源服务器,实现高度可靠的分布式协调。

ZooKeeper是一种集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。

ZooKeeper是一种用于分布式应用程序的分布式开源协调服务。它公开了一组简单的原语,分布式应用程序可以构建这些原语,以实现更高级别的服务,以实现同步,配置维护以及组和命名。它被设计为易于编程,并使用在熟悉的文件系统目录树结构之后设计的数据模型。它在Java中运行,并且具有Java和C的绑定。ZooKeeper背后的动机是减轻分布式应用程序从头开始实施协调服务的责任。

ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。

ZooKeeper框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序。 后来,Apache ZooKeeper成为Hadoop,HBase和其他分布式框架使用的有组织服务的标准。 例如,Apache HBase使用ZooKeeper跟踪分布式数据的状态。

1.2设计目标

ZooKeeper允许分布式进程通过共享的层级命名空间相互协调,该命名空间的组织方式与标准文件系统类似。名称空间由数据寄存器组成 - 在ZooKeeper用语中称为znodes - 这些与文件和目录类似。与专为存储而设计的典型文件系统不同,ZooKeeper数据保存在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟数量。

ZooKeeper实现非常重视高性能,高可用性,严格有序的访问。

ZooKeeper的性能方面意味着它可以在大型分布式系统中使用。可靠性方面使其不会成为单点故障。严格的排序意味着可以在客户端实现复杂的同步原语。

ZooKeeper被复制。与它协调的分布式进程一样,ZooKeeper本身也可以在称为集合的一组主机上进行复制。

部分

描述

Client(客户端)

客户端,我们的分布式应用集群中的一个节点,从服务器访问信息。对于特定的时间间隔,每个客户端向服务器发送消息以使服务器知道客户端是活跃的。

类似地,当客户端连接时,服务器发送确认码。如果连接的服务器没有响应,客户端会自动将消息重定向到另一个服务器。

Server(服务器)

服务器,我们的ZooKeeper总体中的一个节点,为客户端提供所有的服务。向客户端发送确认码以告知服务器是活跃的。

Ensemble

ZooKeeper服务器组。形成ensemble所需的最小节点数为3。

Leader

服务器节点,如果任何连接的节点失败,则执行自动恢复。Leader在服务启动时被选举。

Follower

跟随leader指令的服务器节点。

 

 

 

 

 

 

 

 

 

zookeeper集群搭建

 

组成ZooKeeper服务的服务器必须彼此了解。它们维护内存中的状态图像,以及持久性存储中的事务日志和快照。只要大多数服务器可用,ZooKeeper服务就可用。

客户端连接到单个ZooKeeper服务器。客户端维护TCP连接,通过该连接发送请求,获取响应,获取监视事件以及发送心跳。如果与服务器的TCP连接中断,则客户端将连接到其他服务器。

ZooKeeper是订购的。ZooKeeper使用反映所有ZooKeeper事务顺序的数字标记每个更新。后续操作可以使用该顺序来实现更高级别的抽象,例如同步原语。

ZooKeeper很快。它在“读取主导”工作负载中特别快。ZooKeeper应用程序在数千台计算机上运行,​​并且在读取比写入更常见的情况下表现最佳,比率大约为10:1.

Leader:zookeeper集群工作的核心,事务请求的唯一调度和处理者,保证集群事务处理的顺序性,集群内各个服务器的调度者,对于create,set data,delete等有写操作的请求,则需要统一准发给leader处理,leader需要决定编号,执行操作,这个过程称为一个事务。

Follwer:处理客户端的非事务请求,参与集群leader选举投票。

1.3.数据模型和分层命名空间

ZooKeeper提供的名称空间非常类似于标准文件系统。名称是由斜杠(/)分隔的路径元素序列。ZooKeeper名称空间中的每个节点都由路径标识。

zookeeper集群搭建

1.4ZooKeeper的好处

以下是使用ZooKeeper的好处:

 

简单的分布式协调过程

 

同步 - 服务器进程之间的相互排斥和协作。此过程有助于Apache HBase进行配置管理。

 

有序的消息

 

序列化 - 根据特定规则对数据进行编码。确保应用程序运行一致。这种方法可以在MapReduce中用来协调队列以执行运行的线程。

 

可靠性

 

原子性 - 数据转移完全成功或完全失败,但没有事务是部分的。

2.Zookeeper集群的搭建

2.1.ZooKeeper服务器是用Java创建的,它在JVM上运行。你需要使用JDK 6或更高版本。

Java -version  查看当前系统中有没有安装

卸载openjdk

rpm -qa|grep java

rpm -e --nodeps ---

2.2关闭防火墙

是red hat/CentOs7关闭防火墙的命令!

 

1:查看防火状态

 

systemctl status firewalld

service  iptables status

2:暂时关闭防火墙

systemctl stop firewalld

service  iptables stop

3:永久关闭防火墙

systemctl disable firewalld

chkconfig iptables off

4:重启防火墙

systemctl enable firewalld

service iptables restart  

5:永久关闭后重启

//暂时还没有试过

chkconfig iptables on 

命令:chkconfig --level 2345 iptables off

或者 chkconfig iptables off

其中2345 代表”执行等级“

等级0表示:表示关机

等级1表示:单用户模式

等级2表示:无网络连接的多用户命令行模式

等级3表示:有网络连接的多用户命令行模式

等级4表示:不可用

等级5表示:带图形界面的多用户模式

等级6表示:重新启动

service iptables stop

 

2.3.ZooKeeper框架安装

2.3.1官网

https://zookeeper.apache.org

将tar包上传到opt下

2.3.2解压安装

tar -zxvf zookeeper-3.4.12.tar.gz

 两台主机配置5个集群

2.3.3修改配置文件

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

创建数据存文件目录

mkdir  zkdata

添加内容

/opt/zookeeper/data/zkdata

server.1 = 192.168.71.138:2888:3888 (心跳端口 选举端口)

server.2 = 192.168.71.138:2889:3889

server.3 = 192.168.71.138:2890:3890

server.4 = 192.168.71.139:2891:3891

server.5 = 192.168.71.139:2892:3892

修改后

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

#dataDir=/tmp/zookeeper

dataDir=/opt/zookeeper/data/zkdata01

# 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

 

在节点配置的dataDir指定的目录下面,创建一个myid文件,里面内server.1 = 192.168.71.138:2888:3888 (心跳端口 选举端口)

server.2 = 192.168.71.138:2889:3889

server.3 = 192.168.71.138:2890:3890

server.4 = 192.168.71.139:2891:3891

server.5 = 192.168.71.139:2892:3892

 

容为一个数字,用来标识当前主机,$ZOOKEEPER_HOME/conf/zoo.cfg文件中配置的server.X,则myid文件中就输入这个数字X。(即在每个节点上新建并设置文件myid,其内容与zoo.cfg中的id相对应)这里master节点为 1

/opt/zookeeper/data/zkdata

vim myid

zookeeper集群搭建

 

2.3.4配置另外两台主机

2.3.4.1主机之间进行免密登录处理

ssh-****** -t rsa一路回车

zookeeper集群搭建

生成:id_rsa.pub 文件

ssh-copy-id -i  /root/.ssh/id_rsa.pub [email protected]

再次使用已经做免密处理的用户登录远程机器,已经不需要密码了,免密登录处理完成

将第一台机器的配置加安装文件发送到第二台,第三台

scp -r /opt/zookeeper [email protected]:/opt/

Echo 2 >zkdata/myid

注意同一台主机配置两个以上修改端口

配置全局变量

export ZOOKEEPER_HOME=/opt/zookeeper/zookeeper

export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /etc/profile

启动

sh zkServer.sh start

/opt/zookeeper/zookeeper-3/bin/zkServer.sh start/conf/zoo.cfg

zookeeper集群搭建

 

查看状态

./zkServer.sh status

注意启动要按照配置里面的顺序启动

3.常用命令

ZooKeeper服务命令:

     在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作

 

1. 启动ZK服务:       sh bin/zkServer.sh start

2. 查看ZK服务状态: sh bin/zkServer.sh status

3. 停止ZK服务:       sh bin/zkServer.sh stop

4. 重启ZK服务:       sh bin/zkServer.sh restart

zk客户端命令

ZooKeeper命令行工具类似于Linux的shell环境,不过功能肯定不及shell啦,但是使用它我们可以简单的对ZooKeeper进行访问,数据创建,数据修改等操作.  使用 zkCli.sh -server 127.0.0.1:2181 连接到 ZooKeeper 服务,连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息。

 

命令行工具的一些简单操作如下:

 

1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容

2. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据

3. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串

4. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串

5. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置

6. 删除文件: delete /zk 将刚才创建的 znode 删除

7. 退出客户端: quit

8. 帮助命令: help

 

ZooKeeper 常用四字命令:

      ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令

 

1. 可以通过命令:echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader

2. 使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。

3. echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。

4. echo kill | nc 127.0.0.1 2181 ,关掉server

5. echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。

6. echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。

7. echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。

8. echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。

9. echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。

10. echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。

11. echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。