• 1. zookeeper分布式协调者


    一、zookeeper介绍

    作用:分布式系统中,用于协调者、集群管理、配置管理、命名服务, 解决分布式系统中一致性的问题
    开源、Apache组件

    1、软件设计架构

    1.1 单体架构

    所有的业务模块集成在一起的,不利于项目更新、维护、扩展

    1.2 SOA架构/分布式

    根据业务的功能模块将完整的项目划分成多个独立模块,便于扩展、更新
    需要提供集中式的服务管理、配置管理、集群管理、数据一致性功能
    拆分粒度粗

    1.3 微服务架构

    相对于SOA架构来,拆分粒度细

    二、zookeeper角色

    1、角色

    • leader
      主角色
      处理数据
      维持与follower的心跳,接收处理follower的消息
    • follower

    在这里插入图片描述

    2、选举机制

    目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:
    服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking(选举状态)。
    服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
    服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
    服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
    服务器5启动,后面的逻辑同服务器4成为小弟。

    3、znode类型

    zookeeper的节点统一叫做znode

    根据节点的生命周期,znode可以分为4种类型,分别是持久节点(PERSISTENT)、持久顺序节点(PERSISTENT_SEQUENTIAL)、临时节点(EPHEMERAL)、临时顺序节点(EPHEMERAL_SEQUENTIAL)

    三、zookeeper集群部署

    1、环境规划

    192.168.140.10 node01 jdk/zookeeper
    192.168.140.11 node02 jdk/zookeeper
    192.168.140.12 node03 jdk/zookeeper

    2、安装jdk

    [root@node01 ~]# tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/
    
    [root@node01 ~]# vim /etc/profile
    export JAVA_HOME=/usr/local/jdk1.8.0_91
    export PATH=$PATH:$JAVA_HOME/bin
    
    [root@node01 ~]# source /etc/profile
    
    [root@node01 ~]# java -version
    java version "1.8.0_91"
    Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
    Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
    

    3、安装配置zookeeper

    3.1 安装zookeeper

    [root@node01 ~]# tar xf apache-zookeeper-3.7.1-bin.tar.gz -C /usr/local/
    [root@node01 ~]# mv /usr/local/apache-zookeeper-3.7.1-bin/ /usr/local/zookeeper37
    
    [root@node01 ~]# cp /usr/local/zookeeper37/conf/zoo_sample.cfg /usr/local/zookeeper37/conf/zoo.cfg
    

    3.2 编辑配置文件

    [root@node01 ~]# mkdir /usr/local/zookeeper37/data
    [root@node01 ~]# mkdir /usr/local/zookeeper37/log
    
    [root@node01 ~]# vim /usr/local/zookeeper37/conf/zoo.cfg
    dataDir=/usr/local/zookeeper37/data
    dataLogDir=/usr/local/zookeeper37/log
    
    clientPort=2181
    
    server.1=192.168.140.10:2888:3888
    server.2=192.168.140.11:2888:3888
    server.3=192.168.140.12:2888:3888
    
    2888: 心跳端口
    3888:数据同步端口
    

    3.3 创建myid文件

    [root@node01 ~]# echo 1 > /usr/local/zookeeper37/data/myid
    

    另外两台主机参考上述配置,注意修改myid文件

    4、启动zookeeper,验证状态

    第一台主机启动:

    [root@node01 bin]# ./zkServer.sh start 
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    [root@node01 bin]# 
    [root@node01 bin]# ./zkServer.sh status 
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Error contacting service. It is probably not running.
    
    // 待第二台主机启动后,再次查看状态
    [root@node01 bin]# ./zkServer.sh status 
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    

    第二台主机启动:

    [root@node02 ~]# cd /usr/local/zookeeper37/bin/
    [root@node02 bin]# ./zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    
    [root@node02 bin]# ./zkServer.sh status 
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: leader
    
    

    第三台主机启动:

    [root@node03 ~]# cd /usr/local/zookeeper37/bin/
    
    [root@node03 bin]# ./zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    
    [root@node03 bin]# ./zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper37/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    
    
  • 相关阅读:
    js堆栈函数及断点调试(简单使用,仅供自己参考)
    数据库基本语法
    Redis的底层数据结构分析
    [附源码]java毕业设计潮流服饰网店平台
    【Java】反射、注解、动态代理总结
    @Transactional 注解使用详解
    C# async / await 用法
    Java Persistence API (JPA) 之 EntityManager
    [Linux]NFS文件共享服务
    <MySQL> 查询数据进阶操作 -- 聚合查询
  • 原文地址:https://blog.csdn.net/u010198709/article/details/139760923