开发环境(develop):业务开发环境
中控机器(console):管理控制整个线上生产环境机器群
业务机器(produce):承载生产业务进程
数据库机器(database):存盘服务进程
阿里云对象存储服务OSS(https://www.alibabacloud.com/help/zh/oss)
SaltStack(https://github.com/saltstack/salt)
中控机器作为主控端(salt-master)其他机器作为受控节点(salt-minion)
rsync同步资源工具
机器关系
开发环境上传资源包到OSS对象存储桶,中控机器下载获取;
中控机作为salt主控端,负责分发资源和指令,业务机器作为受控节点,接收资源并执行指令;
业务资源包同步方案(upload):
开发环境下加密打包推送到OSS(oss put),包体类型支持整包/补丁包,中控机器下载资源包(oss get),根据包体类型解包更新中控机资源;
支持配置切换OSS域名,支持中断重传、查看操作历史记录等;
线上同步资源方案(sync):
使用类unix系统下的rsync工具,配合salt实现并行分发资源;
for produce in produces :
cmd = "rsync ..." # 下发rsync命令
kwarg = { "cmd": cmd }
jid = salt.cmd_async(tgt=produce.ip, fun="cmd.run", kwarg=kwarg, ...) # 异步执行
#查询执行结果
for produce in produces:
ret = salt.get_cache_returns(produce_jid)
print(ret)
btw,如果同步资源的方案是:中控机遍历目标业务机器顺序执行rsync操作,缺点是同步流程中断或者卡顿会影响到后续所有的业务机器。在同步大量数据、网络情况差(业务机器和中控机不一定在相同内网)的场景下,操作超时和中断的明显,工具稳定性差。
存盘服务部署(initdb):这里以mongodb为例
数据库选型以及集群部署模式都跟业务强相关,安装部署流程依据特定产品的文档说明执行,需要整理落地成初始化脚本,由中控机同步到数据库机器执行;
上述是自建数据库的方案,如果是直接使用云上产品(比如阿里云的mongodb数据库产品)则省略这部分。
创建读写用户和只读用户并授权指定库的权限