1、自劢化运维管理 自动化运维体系及开源产品对比 大规模服务器自动化配置和管理 Puppet开发与Func应用实例 XX中心 Hartnett 内容摘要 why 自动化运维的意义 自动化运维的背景 what 自动化运维体系介绍 常见开源产品介绍选型 how Puppet的安装、配置和使用 Func的安装、配置和使用 e.g Puppet开发实例 自动化运维实例 自动化运维系统的意义与背景 传统运维方式 自动化运维 背景 效率低下 容易出错 不利于伸缩 提高工作效率 降低运维门槛 SA必备技能 SA人手有限 短时间内开服数百组 为什么要使用自动化运维系统 自动化运维体系 自动化运维体系结构系统预备
2、自动化安装操作系统及常用软件包 配置管理 1.自动化部署业务系统软件包并完成配置 2.远程管理服务器(开关服务等) 3.变更回滚 监控报警 1.服务器可用性、性能、安全监控 2.向管理员发送报警信息 自动化运维工具介绍 自动化运维工具对比选型( 1) Kickstart Cobbler 1. 供 Linux操作系统安装管理器 Anaconda读取的无人值守安装配置脚本 2. 安装配置过程较为繁琐 1. 一个集成工具,集成了PXE、 DHCP、 DNS和 Kickstart服务管理和yum仓库管理 2. 简化了运维工程师工作量 预备类工具 自动化运维工具对比选型( 2) Chef Puppet
3、1. 学习门槛高( ruby) 2. 脚本维护调试繁琐 3. 依赖包多,配置过程复杂繁琐 4. chef的配置管理文件二进制文件中,维护不方便 5. chef的用户群少,出了问题不方便排查 1. 入门简单,管理模块开发周期短( puppet语言、资源) 2. 脚本维护调试方便 3. 安装、配置简单 4. 配置管理文件为 puppet语言描述的文本文件,易于发布、备份和扩展 5. puppet的用户很多, Google、Redhat等大公司都在使用 配置管理类工具 自动化运维工具对比选型( 3) Cfengine Puppet + Func 1. 老牌的配置管理工具,功能强大 2. 语法晦涩难懂
4、,学习、维护成本高 1. 新兴的配置管理工具,语法简单,易于学习、维护 2. 远程执行命令只能返回成功与否,执行过程无法跟踪查看 3. Linux集群管理工具 Func可以弥补 Puppet远程执行命令的不足 配置管理类工具 自动化运维工具对比选型( 4) Zabbix Nagois + Cacti 1. Zabbix、 Nagois和 cacti等工具, zabbix和 Nagois+cacti组合都是很优秀的工具 2. 鉴于 zabbix参考资料较少,选择了常用的 Nagois+cacti组合 1. Nagois擅长服务器可用性监控,报警功能强大 2. Cacti擅长监控历叱数据收集、存储
5、 3. UI美观,数据展示功能强大 监控报警类工具 Puppet篇章 Puppet介绍 y Puppet Labs基于 ruby语言开发 y 支持以 C/S模式或独立模式运行 y 支持对所有 UNIX及类 UNIX系统的配置管理 y 支持对 Windows操作系统管理(功能有限) y 适用于业务系统的整个生命周期 y Clients默认每 30分钟请求一次 Server端 y 支持以节点的方式管理若干的服务器群组 Puppet篇章 Puppet架构 Puppet篇章 Puppet Server安装 y 安装说明 y 支持源码安装、 yum和 ruby的 gem包安装 y Centos可以直接使
6、用 yum来安装, Centos的默认源中没有 puppet,需要先安装 EPEL包( 注意 32位与 64位版本区别 ) y 安装方法 1. 安装 EPEL: rpm Uvh http:/ 2. 安装 puppet服务端 yum y install puppet-server 3. 启劢 puppet Server Service puppetmaster start Puppet篇章 Puppet Client安装 Puppet服务器端对客户端的管理是基于主机名的,在安装之前需要为客户端设置唯一的主机名 y安装过程 1.安装EPEL包 2.安装puppet客户端: yum -y insta
7、ll puppet 3.提交证书申请 puppetd -server test Puppet篇章 Puppet 证书管理 y 服务器端可用 puppetca管理证书 1. puppetca list,查看到申请证书的客户端主机名 2. puppetca s 主机名 ,为特定的主机颁发证书 3. puppetca s and a ,为所有的主机颁发证书 4. puppetca l and a,列出所有主机, +号代表已经领证的机器 Puppet篇章 Puppet 使用 y默认安装好的Puppet没有任何配置管理功能,需要运维人员自行开发配置管理模块 Puppet开发 Server端目录结构 y
8、 Server端默认安装后,位于/etc/puppet目录下 jvuserjvpuppet puppet$ pwd /etc/puppet jvuserjvpuppet puppet$ ls auth.conf client访问puppet server的ACL配置文件 fileserver.conf puppet server作为文件服务器的ACL配置文件 manifests Puppet脚本主文件目录,至少需要包含site.pp入口脚本文件 modules Puppet模块目录,存放Puppet脚本的功能模块 namespaceauth.conf 命名空间ACL配置文件 puppet.co
9、nf Puppet服务器端配置文件 Puppet开发 Puppet脚本开发规范 Puppet开发 Puppet资源介绍 y Puppet提供了48种资源类型,支持用户自主开发 Puppet资源范例 file资源 y 功能 : 新建一个 /tmp/puppettest文件,文件内容为: puppet test only, 文件权限为 666 y 代码: class test file “/tmp/puppettest“: content = “Puppet test only“, mode = 666 Puppet资源范例 用户和组资源 y Ensure参数可以创建或者删除组 ,设置 absen
10、t就删除该组 ,设置 present就创建该组 y 以下的例子为删除不必要的用户组 代码 : $grouplist = “lp“,“uucp“, “games“,“news“, “floppy“,“audio“ group $grouplist: ensure = absent, Puppet资源范例 Package资源 y 功能 : 为新装的系统安装 ntp和 screen,删除 pppoe和 pppoe-conf包 y 代码 : package “ntp“,“screen“: ensure = installed; “pppoe“,“pppoe-conf“: ensure = absent
11、; Puppet资源范例 Service资源 y 功能 : 以下实例为启劢 ssh服务,停止 nfs服务 y 代码 : service “sshd“: ensure = running; “nfs“: ensure = stopped; Puppet资源范例 crontab资源 y 功能 : 在 crontab添加时间同步任务 y 代码 : cron ntpdate: command = “/usr/sbin/ntpdate “, user = root, hour = 0, minute = 0, require = Package“crontabs“; Puppet资源范例 exec资源
12、y 功能 : 自动执行初始化iptables安全策略脚本 y 代码 : exec “/etc/rc.d/jv_firewall.sh“: cwd = “/etc/rc.d/“, path = “/usr/bin:/usr/sbin:/bin“ Func篇章 Func介绍 y Func全称为 Fedora Unified Network Controller( Fedora统一网络控制器),是由 Fedara社区维护的一款用于服务器自劢化远程管理的工具 y 特点 : 1.可以管理任意多台服务器,或任意多个服务器组 2.基于 Certmaster建立主从 SSL 证书管控体系 3.提供了多个实用的
13、远程管理模块 y CommandModule y ProcessModule y ServiceModule 4.任何 Func 命令行能完成的工作,都能通过python API 编程实现 Func篇章 Func安装与配置 y Func的Master端和Slave端安装方式相同,在安装过EPEL的Centos服务器中,可使用yum y install func直接完成安装 y Master的控制端与被控制端是由配置文件指定的 y Master配置可以保持默认,如需打开证书自动分发功能,将autosign 设为yes即可 y完成配置后需要重启certmaster服务 Func篇章 Func Se
14、rver端配置 # configuration for certmasterd and certmaster-ca main autosign = no listen_addr = listen_port = 51235 cadir = /etc/pki/certmaster/ca cert_dir = /etc/pki/certmaster certroot = /var/lib/certmaster/certmaster/certs csrroot = /var/lib/certmaster/certmaster/csrs cert_extension = cert sync_certs
15、= False Func篇章 Func Client端配置 y Client端需要配置 /etc/certmaster/minion.conf中的 certmaster字段,用于指定 Server的证书地址 rootclient1 # cat /etc/certmaster/minion.conf # configuration for minions main #设置 certmaster的值为 master的 IP或域名 certmaster = certmaster_port = 51235 log_level = DEBUG cert_dir = /etc/pki/certmaste
16、r Func篇章 Func 证书管理 y 证书申请 : Client配置完毕后,使用 service funcd start启劢 funcd服务后,会自劢向控制端提交证书申请请求 y 证书颁发 : 1. 在 Server端执行 certmaster-ca l查看到被控端的证书请求 2. 用 certmaster-ca s 主机名可以为相应的主机颁发证书 3. 证书分发完后,需要在 server的 hosts中加 client的主机名 y 实例 : rootjvpuppet certmaster# certmaster-ca -l sxxb4-33 rootjvpuppet certmaster
17、# certmaster-ca -s sxxb4-33 /var/lib/certmaster/certmaster/csrs/sxxb4-33.csr signed - cert located at /var/lib/certmaster/certmaster/certs/sxxb4-33.cert Func使用 远程管理命令执行方法 y Func可以远程管理任意台或任意组服务器, func同时支持命令行和 python api调用 y 对一台发送指令时,可直接指定其主机名 确认主机 jooov-web是否存在 : 1. rootpuppet bin# func “jooov-web“ ping 2. client = func.Client(“jooov-web“) print client.ping() y 对所有服务器发送指令时,用 *表示所有服务器 让所有主机执行 ifconfig命令 : 1. func “*” call command run “ifconfig” 2. client = func.Client(“*“) print mand.run(“ifconfig“)