ELK之Zookeeper使用

ELK

zookeeper使用


前言

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务(引用百度百科),是Google的Chubby(面向松耦合分布式系统的锁服务)一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

一、ZooKeeper的特性

性质介绍
顺序一致性从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到Zookeeper中去。
原子性所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,即整个集群要么都成功应用了某个事务,要么都没有应用。
单一视图无论客户端连接的是哪个 Zookeeper 服务器,其看到的服务端数据模型都是一致的。
可靠性一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会一直被保留,除非有另一个事务对其进行了变更。
实时性Zookeeper 保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。

二、Zookeeper集群架构

1.Zookeeper的基本架构图

在这里插入图片描述Zookeeper集群主要角色有Server和client,其中,Server又分为Leader、Follower和Observer三个角色,每个角色的含义如下

1、Leader:领导者角色,主要负责投票的发起和决议,以及更新系统状态。
2、Follower:跟随者角色,用于接收客户端的请求并返回结果给客户端,在选举过程中参与投票。
3、Observer:观察者角色,用户接收客户端的请求,并将写请求转发给leader,同时同步leader状态,但不参与投票。Observer目的是扩展系统,提高伸缩性。
4、Client:客户端角色,用于向Zookeeper发起请求。

2.Zookeeper的基本流程

Zookeeper集群中每个Server在内存中存储了一份数据,在Zookeeper启动时,将从实例中选举一个Server作为leader,Leader负责处理数据更新等操作,当且仅当大多数Server在内存中成功修改数据,才认为数据修改成功。

Zookeeper写的流程为:客户端Client首先和一个Server或者Observe通信,发起写请求,然后Server将写请求转发给Leader, Leader再将写请求转发给其它Server,其它Server在接收到写请求后写入数据并响应Leader,Leader在接收到大多数写成功回应后,认为数据写成功,最后响应Client,完成一次写操作过程。

三、Zookeeper下载安装

1.下载

ZooKeeper是用Java编写的,需要安装Java运行环境,可以从zookeeper官网https://zookeeper.apache.org/获取zookeeper安装包
并上传到/usr目录下
这里以apache-zookeeper-3.5.8-bin.tar.gz为例

2.安装

解压

[root@VM-0-2-centos usr]# tar -zxvf /usr/apache-zookeeper-3.5.8-bin.tar.gz -C /usr/local/

cd进入/usr/local修改下名称

[root@VM-0-2-centos local]# mv apache-zookeeper-3.5.8-bin/ zookeeper

这里我们模拟一下zookeeper集群(伪集群)
/usr/local新建一个目录zookeepers
用于存放zookeeper集群

[root@VM-0-2-centos local]# mkdir zookeepers

复制zookeeper到zookeepers中三次 命名为zookeeper1、zookeeper2、zookeeper3

[root@VM-0-2-centos local]# cp -R zookeeper zookeepers/zookeeper1
[root@VM-0-2-centos local]# cp -R zookeeper zookeepers/zookeeper2
[root@VM-0-2-centos local]# cp -R zookeeper zookeepers/zookeeper3

移动完毕效果如下

[root@VM-0-2-centos zookeepers]# ll
total 12
drwxr-xr-x 6 root root 4096 Jan 12 10:17 zookeeper1
drwxr-xr-x 6 root root 4096 Jan 12 10:18 zookeeper2
drwxr-xr-x 6 root root 4096 Jan 12 10:18 zookeeper3

四、Zookeeper配置

随便进入上面搭建的集群中一台去修改配置
这里以zookeeper1为例
进入/usr/local/zookeepers/zookeeper1/conf/目录下
可以看到zoo_sample.cfg这个就是zookeeper的配置文件模板
我们需要修改下这个配置复制重命名为zoo.cfg(默认启动的配置文件名,需要手动复制创建)

[root@VM-0-2-centos conf]# cp zoo_sample.cfg zoo.cfg

vim zoo.cfg打开编辑配置文件可以看到如下几个没被注释的配置

#zookeeper使用的基本时间度量单位,以毫秒为单位
tickTime=2000
#这个配置项是用来配置Zookeeper集群中Follower服务器初始化连接到Leader时
#最长能忍受多少个心跳时间间隔数(也就是tickTime)
initLimit=10
#这个配置项标识Leader与Follower之间发送消息
#请求和应答时间长度最长不能超过多少个tickTime的时间长度
syncLimit=5
#必须配置项,用于配置存储快照文件的目录。需要事先创建好这个目录
#如果没有配置dataLogDir,那么事务日志也会存储在此目录。
dataDir=/usr/local/zookeepers/zookeeper1/tmp/zookeeper
#zookeeper服务进程监听的TCP端口
#默认情况下,服务端会监听2181端口
clientPort=2181

