Zookeeper集群搭建

一、 ZooKeeper 简介

Zookeeper: 是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目。他提供的主要功 能包括:配置管理、名字服务、分布式锁、集群管理。

二、 ZooKeeper 的作用

2.1 配置管理

在我们的应用中除了代码外,还有一些就是各种配置。比如数据库连接等。一般我们都 是使用配置文件的方式,在代码中引入这些配置文件。当我们只有一种配置,只有一台服务 器,并且不经常修改的时候,使用配置文件是一个很好的做法,但是如果我们配置非常多, 有很多服务器都需要这个配置,这时使用配置文件就不是个好主意了。这个时候往往需要寻 找一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的 都可以获得变更。Zookeeper 就是这种服务,它使用 Zab 这种一致性协议来提供一致性。现 在有很多开源项目使用 Zookeeper 来维护配置,比如在 HBase 中,客户端就是连接一个 Zookeeper,获得必要的 HBase 集群的配置信息,然后才可以进一步操作。还有在开源的消 息队列 Kafka 中,也使用 Zookeeper来维护broker的信息。在 Alibaba开源的 SOA 框架Dubbo 中也广泛的使用 Zookeeper 管理一些配置来实现服务治理。

2.2 名字服务

名字服务这个就很好理解了。比如为了通过网络访问一个系统,我们得知道对方的 IP 地址,但是 IP 地址对人非常不友好,这个时候我们就需要使用域名来访问。但是计算机是 不能是域名的。怎么办呢?如果我们每台机器里都备有一份域名到 IP 地址的映射,这个倒 是能解决一部分问题,但是如果域名对应的 IP 发生变化了又该怎么办呢?于是我们有了 DNS 这个东西。我们只需要访问一个大家熟知的(known)的点,它就会告诉你这个域名对应 的 IP 是什么。在我们的应用中也会存在很多这类问题,特别是在我们的服务特别多的时候, 如果我们在本地保存服务的地址的时候将非常不方便,但是如果我们只需要访问一个大家都 熟知的访问点,这里提供统一的入口,那么维护起来将方便得多了。

2.3 分布式锁

其实在第一篇文章中已经介绍了 Zookeeper 是一个分布式协调服务。这样我们就可以利 用 Zookeeper 来协调多个分布式进程之间的活动。比如在一个分布式环境中,为了提高可靠 性,我们的集群的每台服务器上都部署着同样的服务。但是,一件事情如果集群中的每个服 务器都进行的话,那相互之间就要协调,编程起来将非常复杂。而如果我们只让一个服务进 行操作,那又存在单点。通常还有一种做法就是使用分布式锁,在某个时刻只让一个服务去

干活,当这台服务出问题的时候锁释放,立即 fail over 到另外的服务。这在很多分布式系统 中都是这么做,这种设计有一个更好听的名字叫 Leader Election(leader 选举)。比如 HBase 的 Master 就是采用这种机制。但要注意的是分布式锁跟同一个进程的锁还是有区别的,所 以使用的时候要比同一个进程里的锁更谨慎的使用。

2.4 集群管理

在分布式的集群中,经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些 节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中其他机 器需要感知到这种变化,然后根据这种变化做出对应的决策。比如我们是一个分布式存储系 统,有一个中央控制节点负责存储的分配,当有新的存储进来的时候我们要根据现在集群目 前的状态来分配存储节点。这个时候我们就需要动态感知到集群目前的状态。还有,比如一 个分布式的 SOA 架构中,服务是一个集群提供的,当消费者访问某个服务时,就需要采用 某种机制发现现在有哪些节点可以提供该服务(这也称之为服务发现,比如 Alibaba 开源的 SOA 框架 Dubbo 就采用了 Zookeeper 作为服务发现的底层机制)。还有开源的 Kafka 队列就 采用了 Zookeeper 作为 Cosnumer 的上下线管理。

三、部署环境介绍

ip主机名配置
10.10.220.11zk-14c8g
10.10.220.12zk-24c8g
10.10.220.13zk-34c8g

四、部署步骤

4.1 下载zookeeper二进制安装包

官网地址Apache ZooKeeper

4.1.1 选择对应的版本

在这里插入图片描述

4.1.2 选择Getting Started

在这里插入图片描述

4.1.3 点击 Download

在这里插入图片描述

4.1.4 点击stable

在这里插入图片描述

4.1.5 下载二进制安装包

在这里插入图片描述

4.1.6 点击链接,下载即可(也可以直接gpg下载)

在这里插入图片描述

4.2 部署zookeeper

4.2.1 修改各节点主机名

10.10.220.11节点
hostnamectl set-hostname zk-1

10.10.220.12节点
hostnamectl set-hostname zk-2

10.10.220.13节点
hostnamectl set-hostname zk-3

4.2.2 修改hosts文件并安装java

注:所有节点均要执行


cat << EOF >> /etc/hosts

10.10.220.11 zk-1

10.10.220.12 zk-2

10.10.220.13 zk-3

EOF

安装jdk

yum install -y java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-headless.x86_64 java-1.8.0-openjdk-devel.x86_64

重启服务器

reboot

4.2.3 解压二进制安装包

tar xvf ./apache-zookeeper-3.8.0-bin.tar.gz apache-zookeeper-3.8.0

#将解压后的文件放到/opt/下,并重新命名为zookeeper

mv apache-zookeeper-3.8.0 /opt/zookeeper

4.2.4 修改配置文件
注:所有节点均要执行

进入zookeeper的配置文件目录

cd /opt/zookeeper/conf 

添加配置文件参数

cat << EOF >> zoo.cfg 
tickTime=2000 # zookeeper中使用的基本时间度量单位,单位为毫秒。

zookeeper客户端与服务器之间的心跳时间就是一个tickTime单位。默认值为2000毫秒,即2秒 

initLimit=10 # Follower连接到Leader并同步数据的最大时间,如果zookeeper数据比较大,可以考虑调大这个值来避免报错 

syncLimit=5 # Follower同步Leader的最大时间 dataDir=/data/zookeeper # 主要用来配置zookeeper server数据的存放路径 

clientPort=2181 # 主要定义客户端连接zookeeper server的端口,默认情况下为2181 

server.1=ck-1:2888:3888 # 主要用来设置集群中某台server的参数,格式[hostname]:n:n[:observer],zookeeper server启动的时候,会根据dataDirxia的myid文件确定当前节点的id。该参数里,第一个port是follower连接leader同步数据和转发请求用,第二个端口是leader选举用的 
server.2=ck-2:2888:3888 
server.3=ck-3:2888:3888 
EOF

4.2.5 生成myid文件与启动服务

zk-1节点

mkdir -p /data/zookeeper/ && echo 1 > /data/zookeeper/myid

# 配置环境变量 echo 'PATH=$PATH:/opt/zookeeper/bin' >> /etc/profile

source /etc/profile

启动服务

zkServer.sh start

zk-2节点

mkdir -p /data/zookeeper/ && echo 2 > /data/zookeeper/myid

# 配置环境变量 echo 'PATH=$PATH:/opt/zookeeper/bin' >> /etc/profile

source /etc/profile

启动服务

zkServer.sh start

zk-3节点

mkdir -p /data/zookeeper/ && echo 3 > /data/zookeeper/myid

# 配置环境变量 echo 'PATH=$PATH:/opt/zookeeper/bin' >> /etc/profile

source /etc/profile

启动服务

zkServer.sh start

4.2.5.1 zk基础命令

#启动服务

zkServer.sh start

#停止服务

zkServer.sh stop

#重启服务

zkServer.sh restart

#查看服务状态

zkServer.sh status
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值