阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Zookeeper集群搭建

273次阅读
没有评论

共计 4468 个字符,预计需要花费 12 分钟才能阅读完成。

导读 由于公司缓存方案改进,准备采用 codis 集群作为主要的缓存解决方案(codis:国内豌豆荚开发的 redis 集群解决方案,已开源,github 地址:https://github.com/CodisLabs/codis),codis 集群依赖于 zookeeper 集群,本文介绍 zookeeper 集群的实现。

Zookeeper 集群搭建

一、Zookeeper 原理简介

ZooKeeper 是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。

Zookeeper 设计目的
  • 最终一致性:client 不论连接到那个 Server,展示给它的都是同一个视图。
  • 可靠性:具有简单、健壮、良好的性能、如果消息 m 被到一台服务器接收,那么消息 m 将被所有服务器接收。
  • 实时性:Zookeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper 不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用 sync()接口。
  • 等待无关(wait-free):慢的或者失效的 client 不得干预快速的 client 的请求,使得每个 client 都能有效的等待。
  • 原子性:更新只能成功或者失败,没有中间状态。
  • 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息 a 在消息 b 前发布,则在所有 Server 上消息 a 都将在消息 b 前被发布;偏序是指如果一个消息 b 在消息 a 后被同一个发送者发布,a 必将排在 b 前面。
Zookeeper 工作原理

1、在 zookeeper 的集群中,各个节点共有下面 3 种角色和 4 种状态:

角色:leader,follower,observer
状态:leading,following,observing,looking

Zookeeper 的核心是原子广播,这个机制保证了各个 Server 之间的同步。实现这个机制的协议叫做 Zab 协议(ZooKeeper Atomic Broadcast protocol)。Zab 协议有两种模式,它们分别是恢复模式(Recovery 选主)和广播模式(Broadcast 同步)。当服务启动或者在领导者崩溃后,Zab 就进入了恢复模式,当领导者被选举出来,且大多数 Server 完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 Server 具有相同的系统状态。

为了保证事务的顺序一致性,zookeeper 采用了递增的事务 id 号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了 zxid。实现中 zxid 是一个 64 位的数字,它高 32 位是 epoch 用来标识 leader 关系是否改变,每次一个 leader 被选出来,它都会有一个新的 epoch,标识当前属于那个 leader 的统治时期。低 32 位用于递增计数。

每个 Server 在工作过程中有 4 种状态:

LOOKING:当前 Server 不知道 leader 是谁,正在搜寻。

LEADING:当前 Server 即为选举出来的 leader。

FOLLOWING:leader 已经选举出来,当前 Server 与之同步。

OBSERVING:observer 的行为在大多数情况下与 follower 完全一致,但是他们不参加选举和投票,而仅仅接受 (observing) 选举和投票的结果。

Zookeeper 集群节点
  • Zookeeper 节点部署越多,服务的可靠性越高,建议部署奇数个节点,因为 zookeeper 集群是以宕机个数过半才会让整个集群宕机的。
  • 需要给每个 zookeeper 1G 左右的内存,如果可能的话,最好有独立的磁盘,因为独立磁盘可以确保 zookeeper 是高性能的。如果你的集群负载很重,不要把 zookeeper 和 RegionServer 运行在同一台机器上面,就像 DataNodes 和 TaskTrackers 一样。
实验环境
主机名 系统 IP 地址
linux-node1 CentOS release 6.8 192.168.1.148
linux-node2 CentOS release 6.8 192.168.1.149
linux-node2 CentOS release 6.8 192.168.1.150
二、Zookeeper 安装

Zookeeper 运行需要 java 环境,需要安装 jdk,注:每台服务器上面都需要安装 zookeeper、jdk,建议本地下载好需要的安装包然后上传到服务器上面,服务器上面下载速度太慢。

2.1、JDK 安装

JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

rpm -ivh jdk-8u101-linux-x64.rpm

Zookeeper 集群搭建

2.2、Zookeeper 安装

Zookeeper 链接:http://zookeeper.apache.org/

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz -P /usr/local/src/
tar zxvf zookeeper-3.4.8.tar.gz -C /opt
cd /opt && mv zookeeper-3.4.8 zookeeper
cd zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg

# 把 zookeeper 加入到环境变量

echo -e "# append zk_env\nexport PATH=$PATH:/opt/zookeeper/bin" >> /etc/profile
三、Zookeeper 集群配置

注意:搭建 zookeeper 集群时,一定要先停止已经启动的 zookeeper 节点。

3.1、Zookeeper 配置文件修改

# 修改过后的配置文件 zoo.cfg,如下:

egrep -v "^#|^$" zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataLogDir=/opt/zookeeper/logs
dataDir=/opt/zookeeper/data
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1= 192.168.1.148:2888:3888
server.2= 192.168.1.149:2888:3888
server.3= 192.168.1.150:2888:3888

# 创建相关目录,三台节点都需要

mkdir -p /opt/zookeeper/{logs,data}

# 其余 zookeeper 节点安装完成之后,同步配置文件 zoo.cfg。

3.2、配置参数说明

tickTime 这个时间是作为 zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔, 也就是说每个 tickTime 时间就会发送一个心跳。

initLimit 这个配置项是用来配置 zookeeper 接受客户端(这里所说的客户端不是用户连接 zookeeper 服务器的客户端, 而是 zookeeper 服务器集群中连接到 leader 的 follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。

当已经超过 10 个心跳的时间(也就是 tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息, 那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。

syncLimit 这个配置项标识 leader 与 follower 之间发送消息, 请求和应答时间长度, 最长不能超过多少个 tickTime 的时间长度, 总的时间长度就是 5 *2000=10 秒。

dataDir 顾名思义就是 zookeeper 保存数据的目录, 默认情况下 zookeeper 将写数据的日志文件也保存在这个目录里;

clientPort 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口接受客户端的访问请求;

server.A=B:C:D 中的 A 是一个数字, 表示这个是第几号服务器,B 是这个服务器的 IP 地址,C 第一个端口用来集群成员的信息交换, 表示这个服务器与集群中的 leader 服务器交换信息的端口,D 是在 leader 挂掉时专门用来进行选举 leader 所用的端口。

3.3、创建 ServerID 标识

除了修改 zoo.cfg 配置文件外,zookeeper 集群模式下还要配置一个 myid 文件, 这个文件需要放在 dataDir 目录下。

这个文件里面有一个数据就是 A 的值(该 A 就是 zoo.cfg 文件中 server.A=B:C:D 中的 A), 在 zoo.cfg 文件中配置的 dataDir 路径中创建 myid 文件。

# 在 192.168.1.148 服务器上面创建 myid 文件,并设置值为 1,同时与 zoo.cfg 文件里面的 server.1 保持一致,如下

echo "1" > /opt/zookeeper/data/myid

Zookeeper 集群搭建

# 在 192.168.1.149 服务器上面创建 myid 文件,并设置值为 1,同时与 zoo.cfg 文件里面的 server.2 保持一致,如下

echo "2" > /opt/zookeeper/data/myid

Zookeeper 集群搭建

# 在 192.168.1.150 服务器上面创建 myid 文件,并设置值为 1,同时与 zoo.cfg 文件里面的 server.3 保持一致,如下

echo "3" > /opt/zookeeper/data/myid

Zookeeper 集群搭建

到此,相关配置已完成

四、Zookeeper 集群查看
1、启动每个服务器上面的 zookeeper 节点:

#linux-node1、linux-node2、linux-node3

/opt/zookeeper/bin/zkServer.sh start

注意:报错排查
Zookeeper 集群搭建

Zookeeper 节点启动不了可能原因:zoo.cfg 配置文件有误、iptables 没关。

2、启动完成之后查看每个节点的状态

#linux-node1
Zookeeper 集群搭建
#linux-node2
Zookeeper 集群搭建
#linux-node3
Zookeeper 集群搭建
#从上面可以看出,linux-node1,linux-node3 两台服务器 zookeeper 的状态是 follow 模式,linux-node2 这台服务器 zookeeper 的状态是 leader 模式。

五、Zookeeper 集群连接

Zookeeper 集群搭建完毕之后,可以通过客户端脚本连接到 zookeeper 集群上面,对客户端来说,zookeeper 集群是一个整体,连接到 zookeeper 集群实际上感觉在独享整个集群的服务。
#在 linux-node1 测试
Zookeeper 集群搭建
通过上图可以看出整个 zookeeper 集群已经搭建并测试完成。
#Zookeeper 原理:
http://blog.csdn.net/wuliu_forever/article/details/52053557
http://www.cnblogs.com/luxiaoxun/p/4887452.html

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计4468字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7994582
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...