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