golang实战:felix-slim
介绍
受felix-plus启发,在felix的基础上做了优化
通过部署 felix-slim 环境,运维人员可以在成千上万台服务器上做到批量执行命令,根据不同的业务特性进行配置集中化管理,分发文件,采集系统数据及软件包的安装与管理等.
- 相对于felix-plus来说部署简单,依赖简单
- 100%go代码,编译支持多平台,现在在linux(centos) 和windows10平台上继续开发和测试,其他平台未知
旧系统架构图
master架构
minion架构
Feature
- 依赖简洁:任何linux服务器都可以执行(理论上unix服务器也可以运行 我的开发环境windows10),完全
golang
编写支持编译成多平台可执行文件 - 安装简单:只需要部署master和minion两个二进制文件,二进制文件第一次运行的时候会帮助您生成默认配置文件
- gRPC+TLS:minion和master之间通讯使用gRPC和自生成证书,通讯安全可靠,gRPC服务器之间通讯对资源要求少
- slack收集日志:
原理架构
minion安装机制
消息流程图
master功能
- 对外提供HTTP-RESTful-APIs
- minion 管理展示服务器状态
- 提供minion服务器注册添加接口
- 执行shell/exe/script命令的接口
- 和minion服务器进行gRPC通讯
- 向第三方推送命令执行的日志
命令:
master服务:提供HTTP服务,也是一个gRPC客户端,保存数据到master.db(sqlite.db)
Usage:
master [command]
Available Commands:
help Help about any command
restart master服务重启
start master服务启动
stop master服务停止
update master服务更新
version 版本信息
minion
- 生成自签名的私有证书
- 根据配置文件master地址,注册自己,推送私有证书公钥到master,master根据这个公钥,发布执行命令
- 提供grpc安全认证根据推送给master的私有证书公钥
- 提供grpc接口让master发布执行命令
- 提供grpc接口让master知道minon服务器健康状态
命令:
minon服务器:grpc + TLS 服务器,执行shell命名
Usage:
minion [command]
Available Commands:
help Help about any command
restart minion服务重启
start minion服务启动
stop minion服务停止
update minion服务更新
version 版本信息
部署流程
- 安装master服务器
- 配置master服务器的端口
- 安装minion服务器
- 配置master服务器的地址和端口
- 启动minion服务器
- minion创建私有证书
- 推送minion信息(ip,hostname,私有证书的公钥)到master
- master注册(保存)minon的信息到数据库(sqlite.db)
- 启动根据私有证书启动TLS+gRPC服务
- 重复3,4步继续添加添加minion服务器
命令流程
- 第三方接口向master POST 执行脚本参数,参数说明
- id: 脚本执行完成之后的日志推送,原封不动的返回给第三方回调接口
- callback_url: 第三方服务自己定义接受推送的日志接口
- cmd_line: 执行命令(包含参数) eg:
nginx reload
./sh.sh '参数'
someBinary "参数"
- cmd_type: line 命令行 script 脚本 file 文件(任意类型)
- file: 脚本 文件 内容.
- minion_ip: 执行服务器的ip
- master接受到第三方发送的执行参数
- 查找保存在sqlite.db中对应minion服务器的公钥
- 创建grpc+TLS连接,验证master的身份
- 发送minion执行命令的参数
- minion收到执行命令的参数,开始执行命令
- minion把执行结果和日志返回给master
- master收到执行结构和执行日志
- 根据callback_url 推送命令执行的结构到第三方服务器
- 第三方服务器更具ID知道支持命令和日志之间的对应关系
编译
下载代码和依赖包
cd $GOPATH/src && git clone https://github.com/libragen/felix
go get github.com/spf13/cobra
go get github.com/spf13/viper
go get github.com/gin-gonic/gin
go get github.com/jinzhu/gorm
go get github.com/mattn/go-sqlite3
go get github.com/golang/protobuf/proto
go get golang.org/x/net/context
go get google.golang.org/grpc
go get github.com/johntdyer/slackrus
编译和运行
- 编译运行master :
cd $GOPATH/src/felix-slim/apps/master && go build && ./master help
- 编译运行master :
cd $GOPATH/src/felix-slim/apps/minion && go build && ./minion help