zookeeper集群搭建

• Zookeeper standalone operation
• Zookeeper伪集群搭建
• 实战:Zookeeper 集群搭建

1.简介
zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件,是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader,只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。

Zookeeper有三种运行模式:单机模式、伪集群模式和集群模式。
安装zookeeper的先决条件是首先保证已安装Java运行环境。

3.ZooKeeper之特性
ZooKeeper本质上是一个分布式的小文件存储系统。原本是Apache Hadoop的一个组件,现在被拆分为一个Hadoop的独立子项目,在Hbase(Hadoop的另外一个被拆分出来的子项目,用于分布式环境下的超大数据量的DBMS数据库管理系统)中也用到了ZooKeeper集群。ZooKeeper有如下的特性:

3.1.简单
ZooKeeper核心是一个精简的文件系统,它提供了一些简单的文件操作以及附加的功能,例如排序和通知。

3.2.易表达
ZooKeeper的数据结构原型是一棵znode树(类似Linux的文件系统),并且它们是一些已经被构建好的块,可以用来构建大型的协作数据结构和协议。

3.3.高可用性
ZooKeeper可以运行在一组服务器上,同时它们被设计成高可用性,为你的应用程序避免单点故障。

3.4.松耦合交互

ZooKeeper提供的Watcher机制使得各客户端与服务器的交互变得松耦合,每个客户端无需知晓其他客户端的存在,就可以和其他客户端进行数据交互。

3.5.丰富的API

ZooKeeper为开发人员提供了一套丰富的API,减轻了开发人员编写通用协议的负担。

4.1.服务器配置
hostname ip software
服务端:zkmaster IP:192.168.100.150
服务端:zkslaver1 IP:192.168.100.151
服务端:zkslaver2 IP:192.168.100.152

4.1.1单节点zookeeper搭建

在这里插入图片描述

下载解压

在这里插入图片描述


bin/zkServer.sh start

在这里插入图片描述

4.1.2伪分布式集群搭建
1.创建data文件夹1 2 3
在这里插入图片描述

创建myid文件并分别写入1 2 3
在这里插入图片描述

编辑zoo.cfg配置文件 3个
在这里插入图片描述

分别写入以下内容:
在这里插入图片描述

启动zookeeper 服务

在这里插入图片描述

查看进程

在这里插入图片描述

Zookeeper集群搭建
6.安装配置zookeeper
上传zookeeper-3.4.10.tar.gz到linux系统中

[root@xuegod63 ~]# tar -zxvf zookeeper-3.4.10.tar.gz  #解压zookeeper

#把解压后的zookeeper移到目录/opt/zookeeper下

[root@xuegod63 ~]# mv zookeeper-3.4.10 /opt/zookeeper
[root@xuegod63 zookeeper]# cd  /opt/zookeeper/conf  #生成配置文件
[root@xuegod63 conf]# cp zoo_sample.cfg zoo.cfg 

#编辑zoo.cfg

[root@xuegod63 ~]# vim /opt/zookeeper/conf/zoo.cfg

#修改内容如下
ticketTime=2000 #服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳。单位毫秒
initLimit=10 #配置 Zookeeper 接受客户端(此客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower ([ˈfɒləʊə®] 追随者)服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已超过initLimit个tickTime长度后 Zookeeper 服务器还没有收到客户端的返回信息,则表明客户端连接失败。总的时间长度就是 initLimit * tickTime 秒。
syncLimit=5 #配置 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 syncLimit * tickTime 秒。
clientPort=2181 #Zookeeper服务器监听的端口,以接受客户端的访问请求。

改:12 dataDir=/tmp/zookeeper 
改:12 dataDir=/opt/zookeeper/data  #Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

#dataLogDir:若没提供的话则用dataDir。zookeeper的持久化都存储在这两个目录里。dataLogDir里是放到的顺序日志(WAL)。而dataDir里放的是内存数据结构的snapshot,便于快速恢复。为了达到性能最大化,一般建议把dataDir和dataLogDir分到不同的磁盘上,以充分利用磁盘顺序写的特性。
在zoo.conf文件最后,添加以下内容:

server.1=192.168.1.163:2888:3888
server.2=192.168.1.164:2888:3888
server.3=192.168.1.165:2888:3888

注:#server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,此端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。2888端口是zookeeper服务相互通信使用的,3888端口是zookeeper服务选举使用的

  1. 配置zookeeper环境变量
[root@xuegod63 ~]# mkdir /opt/zookeeper/data   # 创建data目录
[root@xuegod63 ~]# vim /etc/profile
#添加如下内容
ZOOKEEPER_HOME=/opt/zookeeper
PATH=$PATH:${ZOOKEEPER_HOME}/bin
export ZOOKEEPER_HOME

#保存修改

[root@xuegod63 ~]# source /etc/profile
  1. 在xuegod64和xuegod62上安装zookeeper
[root@xuegod63~]# scp -r /opt/zookeeper/ root@192.168.1.164:/opt/
[root@xuegod63~]# scp -r /opt/zookeeper/ root@192.168.1.165:/opt/
[root@xuegod63 ~]# scp /etc/profile 192.168.1.164:/etc/
[root@xuegod63 ~]# scp /etc/profile 192.168.1.165:/etc/

重新加载文件:

[root@xuegod62 ~]# source  /etc/profile
[root@xuegod64 ~]# source  /etc/profile

9.添加myid文件
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 上述dataDir 指定的目录下,这个文件里面就只有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

[root@xuegod63 dtadmin~]# echo "1" >> /opt/zookeeper/data/myid
[root@xuegod64 dtadmin~]# echo "2" >> /opt/zookeeper/data/myid
[root@xuegod62 dtadmin~]# echo "3" >> /opt/zookeeper/data/myid

10.启动zookeeper
在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本。

[root@xuegod63 dtadmin~]# zkServer.sh start
[root@xuegod64 dtadmin~]# zkServer.sh start
[root@xuegod62 dtadmin~]# zkServer.sh start

11.验证zookeeper各个节点状态

[root@xuegod63 dtadmin~]# zkServer.sh status
[root@xuegod64 dtadmin~]# zkServer.sh status
[root@xuegod62 dtadmin~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader

发现xuegod62是leader 其他结点是follower 。ID最大的为leader。

[root@xuegod62 ~]# netstat  -antup | grep 888   #leader上监听2888和3888端口
tcp6       0      0 192.168.1.165:3888       :::*                    LISTEN      3073/java           
tcp6       0      0 192.168.1.165:2888       :::*                    LISTEN      3073/java  

其他结点上只监听3888端口:

[root@xuegod63 ~]# netstat  -antup | grep 888
tcp6       0      0 192.168.1.163:3888       :::*                    LISTEN      45118/java   

链接客户端测试:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值