三十五、基于web的zk管理工具shepher

基于web的zk管理工具shepher

Shepher 是一款 ZooKeeper 的管理工具。在小米公司,我们用它作为配置管理中心。Readme in English

特性

  • ZooKeeper 节点的可视化操作
  • ZooKeeper 节点的快照管理
  • ZooKeeper 节点修改的 Diff 和 Review 功能
  • ZooKeeper 节点操作邮件通知
  • 集成 CAS 和 LDAP 登录
  • 权限管理,参照 权限管理说明

同类产品功能对比

产品 简介 节点的可视化操作 快照管理 节点修改的 Diff 和 Review 功能 节点操作邮件通知 CAS 和 LDAP 登录 权限管理 级联删除 系统状态监控
Shepher ZooKeeper 管理    
TaoKeeper ZooKeeper 集群监控与报表              
Zkdash ZooKeeper 管理          
Disconf ZooKeeper 管理    
XDiamond 配置中心        

系统截图

  • 首页 三十五、基于web的zk管理工具shepher

  • 节点查看 三十五、基于web的zk管理工具shepher

安装

环境要求

  • JDK 1.8
  • Maven 3.2 +
  • MySQL 5.6

基本配置

  • 修改 db/init.sql 中的 INSERT INTO user VALUES (1,'youradmin',now()); ,将 youradmin 改为你的管理员用户名
  • 参照 参数说明,设置 shepher-web/src/main/resources 目录下的参数配置。如果使用 CAS 登录,则需要修改 CAS 相关的配置,并且将 server.login.type 设置为 CAS;如果使用 LDAP 登录,则需要修改 LDAP 相关的配置,并且将 server.login.type 设置为 LDAP

开发环境部署

开发环境部署包括本地编译部署和 Docker 部署两种方式,用户可以根据使用习惯选择一种部署方式。

编译

  1. 参照 参数说明 修改 conf/application-default.properties 的参数配置

  2. 本地编译

    $ mvn clean package 
    $ cd shepher-packaging/target/shepher-packaging-{version}-bin
    $ ls
    bin/(all the shell scripts)
    conf/(configuration files)
    db/init.sql
    lib(required jar files)
    Dockerfile
    docker-compose.yml
    CHANGES.txt
    NOTICE.txt
    README.md
    README-zh.md
    VERSION
    

    这里, {version} 是指当前 Shepher 的版本。

本地部署

  1. 将 db/init.sql 导入到 MySQL

  2. 进入到安装目录

    $ cd shepher-packaging/target/shepher-packaging-{version}-bin
  3. 运行脚本,启动服务 Shepher

    $ sh bin/run.sh start 
  4. 在浏览器中访问 http://localhost:8089 或自定义的 server.url (参照 参数说明

Docker 部署

使用 Docker 部署则自动集成 MySQL 和 ZooKeeper,并且自动将 db/init.sql 导入MySQL中,不需要自行安装。

  1. 安装 Docker,以 Ubuntu 系统为例,安装 docker engine 和 docker-compose

  2. 进入到安装目录

    $ cd shepher-packaging/target/shepher-packaging-{version}-bin
  3. 运行脚本,启动服务 Shepher, 等待 Docker 中的各个容器启动完成

    $ sh bin/docker-run.sh start
  4. 在浏览器中访问 http://localhost:8089 或自定义的 server.url (参照 参数说明

生产环境部署

生产环境部署的步骤跟本地编译部署类似,主要注意对数据源、CAS/LDAP 以及域名的设置。另外,由于各个公司内部的邮件服务较为封闭,在线上使用中需要自己实现 CustomMailSender 类,并在 shepher-web/src/main/resources/application.properties中设置 mail.sender=customMailSender,以便 Shepher 服务可以正常使用邮件服务。

  1. 将 db/init.sql 导入到 MySQL

  2. 创建 conf/application-online.properties 文件,参照 参数说明 添加和修改配置

  3. 在 Shepher 根目录下运行命令

    $ mvn clean package
  4. 将安装目录 shepher-packaging/target/shepher-packaging-{version}-bin 拷贝到线上,然后进入到该目录

    $ cd shepher-packaging/target/shepher-packaging-{version}-bin
  5. 执行下面命令启动 Shepher

    $ sh bin/run.sh -c conf/application.properties,conf/application-online.properties start 
  6. 在浏览器中访问 http://localhost:8089 或自定义的 server.url (参照 参数说明

权限管理说明

设计思路

与常见的管理员统一管理所有权限不同,本项目将权限以小组为单位授权,采用管理员管理小组,小组的组长管理组内成员的方式。这种分级的权限管理模式大大减少了管理员的审核负担,组内自治也增加了灵活性。

权限管理结构图: 其中,zookeeper的权限以节点为单位,小组向管理员申请权限,由超级管理员负责审核和授权。小组成员由用户组成,用户可以选择创建新的小组或者加入已有的小组。

三十五、基于web的zk管理工具shepher

功能说明

超级管理员

超级管理员都属于一个特殊的小组 -- admin,需要负责如下管理:

  • 审核小组的权限申请(同意/拒绝)
  • 给小组授予某个节点的权限

权限

权限是以节点为粒度划分的,是以小组为单位下放的。

  • 节点权限:每个节点由集群和路径唯一确定,拥有父节点权限即拥有该节点的子节点权限

小组

小组角色

小组成员分为不同的角色,目前有三种角色:

  • master:小组的管理者。可以管理组内成员,向管理员申请权限;拥有节点的增、删、改权限
  • developer:开发者。拥有节点的增改权限,没有删除权限
  • member:暂时同developer

一个小组可以拥有多个节点的权限,同一小组的所有成员共享节点权限。 小组成员均可增改该小组拥有权限的节点,但只有小组的 master 能够删除节点。

小组管理

  • 处理用户的入组申请
  • 添加/删除小组成员
  • 更改小组成员的角色
  • 申请新的节点权限

用户

用户在操作节点前需要申请权限,主要有两种方式:

  • 新建小组:用户在新建小组的时候即会对当前节点发出权限申请,待管理员审核通过即可
  • 申请入组:用户申请加入拥有某个节点权限的任意小组,等待小组 master 同意即可

使用方法

本部分主要介绍系统功能入口,并附上效果截图。

域名和端口号为 serverName:serverPort,下文只给出相对链接。

超级管理员

  • 集群管理: /admin

  • 权限管理: /permission

小组管理

  • 该用户所属小组列表: /teams

  • 小组成员管理: /teams/{teamId}/manage

  • 小组权限管理: /teams/{teamId}/permission

用户申请

  • 用户申请权限: /teams/apply?path=/zookeeper&cluster=local_test