运维自动化实践之路


运维自动化实 践之路 @InfoQ infoqchina • 3年应用运维 • 3年运维自动化建设 2005 ~ 2012 BAIDU • 应用运维团队 • 运维自动化事务 2013 ~ 今 小米 自我介绍 微博:http://weibo.com/xingfuge613 搭业 务环 境 改配 置 线上 升级 迁移 扩容 关联 变更 运维基础设施 部署 监控 名字 服务 配置管理数据库 调度 服务树&机器管理&… OUTLINE 服务管理 部署系统 规范要求 未来 服务管理 – 服务树 公司 部门 产品 服务 服务实例 分组 服务实例 服务实例 状态 地域 机房 组织结构 系统架构 集群 物理位置 服务 树 机器 权限 监控 部署 服务管理 – 服务树 机器TAG形式进行标记 根据TAG动态筛选机器 cop.xiaomi_owt.miliao_pdl.im_service.xiaomi- mq_jobgroup.micloud_job.xmq-micloud-cell01- micloud011_status.service_loc.bj_idc.sd_cluster.production-sd APP SERVER GOD 自动部署 – AESIR WEB ODIN Build Server APP SERVER FRIGGA THOR …… GOD FRIGGA THOR Service Tree Naming 部署系统 - WEB 部署系统 - WEB 部署系统 - WEB Cluster.yml cluster: name: dch version: 1.0.0.1 env: production jobs: [job.database-change-handler_ service.database-change-handler_cluster.preview_ pdl.account_owt.miliao_cop.xiaomi, xxxx, xxx] dch: host: [10.237.37.43, 10.237.37.45, 10.237.37.46] user: work version: 93043 path: /home/work/passport-dch pkg_url: ftp:// db_passwd:xxxx backup_key:68e7012d5bdca6eaceeb2682e4b20a96 mon_value: mon.template.yml 部署系统 – ODIN WEB生成 cluster.yml 文件 ODIN解析 cluster.yml 下载PKG并重 新生成发布包 触发host中机 器的FRIGGA Config.template.yml base: basedir: "$" user: "$< user >" mod_name: "$< name >" db_password: "$< db_passwd >" tag: "$< job >" #app running control mod_start: "${basedir}/bin/run.sh" mod_stop: "${basedir}/bin/stop.sh" to_email: xxx@xiaomi.com production: zookeeper_host: zk.xiaomi.com staging: zookeeper_host: zk.staging.xiaomi.com Init.yml Dch: type:file name:${basedir}/conf/dch.conf source:template( "dch.conf.erb") monitor: type: mon name: ${basedir}/conf/mon.conf source:template("mon.conf.erb") backup: type: backup name: ${basedir}/conf/backup.conf source:template("backup.conf.erb") 部署系统 – THOR 下载要部署的 包文件 替换模板生成 临时配置 根据配置进行 文件的部署 生成GOD启动 配置 触发GOD启动 程序 部署系统 – GOD God.watch do |w| w.ver = "139594" w.name = "job.database-change-handler_service.database-change- handler_cluster.production-sd_pdl.account_owt.miliao_cop.xiaomi" w.start = "sh /home/work/database-change-handler/bin/DbEventListener.sh -r" w.gid = "root" w.uid = "root” w.log = "/data/soft/database-change/logs/database-change.log" w.dir = "/home/work/database-change-handler/” w.cron = "/etc/god_cron.d/job.database-change-handler_service.database-change- handler_cluster.production-sd_pdl.account_owt.miliao_cop.xiaomi.cron” w.stop_timeout = 300.seconds w.lifecycle do |on| on.condition(:flapping) do |c| c.to_state = [:start, :restart] c.times = 3 c.within = 10.minute c.notify = 'proc_down' end end end 部署系统 – 管理 部署系统 – 管理 部署系统 – 持续部署 Odin.rb –f cluster.yml Thor –f cluster.yml god status 规范要求 发布过程 • 发布版本管理 • 打包格式一致 目录结构 • 发布包结构固定 • 日志与程序分离 • 数据与程序分离 系统环境 • lib库 • 解释器 • 命令行 Runtime依赖 • 系统依赖 • 模块依赖 统一模块控制方式 • 启停 • reload 关联配置解耦 • 模块间RPC配置 • 开关类配置 • 功能逻辑配置 规范要求 – 目录结构 发布包结构 Passport-agent |- release |- target |- deploy |- config.template.yml |- init.yml | - 模板目录 |- dch.conf.erb 程序、数据分离 /home/work/passport-agent |- bin |- conf /data/passport-agent |- log |- dict 规范要求 – 环境 统一系统内核、发行版、初始环境 编译环境 解释器 系统Lib 关键配置依赖 命令行 C B A 规范要求 - Runtime依赖 Serveice Package B Runtime PHP-5.5.10 Runtime NGINX-1.4.6 Runtime RabbitMQ-3.3.0 deploy 优点 部署动作简单 不污染系统及其业务 问题 权限 公有、私有runtime Runtime PHP-5.5.09 Runtime NGINX-1.4.3 Runtime Redis-2.8.8 Service Package A B A online online B A online 规范要求 - 解耦关联配置 A A B B B B A A B B B B Naming service Naming所做 抽取连接类信息 树状结构 固定tag组合查询 区域化解析 Naming不做 配置管理 实时通知 未来 - 资源隔离 节省硬件资源,约 15% 容易动态调整资源 资源隔离更彻 底 资源 CPU MEMORY DISK QUOTA DISK IO NET IO IP PORT PATH 虚拟化 KVM 容器 LXC 未来 - 动态筛选、调度 筛选器 网络 分布 物理 分布 资源 CMDB 动态资源 数据库 调度器 创建容器 目标:noops 技术博客:http://www.noops.me/ About Us Thanks! 特别感谢合作伙伴 特别感谢媒体伙伴(部分)
还剩27页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

mnd5

贡献于2014-06-16

下载需要 3 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf