360 likes | 724 Views
Puppet 应用与架构. 吴问志. 网站:www.mysqlops.com/category/puppet 邮箱: puppetfans@sina.com 微博:puppetfans@sina.com. 2012 华东运维技术大会 www.mysqlops.com. 机器越来越多 应用越来越复杂 架构越来越复杂 审记越来越难. 引言. 2012 华东运维技术大会 www.mysqlops.com. 1.puppet 介绍 - 什么是 puppet - puppet 能做什么
E N D
Puppet 应用与架构 吴问志 网站:www.mysqlops.com/category/puppet 邮箱: puppetfans@sina.com 微博:puppetfans@sina.com 2012华东运维技术大会 www.mysqlops.com
机器越来越多 应用越来越复杂 架构越来越复杂 审记越来越难 引言 2012华东运维技术大会 www.mysqlops.com
1.puppet 介绍 - 什么是puppet - puppet 能做什么 - puppet 如何做到 - puppet 目录结构介绍 2.运维自动化工具对比 - puppet vs cfengine - puppet vs chef 3.puppet 使用时注意事项 4.puppet 应用案例 -puppet 管理用户 -puppet nginx 管理 -puppet kick 介绍 -puppet MCollective 介绍 - puppet func 介绍 5.puppet 架构与集群 -puppet 架构 -puppet 集群方案 - puppet 集群核心思想 -puppet性能测试方法 6. QA -puppet 未来 内容概要 2012华东运维技术大会 www.mysqlops.com
什么是puppet 遵循GPL 协议(2.7.0),基于ruby 语言开发的系统配置管理工具 说明性语言表达系统,用库实现配置 基于C/S架构,配置客户端和服务端,也可以独立运行 puppet 对于系统管理员是抽象,只依赖于ruby与facter. 默认情况下,客户端每30分钟连接到puppetmaster puppet 能做什么 puppet 能管理多达将40多种资源管理,例如:file,user group, host,package,service,cron,exec,yumrepo适合整个软件生命周期管理。 注:2.7.0以后使用(Apache 2.0 license ) 注:puppet特殊资源--虚拟资源 . puppet 有个特殊的Type,例如Package,User等。这个Type就是告诉puppet被管理的是什么资源。 puppet 介绍
puppet 的适用场景 2012华东运维技术大会 www.mysqlops.com
puppet 是如何工作的 2012华东运维技术大会 www.mysqlops.com
puppet 工作流程 注:内部处理过程是抽象的 2012华东运维技术大会 www.mysqlops.com
Puppet 三层模型 package { "nginx": ensure => installed, } Puppet 模型参考 2012华东运维技术大会 www.mysqlops.com
puppet 工作流程分拆 2012华东运维技术大会 www.mysqlops.com
Facter是什么 facter是内置的puppet工具,它提供的一个标准方式去获得客户端环境变量等相关信息 Facter能获得哪些信息 #facter -p architecture => x86_64 id => root interfaces => eth0,lo ipaddress => 192.168.200.63 ipaddress_eth0 => 192.168.200.63 。。。。。。。 ikernprocessor0 => Intel(R) Xeon(R) CPU E5405 @ 2.00GHz prouptime => 27 days uptime_days => 27 uptime_hours => 651 uptime_seconds => 2344200 注:这些变量可以直接来使用,例如: {$::ipaddress}或者$::ipaddress 当然你也可以自定义fact,需要使用ruby来编写。 Facter介绍 2012华东运维技术大会 www.mysqlops.com
puppet 目录结构 (右一) 注:manifests/site.pp必须存在 puppet 模块结构(右二) 注: manifests/init.pp必须存存 puppet 目录结构与模块介绍 2012华东运维技术大会 www.mysqlops.com
puppet VS cfengine Puppet 与其它自动化工具对比 puppet VS chef 2012华东运维技术大会 www.mysqlops.com
Puppet 使用注意事项 2012华东运维技术大会 www.mysqlops.com • 1.主机名使用FQDN格式命名,需要DNS或者hosts解析 • 2.C/S两端时间要同步,SSL认证依赖于时间 • 3.ssl认证过后,请不要修改主机名 • 4.Usecachefaiure • 5.tag 和tagged • 6.节点可以继承,但不能多重继承 • 7.类可以继承与覆盖,子类可以向父类添加额外属性值 • 8.puppet 支持多环境部署(分:开发、测试、线上) • 9.tidy 资源中多条件关系是或者,而不是and • 10.选择正确的版本
1.节点设置tag tag("old-slow-server") if tagged("old-slow-server") { notify { "this will succeed": } } 2.对资源设置tag file { "/etc/ssh/sshd_config": ... notify => Service["ssh"], tag => "ssh", } # puppet agent --test --tags ssh 1,类继承示例 class nginx::port81 inherits nginx { .... } 错误示例 class nginx::port81 inherits nginx ,apache { .... } 子类向父类添加额外属性 Service["nginx"] { require +> File[/"etc/nginx/conf.d/nginx81.conf"], } } Puppet 使用时注意事项 2012华东运维技术大会 www.mysqlops.com
Puppet 管理用户(关于:管理用户的几点说明 a. puppet 支持ldap以及nis集中认证 b.puppet 支持用户密码管理,最好以''(单引号)括起来 c. puppet 建用户的默认是不建家目录的,需要使用managerhome=>true puppet 管理nginx puppet kick Puppet MCollective Puppet func Puppet 的应用案例 2012华东运维技术大会 www.mysqlops.com
以@为前缀 使用虚拟资源需要配置storeconfig 虚拟资源使用场景 多个资源需要引用共同的某个资源实例,例如A用户是SA,又是DBA puppet 虚拟资源 2012华东运维技术大会 www.mysqlops.com
Exec有条件的执行: creates:指定命令所生成的文件那么命令只会在所指定的文件不存在的情况的被执行 unless:所设定的命令返回0时才执行 onlyif:只会在onlyif设定的命令返回0时才执行 refreshonly:触发刷新动作。 资源之间依赖关系: before 、 after、 require 资源之间触发 subscribe notify 友情提示: refreshonly,refresh的区别 refreshonly:收到多少次通知,就执行多少资源, refresh:不管有多少次通知,请执行一次。 puppet nginx 应用案例 2012华东运维技术大会 www.mysqlops.com
puppet kick:主动强制客户端运行puppet agent. 注意:puppet kick 并不关心客户端puppet agent 有没有执行错误,它成功连接到agent 即返回退出0. puppet +kick 2012华东运维技术大会 www.mysqlops.com
官方的解释:MCollective就是一个调度器,可以解决多个puppet agent同时向master提出请求造成性能,速度下降的问题;它可以根据不同的属性对节点进行分类,对不同分类执行不同的任务;它是一个控制终端,可以使用它控制客户端和服务器,因此不需要puppet agent定时运行了. MCollective也是一种Client/Server架构,而且client和server使用Midware(中间件)进行通信,需要java以及activemq支持. Mcollective官文说明: http://puppetlabs.com/mcollective/introduction/ MCollective介绍 2012华东运维技术大会 www.mysqlops.com
1.管理/控制/执行 服务 软件包 进程信息 Facter facts ping 使用说明: # mco The Marionette Collective version 1.3.2 /usr/bin/mco: command (options) Known commands: find pgrep facts ping puppetd help controller rpc inventory service 需要更多功能,可以安装更多插件 Puppet MCollective 功能 2012华东运维技术大会 www.mysqlops.com
[root@puppet1 ~]# mco find client1.test.com puppet1 client2.test.com [root@puppet1 ~]## mco ping client1.test.com time=56.11 ms client2.test.com time=95.86 ms puppet1 time=96.78 ms ---- ping statistics ---- 3 replies max: 96.78 min: 56.11 avg: 82.92 [root@puppet1 ~]# mco puppetd status * [ ===================================================> ] 3 / 3 client1.test.com Currently stopped; last completed run 9663 seconds ago puppet1 Currently idling; last completed run 1665580 seconds ago client2..test.com Currently idling; last completed run 149 seconds ago Finished processing 3 / 3 hosts in 36.27 ms Mcollective 使用示例 2012华东运维技术大会 www.mysqlops.com
Puppet mcollective使用示例 2012华东运维技术大会 www.mysqlops.com
[root@puppet1 ~]# mco pgrep ruby * [ ======================================================> ] 3 / 3 client1.test.com PID USER VSZ COMMAND 9955 root 112.996 MB ruby /usr/sbin/mcollectived --pid=/var/run/mcollectived.pid client2.test.com PID USER VSZ COMMAND 5717 root 113.801 MB ruby /usr/sbin/mcollectived --pid=/var/run/mcollectived.pid 25631 root 153.289 MB /usr/bin/ruby /usr/sbin/puppetd --server=puppetmaster1 --log ---- process list stats ---- Matched hosts: 2 Matched processes: 3 Resident Size: 28.917 MB Virtual Size: 380.086 MB Finished processing 3 / 3 hosts in 198.42 ms MCollect使用示例 2012华东运维技术大会 www.mysqlops.com
Func全称为Fedora Unified Network Controller(Fedora统一网络控制器),由Fedara社区维护的一款用于服务器自动化远程管理的工具。有如下特性: Func 可以在主控机上一次管理任意多台服务器,或任意多个服务器组; Func 基于 Certmaster(https://fedorahosted.org/certmaster/)建立了 Master – Slaves 主从 SSL 证书管控体系,可以将证书自动分发到所有受控服务器; Func 命令行可以直接发送远程命令或者远程获取数据; Func 开 发 者 已 经 完 成 了 大 多 数 常 用 任 务 模 块 的 开 发 : CommandModule 、 FileTrackerModule 、 JBossModule 、IPtablesModule、HardwareModule、MountModule、NagiosCheck、NetappModule、 NetworkTest、ProcessModule、ServiceModule、SysctlModule、RebootModule、 RpmModule、VirtModule、YumModule等等,这些模块的作用都可以顾名思义,或者参考:https://fedorahosted.org/func/wiki/ModulesList ; 任何人都可以通过 Func 提供的 Python API 轻松编写自己的模块,以实现体功能扩展。而且 任何 Func 命令行能完成的工作,都能通过 API 编程实现; Func 通讯基于 XMLRPC 和 SSL 标准协议。 puppet +func 管理
# func "@fmgr" call process info "aux" ##查看进程 # func "@fmgr" call process mem ## 查看内存 # func "@fmgr" call service status puppet ##查看fmgr组中各成员puppet进程状态 #func "@fmgr" call service stop puppet {'puppet2': 0, 'puppet3': 0} # func "@fmgr" call service start puppet tips: func也是使用ssl认证,可以使用puppetmaster上的ssl证书认证,参见官方文档说明 func 使用示例 2012华东运维技术大会 www.mysqlops.com
1. 客户端是如何使用? node default { include nginx } 2. 文件备份 a.backup 决定文件的内容在被修改前是否进行备份。 b. 文件服务器 a. 默认是备份到远程 filebucket { main: server => "puppet" } File { backup => main } 默认保存在/ /var/lib/puppet/clientbucket b.备份到本地 filebucket { 'sky' : path=>"/data/backup", } File { backup=>sky } 文件备份示例: file { "/etc/sudoers": mode => "440", source => "puppet:///modules/admin/sudoers", backup => ".bak", } 恢复:(哈希值) cp /var/lib/puppet/clientbucket/c/0/7/ d/0/a/a/2/c07d0aa2d43d58ea7b5c5307f532a0b1/contents /etc/sudoers puppet 同步大文件可以使用rsync模块 puppet 应用QA 2012华东运维技术大会 www.mysqlops.com
Puppet架构与集群 2012华东运维技术大会 www.mysqlops.com Puppet 普遍部署为C/S架构: Puppet 成熟的集群方案: 1.Puppet +nginx 2.Puppet +passenger 3.Puppet +mongrel 4.Puppet+git(特殊)
Puppet架构与集群 2012华东运维技术大会 www.mysqlops.com Puppet 集群核心思想: 1).puppetmaster集群 - 分担puppetmaster来自于客户端的请求压力,可以采取Active ,Active 模式. - 采取反向代理模式,将来自于8140的端口请求分散到多台puppetmaster 2).puppet ssl 证书集群 -分担puppetmaster来自于客户端ssl证书的请求压力, 采取Active,Standby模式. 3). 采取独立运行模式,通过git 将代码push到客户端,客户端本地执行相应代码。
a.puppetmaster 集群架构图 Puppet架构与集群 2012华东运维技术大会 www.mysqlops.com
puppetca 集群架构图: Puppet架构与集群 2012华东运维技术大会 www.mysqlops.com
默认:centos系列puppet-load.rb在 /usr/share/puppet/ext目录下。 测试puppetmaster性能: ./ext/puppet-load.rb - --debug --node client2.test.com --server puppet1 --factsdir=/var/lib/puppet/yaml/facts --concurrency 1 --repeat 1 --cert /var/lib/puppet/ssl/certs/puppet1.pem --key /var/lib/puppet/ssl/private_keys/puppet1.pem 参阅: http://www.masterzen.fr/2010/10/18/benchmarking-puppetmaster-stacks/ puppetmaster 并发性能测试方法 2012华东运维技术大会 www.mysqlops.com
EC2 客户端puppet 工作流 2012华东运维技术大会 www.mysqlops.com
项目地址: https://github.com/puppetlabs/puppetlabs-openstack https://github.com/bcarpio/puppet-hadoop https://github.com/jamtur01/puppetlabs-cloudfoundry https://github.com/puppetlabs/Razor puppet 未来 2012华东运维技术大会 www.mysqlops.com
承办单位:ChinaUnix社区 、 ITPUB社区协办单位:mysqlops中文网、TopGeek 场地支持:创智天地 赞助商:又拍云存储、韩国派凌科技有限公司 北京基调网络系统有限公司 北京蓝汛通信技术有限责任公司 联想集团 ThinkServer全球研发中心 礼品赞助:IT168、盛大创新院 出版社支持:水利水电出版社、图灵教育 2012华东架构师大会 举办日期:2012年11月18日 赞助与合作联系人:金官丁 微博:@mysqlops 邮箱:mysqlops@sina.com 2012华东运维技术大会