三十五、基于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 | 配置中心 | √ | √ | √ | √ |
系统截图
-
首页
-
节点查看
安装
环境要求
- 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 部署两种方式,用户可以根据使用习惯选择一种部署方式。
编译
-
参照 参数说明 修改
conf/application-default.properties
的参数配置 -
本地编译
$ 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 的版本。
本地部署
-
将
db/init.sql
导入到 MySQL -
进入到安装目录
$ cd shepher-packaging/target/shepher-packaging-{version}-bin
-
运行脚本,启动服务 Shepher
$ sh bin/run.sh start
-
在浏览器中访问
http://localhost:8089
或自定义的server.url
(参照 参数说明)
Docker 部署
使用 Docker 部署则自动集成 MySQL 和 ZooKeeper,并且自动将 db/init.sql
导入MySQL中,不需要自行安装。
-
安装 Docker,以 Ubuntu 系统为例,安装 docker engine 和 docker-compose
-
进入到安装目录
$ cd shepher-packaging/target/shepher-packaging-{version}-bin
-
运行脚本,启动服务 Shepher, 等待 Docker 中的各个容器启动完成
$ sh bin/docker-run.sh start
-
在浏览器中访问
http://localhost:8089
或自定义的server.url
(参照 参数说明)
生产环境部署
生产环境部署的步骤跟本地编译部署类似,主要注意对数据源、CAS/LDAP 以及域名的设置。另外,由于各个公司内部的邮件服务较为封闭,在线上使用中需要自己实现 CustomMailSender
类,并在 shepher-web/src/main/resources/application.properties
中设置 mail.sender=customMailSender
,以便 Shepher 服务可以正常使用邮件服务。
-
将
db/init.sql
导入到 MySQL -
创建
conf/application-online.properties
文件,参照 参数说明 添加和修改配置 -
在 Shepher 根目录下运行命令
$ mvn clean package
-
将安装目录 shepher-packaging/target/shepher-packaging-{version}-bin 拷贝到线上,然后进入到该目录
$ cd shepher-packaging/target/shepher-packaging-{version}-bin
-
执行下面命令启动 Shepher
$ sh bin/run.sh -c conf/application.properties,conf/application-online.properties start
-
在浏览器中访问
http://localhost:8089
或自定义的server.url
(参照 参数说明)
权限管理说明
设计思路
与常见的管理员统一管理所有权限不同,本项目将权限以小组为单位授权,采用管理员管理小组,小组的组长管理组内成员的方式。这种分级的权限管理模式大大减少了管理员的审核负担,组内自治也增加了灵活性。
权限管理结构图: 其中,zookeeper的权限以节点为单位,小组向管理员申请权限,由超级管理员负责审核和授权。小组成员由用户组成,用户可以选择创建新的小组或者加入已有的小组。
功能说明
超级管理员
超级管理员都属于一个特殊的小组 -- 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