ZooKeeper 集群部署
一、ZooKeeper 简介
1.1 什么是 ZooKeeper
- 定义:zookeeper一个分布式的开源的协调服务框架,服务于分布式应用。
-
它暴露了一系列的原语操作服务,因此分布式应用能够基于这些服务,构建出更高级别的服务,比如同步,配置管理,分组和命名服务。
-
zookeeper设计上易于编码,数据模型构建在我们熟悉的树形结构目录风格的文件系统中,
-
zookeeper运行在Java中,同时支持Java和C 语言
-
1.2 ZooKeeper 特点
- 最终一致性
- 客尸端末论连接到哪个 Server,展示给它的都是同一个视图,这是Zookeeper最重要的特点。
- 可靠性
- Zookeeper 具有简单、健壮、良好的性能。如果一条消息被一台服务器接收,那么它将被所有的服务器接收。
- 实时性
- Zookeeper 保证客户端将在一个时间间隔范围内,获得服务器的更新信息或者服务器失效的信息。但由于网络延时等原因
- zookeeper 不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
- 等待无关(wait-free)
- 慢的或者失效的客户端不得干预快速的客户端的请求,这就使得每个客户端都能有效地等待。
- 原子性
- 对zookeeper的更新操作要么成功,要么失败,没有中间状态。
- 顺序性
- 它包括全局有序和偏序两种
- 全局有序是针对服务器端,例如,在一台服务器上,消息A在消息B前发布,那么所有服务器上的消息A都将在消息B前被发布。
- 偏序是针对客户端,例如,在同一个客户端中,消息B在消息A后发布,那么执行的顺序必将是先执行消息A然后在是消息B。所有的更新操作都有严格的偏序关系,更新操作都是串行执行的,这一点是保证ZooKeeper功能正确性的关键。
- 它包括全局有序和偏序两种
二 ZooKeeper 的架构和设计
Zookeeper 服务自身组成一个集群(2n+1个服务节点最多允许n个失效)。Zookeeper 服务有两个角色:一个是主节点(Leader),负责投票的发起和决议,更新系统状态;另一种是从节点(Follower),用于接收客户端请求并向客户端返回结果,在选主过程(即选择主节点的过程)中参与投票。主节点失效后,会在从节点中重新选举新的主节点。
4.1 ZooKeeper 数据模型
zookeeper的数据结构与linux文件系统很类似,与Linux中的文件系统路径不同,Zookeeper中的路径必须是绝对路径,而且每条路径只有唯一的一种表示方式(/app1/p_3)。
4.1.1 Znode 节点特性
-
临时节点
znode节点有两种:临时节点和持久节点。znode的类型在创建时就确定,之后不能修改当创建临时节点的客户端会话结束时,2ookeeper 会将该临时节点删除。而持久节点不依赖与客户端会话,只有当客户端明确要删除该持久节点时才会被真正删除。临时节点不可以有子节点,即使是短暂的子节点。 -
顺序节点
顺序节点是指名称中包含Zookeeper指定顺序号的znode。如果在创建znode的时候设置了顺序标识,那么该znode名称之后就会附加一个值,这个值是由一个单调递增的计数器所添加的,由父节点维护。 -
观察机制
客户端可以在znode上设置watcher,当节点状态发生改变时将会触发watcher所对应的操作当watcher被触发时,ZooKeeper将会向客户端发送且仅发送一条通知,因为watcher只能被触发一次,这样可以减少网络流量。为了能够多次收到通知,客户端需要重新注册所需的watcher
三、ZooKeeper 的集群安装前准备工作
3.1 需要的准备工作
- Linux 系统3 个节点准备
- 配置主机名与IP地址映射
- 配置时钟同步
- 集群SSH密码登录
- JDK安装
目标配置如下三台服务器:
服务器序号 | IP | 主机名称 |
---|---|---|
1 | 192.168.220.151 | hadoop1 |
2 | 192.168.220.152 | hadoop2 |
2 | 192.168.220.153 | hadoop3 |
3.2 Linux 系统 3 个节点准备
3.2.1 克隆
使用MVware 的克隆功能,克隆出另外两台 Hadoop 服务器
选择克隆完整版
3.2.2 配置另外两台服务器的静态IP
登录服务后,修改服务器网络配置:
[root@hadoop1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改 IP 地址即可,其他不变
3.2.3 修改主机名
[root@hadoop1 ~]# vim /etc/hostname
第二台服务器主机名:hadoop2 ,第三台服务器主机名:hadoop3
3.3 配置主机名与IP地址映射
三台服务器都需要配置主机名与IP地址映射
[root@hadoop1 ~]# vim /etc/hosts
添加如下内容:
192.168.220.151 hadoop1
192.168.220.152 hadoop2
192.168.220.153 hadoop3
三台服务器可以通过主机名相互访问
3.4 配置时钟同步
Hadoop 集群对节点的时间同步要求比较高,要求各个节点的系统时间不能相差太多,否则会造成很多问题,比如,最常见的连接超时问题。所以需要集群节点的系统时间与互联网的时间保持同步,但是在实际生产环境中,集群中大部分节点是不能连接外网的,这时候可以在内网搭建一个自己的时钟服务器(比如 NTP 服务器),然后让 Hadoop 集群的各个节点与这时钟服务器的时间保持同步
此处我选择 hadoop1 作为时钟服务器(大家随意)
- 查看时间类型
[root@hadoop1 ~]# date
CST 为上海时间,如果是 HKT,表示香港时间,可以通过如下操作进行调整
[root@hadoop1 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
注意:检测所有服务器的时间类型,保证都是上海时间
-
配置 NTP 服务器
-
检测 NTP 服务是否安装
# 检测是否安装 ntp
[root@hadoop1 ~]# rpm -qa | grep ntp
# 如果没有安装,进行安装
[root@hadoop1 ~]# yum install -y ntp
安装成功