(一)Zookeeper——基本概念及安装部署

概念:

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。Zookeeper是一个基础组件。(百度百科)

原理:

ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。

运行机制:

在这里插入图片描述

Zookeeper常用场景:

  1. zookeeper可以为客户端管理少量数据,为kv键值对方式、k为类似目录形式如/aa,/aa/bb等。
  2. 可以为客户端监听指定节点的数据节点状态,并在节点发生变化时,通知客户端。

在这里插入图片描述
上图的应用场景是服务器上下线动态感知
在这里插入图片描述
上图的应用场景是配置文件的同步管理

Zookeeper集群的安装部署:

集群一般安装奇数个节点。
Leader选举机制:投票。票多的为leader。
步骤:

  1. 选3台Linux服务器做为节点,将zookeeper的安装包上传到节点1上。

  2. 解压安装包到/root/apps下(目录可以指定其他目录)

    [root@slave1 ~]# tar -zxvf zookeeper-3.4.6.tar.gz -C apps/
    

    解压后的目录结构如下:
    在这里插入图片描述

  3. 在conf目录下,复制一份配置文件,修改文件名为zoo.cfg做为正式配置文件。

    [root@slave1 conf]# cp zoo_sample.cfg zoo.cfg
    
  4. 编辑配置文件vim zoo.cfg,编辑内容如下:
    修改dataDir为/root/zkdata(可以自己指定)
    末尾添加:
    server.1=slave1:2888:3888
    server.1=slave2:2888:3888
    server.1=slave3:2888:3888
    保存配置文件
    在这里插入图片描述

  5. 使用scp命令,将修改完配置文件的zookeeper传输到其余节点,在/root/apps目录下:

    [root@slave1 apps]# scp -r zookeeper-3.4.6/ slave2:$PWD
    [root@slave1 apps]# scp -r zookeeper-3.4.6/ slave3:$PWD
    
  6. 在3台节点上,新建zkdata数据目录:mkdir /root/zkdata

  7. 对3台节点,在工作目录中生成myid文件,但内容要分别为各自的id: 1,2,3
    Slave1上: echo 1 > /root/zkdata/myid
    Slave2上: echo 2 > /root/zkdata/myid
    Slave3上: echo 3 > /root/zkdata/myid

  8. 启动zookeeper集群,在每个节点的bin目录下:

    [root@slave1 bin]# ./zkServer.sh start
    JMX enabled by default
    Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    [root@slave1 bin]# 
    

    通过jps命令。可以看到zookeeper已经启动了。
    在这里插入图片描述

    如果此时只启动一台,比如只在slave1上启动,查看状态:zkServer.sh status

    [root@slave1 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
    Error contacting service. It is probably not running.
    [root@slave1 bin]# 
    

    显示连接服务器错误,因为此时只有一个节点(slave1)启动,没有选出leader,接着启动slave2节点的zk,再使用 zkServer.sh status查看状态,在节点2上:

    [root@slave2 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
    Mode: leader
    [root@slave2 bin]# 
    

在查看节点1:

[root@slave1 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
[root@slave1 bin]#

可以看到,节点2为learder,节点1为follower,同样的,启动节点3的zk,节点3的角色也是follower。
如果将leader kill掉,那么集群依然存在,此时,节点3的状态为leader。如果再将节点2启动,那么节点2的角色将是follower。这是zk的投票机选举的结果。

自动化启动脚本:

新建一个文件 zkmanage.sh :vim zkmanage.sh
内容如下:

#!/bin/bash
for host in slave1 slave2 slave3
do
echo "${host}:${1}ing..."
ssh $host "source /etc/profile;/root/apps/zookeeper-3.4.6/bin/zkServer.sh $1"
echo "----------"
done

sleep 2

for host in slave1 slave2 slave3
do
echo "${host}:status"
ssh $host "source /etc/profile;/root/apps/zookeeper-3.4.6/bin/zkServer.sh status"
echo "----------"
done

修改成可执行文件:chmod +x zkmanage.sh
启动:./zkmanage.sh start
输出如下:

[root@slave1 ~]# ./zkmanage.sh start
slave1:starting...
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
----------
slave2:starting...
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
----------
slave3:starting...
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
----------
slave1:status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
----------
slave2:status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader
----------
slave3:status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值