dataDir修改为如上即可,除此之外 我们还需要加上如下配置

#事务日志存储地址 不配置的话和dataDir放在一起
dataLogDir=/usr/local/zookeepers/zookeeper1/tmmp/zookeeper/log
#server.A=B:C:D
#A:A是一个数字,表示这是第几个服务器
#B:这个服务器的IP地址
#C:表示的是这个服务器与集群中的Leader服务器通信的端口
#D:Leader服务器宕机用来执行选举时服务器相互通信的端口
server.1=10.206.0.2:2881:3881
server.2=10.206.0.2:2882:3882
server.3=10.206.0.2:2883:3883
#zookeeper adminServer这是jetty的嵌入式服务器
#默认8080端口 这里每个配置文件都修改一下 不冲突即可
admin.serverPort=8081

配置myid

集群模式下还要配置一个文件myid,这个文件需要放在dataDir配置项指定的目录下,这个文件里面只有一个数字,如果要写入1,表示第一个服务器,与zoo.cfg文本中的server.1中的1对应,以此类推,在集群的第二个服务器zoo.cfg配置文件中dataDir配置项指定的目录下创建myid文件,写入2,这个2与zoo.cfg文本中的server.2中的2对应。Zookeeper在启动时会读取这个文件,得到里面的数据与zoo.cfg里面的配置信息比较,从而判断每个zookeeper server的对应关系。
为了保证zookeeper集群配置的规范性,建议将zookeeper集群中每台服务器的安装和配置文件路径都保存一致。

在/usr/local/zookeepers/zookeeper1目录下创建tmp文件夹

[root@VM-0-2-centos zookeeper1]# mkdir tmp
[root@VM-0-2-centos zookeeper1]# cd tmp/
[root@VM-0-2-centos zookeeper1]# mkdir zookeeper/

进入 tmp/zookeeper文件夹后新建myid文件

[root@VM-0-2-centos zookeeper]# touch myid

vim编辑将数字1写入文件即可

以此类推配置zookeeper2、zookeeper3

[root@VM-0-2-centos zookeeper1]# cp conf/zoo.cfg /usr/local/zookeepers/zookeeper2/conf/
[root@VM-0-2-centos zookeeper1]# cp conf/zoo.cfg /usr/local/zookeepers/zookeeper3/conf/

修改配置文件中clientPort分别为2182、2183

进入tmp文件夹下复制myid文件到zookeeper2、zookeeper3
提示没有文件夹就先创建

[root@VM-0-2-centos zookeeper]# cp myid /usr/local/zookeepers/zookeeper2/tmp/zookeeper
[root@VM-0-2-centos zookeeper]# cp myid /usr/local/zookeepers/zookeeper3/tmp/zookeeper

修改myid内容分别为2、3

五、Zookeeper启动

在三个节点bin目录下依次执行如下命令,启动Zookeeper服务:

[root@VM-0-2-centos bin]# ./zkServer.sh start

jps查看是否启动成功
在这里插入图片描述
如图所示即为全部成功
QuorumPeerMain就是Zookeeper启动的进程标识

如果是报错的话可以在bin目录下使用
./zkServer.sh start-foreground
启动方式 就可以查看到错误信息

附常用操作命令

  1. 启动ZK服务: ./zkServer.sh start
  2. 查看ZK服务状态: ./zkServer.sh status
  3. 停止ZK服务: ./zkServer.sh stop
  4. 重启ZK服务: ./zkServer.sh restart

六、验证状态

进入每个Zookeeper的bin目录下查看状态

分别返回如下

#zookeeper1
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeepers/zookeeper1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

#zookeeper2
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeepers/zookeeper2/bin/../conf/zoo.cfg
Client port found: 2182. Client address: localhost.
Mode: leader

#zookeeper3
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeepers/zookeeper3/bin/../conf/zoo.cfg
Client port found: 2183. Client address: localhost.
Mode: follower

如上图可以看出zookeeper2被选为主节点

这时候我们去zookeeper2的bin目录下停掉该节点

[root@VM-0-2-centos bin]# ./zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeepers/zookeeper2/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

重新查看状态,结果如下

#zookeeper1
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeepers/zookeeper1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

#zookeeper2
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeepers/zookeeper2/bin/../conf/zoo.cfg
Client port found: 2182. Client address: localhost.
Error contacting service. It is probably not running.

#zookeeper3
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeepers/zookeeper3/bin/../conf/zoo.cfg
Client port found: 2183. Client address: localhost.
Mode: leader

这里我们就可以看到zookeeper2被关闭了,zookeeper3被重新选举为leader

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值