Zookeeper分布式应用协调软件的核心概念以及部署

文章目录

    • 1.Zookeeper分布式协调软件核心概念
      • 1.1.什么是Zookeeper
      • 1.2.Zookeeper的核心功能
    • 2.部署Zookeeper单节点模式
      • 2.1.安装JAVA环境
      • 2.2.安装并配置Zookeeper服务
      • 2.3.启动Zookeeper

1.Zookeeper分布式协调软件核心概念

Zookeeper官网:https://zookeeper.apache.org/

1.1.什么是Zookeeper

Zookeeper是分布式协调服务,Zookeeper是Apache Hadoop项目下的一个子项目,是树形目录服务结构,可以理解为Zookeeper就是来管理分布式应用程序的,简称ZK。

Zookeeper自身就是一种分布式的架构,主要为分布式应用程序提供一种协调性服务。

Zookeeper公开了一组简单的原语,分布式应用程序可以基于这些原语实现更高级别的同步、配置维护、组和命名服务。它被设计为易于编程,并使用一种数据模型,该模型以熟悉的文件系统目录树结构为样式。它在 Java 中运行,并具有 Java 和 C 的绑定。众所周知,协调服务很难做好。它们特别容易出现竞争条件和死锁等错误。ZooKeeper 背后的动机是减轻分布式应用程序从头开始实现协调服务的责任。

1.2.Zookeeper的核心功能

1)配置管理

应用程序中处于代码部分就是各种配置文件了,例如连接数据库、环境变量等等配置文件,一般情况下都是直接在程序中使用配置文件的方式获取信息,如果我们WEB服务只有少数几台还好,如果WEB服务器有很多上百台,并且需要经常性的修改,这种情况使用配置文件的方式就比较麻烦了。

基于以上情况,就非常需要一种能够集中管理配置的工具,当配置发送了变化时,我们就可以在这个工具中去调整配置参数,所有连接配置中心的程序都可以得到配置变更,无需在每个WEB服务器上进行操作,做到一次修改,全部应用的现象,虽然配置中心这种工具非常方便,但是连接配置中心的程序就会有很多,很多的服务就会依赖这个配置中心,如果配置中心宕机,那么就会导致所有程序不可用,因此我们还需要保证配置中心的服务具备高可用性。

Zookeeper的典型应用场景就是配置中心,Zookeeper本身就是分布式架构,自带高可用性,并且Zookeeper通过ZAB协议提供一致性服务,在很多应用程序中都会依赖Zookeeper进行配置管理,例如Kafka就会利用Zookeeper来维护Broker的信息,Dubbo也会使用Zookeep管理配置实现服务治理。

将配置信息存储在Zookeeper的Znode中,程序通过Znode的名称获取对应的配置信息

Zookeeper分布式应用协调软件的核心概念以及部署_第1张图片

4)名称服务

所谓的名称服务是指的域名与IP的解析记录,通常情况下,程序之间的调用是通过域名进行调度的,但是走域名又会消耗大量带宽,因此都会把内网IP和域名的对应关系记录在/etc/hosts文件中,当服务器少的时候还可以接受工作量,当维护的服务器数量成百上前台时,就不是那么好维护了。

基于这种情况,Zookeeper就起到作用了,Zookeeper可以用作记录域名和IP的中心点,我们只需要维护好Zookeeper即可。

3)分布式锁

分布式锁经常会在分布式的架构中出现,如果是单体应用架构,同时来了3条一模一样的请求都去操作相同的数据,程序会先放行第一条请求,随之就会将第二条第三条请求上一个锁,使这两条请求处于等待状态,当第一条请求处理完成后,在把锁打开,允许下一条请求进入,保证系统数据的协同性。

但是在分布式的系统架构中,三个请求会被轮询转发至随机节点,每个节点都认为收到的请求是第一条请求,都不会产生锁,那么就会导致用户数据错乱。

基于分布式环境中的这类问题,就可以利用Zookeeper的分布式锁来实现,在某一个时间只允许一个应用服务去处理,例如同时进入三条请求,第一条请求已经在处理中了,第二三条请求就会被Zookeeper拦截,处于等待状态,并且给通道上锁,当第一条请求处理完毕,再解锁,放行后面的操作请求。

Zookeeper分布式应用协调软件的核心概念以及部署_第2张图片

4)集群管理

Zookeeper还可以充当注册中心来使用,所有的应用程序将信息注册到Zookeeper中,Zookeeper可以感知新老节点的加入或者退出。

Zookeeper还可以为无法进行高可用选举的集群充当选举角色,例如ActiveMQ集群。

2.部署Zookeeper单节点模式

2.1.安装JAVA环境

[root@zookeeper ~]# tar xf jdk-8u211-linux-x64.tar.gz -C /data/
[root@zookeeper ~]# vim /etc/profile
JAVA_HOME=/data/jdk1.8.0_211
PATH=$JAVA_HOME/bin:$PATH
[root@zookeeper ~]# source /etc/profile
[root@zookeeper ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

2.2.安装并配置Zookeeper服务

1.部署Zookeeper
[root@zookeeper ~]# tar xf apache-zookeeper-3.5.8-bin.tar.gz -C /data/
[root@zookeeper ~]# mv /data/apache-zookeeper-3.5.8-bin/ /data/zookeeper

2.创建数据存储路径
[root@zookeeper ~]# mkdir /data/zookeeper/zkdata

3.修改配置文件
[root@zookeeper ~]# cp /data/zookeeper/conf/zoo_sample.cfg /data/zookeeper/conf/zoo.cfg 
[root@zookeeper ~]# vim /data/zookeeper/conf/zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/zkdata
clientPort=2181

2.3.启动Zookeeper

1.启动zookeeper
[root@zookeeper ~]# /data/zookeeper/bin/zkServer.sh start
/usr/local/jdk1.8.0_211/bin/java
ZooKeeper JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

2.查看zookeeper的状态
[root@zookeeper ~]# /data/zookeeper/bin/zkServer.sh status
/usr/local/jdk1.8.0_211/bin/java
ZooKeeper JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone				#独立模式表示为单节点

3.查看zookeeper的端口号
[root@zookeeper ~]# netstat -lnpt | grep java
tcp6       0      0 :::8080                 :::*                    LISTEN      8446/java           
tcp6       0      0 :::41943                :::*                    LISTEN      8446/java           
tcp6       0      0 :::2181                 :::*                    LISTEN      8446/java 

你可能感兴趣的:(ActiveMQ,java-zookeeper,zookeeper,java)