浅谈 Zookeeper 集群

82 阅读2分钟

前言

Zookeeper 作为 Hadoop 生态园的中的一个组件,有着强大的功能,如文件系统、监听通知机制。

那么关于 Zookeeper 的集群,大家又了解多少呢,今天带大家初步了解一些关于 Zookeeper 集群的知识点。

Zookeeper 的节点

  • 每一个节点都被称为znode
  • 每一个znode中都可以存储数据
  • 节点名称是不允许重复的

Zookeeper 集群架构

  1. 是有主从之分的
  2. Zookeeper 集群中必须有 master 节点,否则 Zookeeper 无法正常工作
  3. master 节点:执行读写操作
  4. slave 节点:执行读操作
  5. Zookeeper 集群的投票,在没有 master 节点时,会重新选举。

Zookeeper 集群中节点的角色

  1. Leader:Master 主节点
  2. Follower (默认的从节点):从节点,参与选举全新的 Leader
  3. Observer:从节点,不参与投票
  4. Looking:正在找 Leader 节点

Zookeeper 投票策略

  • 每一个 Zookeeper 服务都会被分配一个全局唯一的 myid,myid 是一个数字。
  • Zookeeper 在执行写数据时,每一个节点都有一个自己的 FIFO(First Input First Output)的队列。保证写每一个数据的时候,顺序是不会乱的,Zookeeper 还会给每一个数据分配一个全局唯一的 zxid (事务id),数据越新 zxid 就越大。

选举 Leader:

  • 选举出 zxid 最大的节点作为 Leader。
  • 在 zxid 相同的节点中,选举出一个 myid 最大的节点,作为 Leader。

搭建 Zookeeper 集群

  • 配置 yml 文件
version: "3.1"
services:
  zk1:
    image: zookeeper
    restart: always
    container_name: zk1
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
  zk2:
    image: zookeeper
    restart: always
    container_name: zk2
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
  zk3:
    image: zookeeper
    restart: always
    container_name: zk3
    ports:
      - 2184:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181