2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Puppet 自动化集群管理基础篇

  • 2019-11-18
  • 本文字数:4355 字

    阅读完需:约 14 分钟

Puppet自动化集群管理基础篇

Puppet 作为开源的集群管理框架,有着简单易用、快速部署、使用范围广等特性,已经积累了超过 250 家的用户,包括阿里巴巴、新浪、Oracle 等大公司。本文作者将带领大家了解 puppet 技术及其简单的应用。

背景简介

在传统的服务器集群管理中,每增加一台服务器,都需要对该服务器进行相应的配置。如果服务器数量少,那逐一对服务器进行配置是没问题的。但是在目前的生产环境中,服务器数量动辄就是成千上万台。传统的集群管理方案耗时耗力,已无法快速有效的适应生产环境的需求。目前,在公司内部存在 3 万多台的 web 服务器,如何对其进行快速部署成为公司内部亟待解决的问题。主要需求包括:


1.突然有一天,某机房 DNS 出问题了,需要换个 DNS。


2.基于某个模板的业务快速上线。


3.Apache 的配置需要将 robots 文件的配置修改。


4.快速安装某个软件某个模块。


5.修改了某个配置,需要重启对应服务。


6.某天我们对某台机器做某个测试修改了配置,又某天我们对另外一台机器测试又修改了一个配置,越积越多。


如何快速的解决以上情况所引起的生产环境失效的问题,我们对自动化集群管理工具 puppet 进行了调研,从软件包、配置文件和服务三种类型的资源出发,对服务器集群进行了自动化管理设计。


1 Puppet 是什么

Puppet 是一种跨平台、C/S 架构的集中配置管理系统,可以用于管理 linux、windows、unix、mac 等平台下的用户、软件包、文件、服务和 cron 任务等,并且可以妥善处理资源之间的依赖关系。其使用 ruby 语言开发,但是使用者并不需要了解 ruby 语言,因为其仅仅依赖于一种以 pp 为后缀的文件,在 puppet 框架搭建好后,就只剩下模块的开发,模块开发采用描述性语言和基本的逻辑控制语句,简单易懂,非常适合于管理和部署大规模的集群系统。

2 Puppet 架构

Puppet 使用 C/S 架构,分为 puppet server(master)和 puppet client(agent)。master 是配置和管理中心,管理着所有的节点。系统管理员需要在 master 上编写每个节点所对应的 pp 文件来描述不同节点的资源集合和目标状态。各个 agent 会周期性的查询 master,来获取自己的配置,并将结果以报告的形式传送给 master。



puppet 使用 ssl 认证,在 client 与 master 第一次通讯认证通过后,证书会存储在 master 上,当仅有一台 master 时,这不会产生问题。但是,在我们的设计中,为了保证高可用和高并发,master 是集群,master 集群的前面是负载均衡,同一 client 与 master 多次通信时,无法保证连接的是同一个 master,也就是说无法保证证书的获取。为此,puppet 官方建议搭建单独的 CA 认证服务器,从而实现证书的统一中心化管理。因此在大规模集群管理系统中,常见的 puppet 架构如上图,本公司同样也采用了该架构搭建集群管理系统。

3 Puppet 工作流程

Puppet 既可以单机运行,也可以通过 C/S 架构的方式运行,不过在大多数情况下还是基于 C/S 架构的方式来运行,其交互过程如下图所示。



1.agent 通过 ssl 向 master 建立认证。


2.建立认证后,puppet 调用 agent 的 facter,探测出主机的一些内置变量,如主机名、系统版本号、ip 地址和负载等信息。Agent 将这些信息通过 ssl 加密发送到 master 端。


3.Master 接收到 agent 的主机信息请求后,根据域名或 ip 地址将他们发送到本机的 manifests 或 ENC,进行节点配置信息的查询。


4.在解析过程中,首先进行语法检查,如果有语法错误,则停止,返回错误信息,否则继续解析生成 catalog。


5.Puppet 客户端 agent 对服务端生成的 catalog 进行应用。


6.Puppet 客户端 agent 对 catalog 进行代码验证并执行,并将结果记入日志。


7.将 agent 信息以报告的形式上报 master。


8.流程结束。

4 Puppet 安装与配置

基于公司内部已有的 DNS 域名解析和 LVS 负载均衡服务,围绕 puppet 的整个集群管理系统架构图,在 centos 环境下,puppet 安装与配置方法如下:

Master

目前使用了 4 台 master 用于管理 15000 台左右的服务器,如果后期 master 压力增大,再适当的扩容。配置步骤如下:


1)安装 puppet 的相关包,包括 puppet-server、Apache、mod_ssl、mod_passenger。



在安装以上包的同时,系统会自动安装 facter 包和一些 ruby 依赖包。


2)编辑 /etc/puppet/puppet.conf 配置文件。



3)复制 CA 服务器上的证书,主要是打包 CA 服务器上的 ssl 目录,并放到 master 上的 ssl 目录下。


4)初始化 master,生成必须文件。



5)建立/etc/httpd/conf.d/puppet.conf 配置文件。



6)创建虚拟主机的 DocumentRoot。



7)启动 puppet。


CA

将 master 和 agent 的认证机制放在单独的 CA 服务器上,可以方便 master 集群的管理和扩容。配置步骤如下:


1)安装 puppet 的相关包,包括 puppet-server、Apache、mod_ssl、mod_passenger。



2)编辑/etc/puppet/puppet.conf 配置文件。



3)创建/etc/puppet/autosign.conf 配置文件,如果内容是“*”,表示所有主机都可访问。



4)启动一下 puppet master,实现初始化,生成 key 和自认证。



5)为 master 服务器生成证书。



6)建立/etc/httpd/conf.d/puppet.conf 配置文件,文件的设置参照 master 的配置。


7)创建虚拟主机的 DocumentRoot,参照 master 的配置。


8)启动 puppet,参照 master 的配置。

Agent

Puppet 客户端安装比较简单,配置步骤如下:


1)安装 puppet 的相关包,包括 addops-puppet、addops-puppet-agent-extra(公司内部包)。其中第一个包为 yum 源包,第二个包为 puppet 的扩展包,其依赖于 puppet 包,并且会自动修改配置文件中的 ca_server、server 和 node_name_value 三个变量的值。



2)测试运行:puppet agent --test,默认同步的环境为 production,可以手动添加环境参数,如–environment=staging,即可改为临时环境。

5 Puppet 配置解读

puppet 的主配置文件 puppet.conf 位于/etc/puppet/(社区版)目录下,其中主要包含了 main、master 和 agent 三个命名空间,依次介绍如下:


1)main 通用配置选项


  • confdir:配置文件存放目录,默认在/etc/puppet。

  • vardir:动态数据存放目录,默认在/var/lib/puppet。

  • logdir:日志存放目录,默认在/var/log/log。

  • rundir:PID 存放目录,默认在/var/run/puppet。

  • statedir:状态存放目录,默认在 $vardir/state。

  • ssldir:SSL 证书存放目录,默认在 $vardir/ssl。

  • trace:发生错误时显示跟踪信息,默认 false。

  • filetimeout:检测配置文件状态改变的时间周期,单位秒,默认 15 秒。

  • syslogfacility:指定 syslog 功能的级别,默认为 daemon 级。

  • manifestdir:系统的启动文件存放目录,默认在/etc/puppet/manifests。

  • basemodulepath:模块的存放目录,默认为/etc/puppet/modules,可以指定多个。

  • luginsync:当有自定义 facter 变量时,需要指定该值为 true。

  • ca_server:认证服务器的名称。


2)Master 服务端配置选项


  • user:后台进程执行的用户。

  • group:后台进程执行的组。

  • certname:进行 ssl 认证时的变量名,默认为主机名。

  • node_name_value:节点名称,默认为主机名。

  • mainfest:mainfest 站点文件的名字,默认为 site.pp。

  • bindaddress:后台进程绑定的网卡地址接口。

  • masterport:后台进程执行的端口,默认为 8140。

  • ca:当认证服务器位于单独的服务器上时,需要指定该值为 false。


3)Agent 客户端配置选项


  • classfile:显示从服务端加载到的类列表。

  • localconfig:本地缓存配置目录。

  • runinterval:客户端的检测时长,默认为 30 分钟检测一次。

  • listen:监听进程,用于监听服务端下发的同步信息。

  • report:值为 true 时,向 master 端发送报告。

  • node_name_value:节点名称,默认为主机名。

  • certname:认证名称,默认为主机名。

  • Server:master 的认证名称,即 certname 变量的值。

6 Puppet 资源简介

资源是 puppet 系统的核心,抽象的足够彻底,相似的资源被抽象成了一种资源类型,如程序包资源、文件资源、服务资源和 exec 资源等。资源属性与其实现方式剥离开来,仅仅描述资源的状态,而不是其具体的实现过程,即可达到资源的同步。

资源定义

资源定义即向资源类型的属性赋值,也称为资源类型的实例化。资源的定义在 pp 文件中完成,其目录结构一般如下所示:



Files 文件夹用于存放该软件包的配置文件,manifests 文件夹用于存放资源的实例,即类文件,templates 用于存放模板。


定义的资源语法如下:



Type 即为资源的类型,比如程序包资源 package,文件资源 file 等,title 是一个字符串,在同一类型中必须唯一,每个属性用“,”隔开。通过将 class、条件控制语句与资源的定义相结合,即可实现资源的模块化,达到易复用的效果。

常用资源

基于公司内部运维组的需求,puppet 主要从程序包、配置文件、服务、exec 四个方面展开应用,本文主要对前两种资源展开介绍。另外,我们可以利用“Puppet describe 资源名称”命令查看资源的详细描述。


1)程序包 package



Package 资源的描述如上图所示,下来我们将对 package 资源的主要属性进行介绍:


  • name:包名,可以省略,如果省略,将继承 title 的值。

  • ensure:指定软件包的状态,安装、卸载还是升级。需要卸载时,指定为“absent”;需要保证最新版本时,指定为“latest”;需要保证某一版本时,指定为版本号。

  • source:指定程序包的来源。如果本地 yum 仓库已经包含该包,则可以不指定。

  • provider:指明安装方式。


使用案例如下:



其中,package_name 和 package_ensure 是传入的参数值,通过对属性以参数的形式赋值,可以大大提高模块的复用性。


2)配置文件 file



file 资源的描述如上图所示,下来我们将对 file 资源的主要属性进行介绍:


  • ensure:文件的状态,值有 absent、present、file、directory 和 link。

  • path:文件路径,不指定时为 title 的值。“ensure=>absent”共用。

  • owner:文件的属主。

  • Group:文件的属组。

  • Mode:文件的权限。

  • Source:文件来源。


使用案例如下:



服务和 exec 资源在这里不再赘述,可以利用上述提到的命令,查看资源的详细介绍和参数的使用方法。从以上案例可以看出,采用 puppet 描述语言,结合常用的逻辑控制语句,可以快速的开发出不同资源的类模块。

7 结论

随着服务器集群规模的增大,公司越来越重视通过自动化配置来减小管理部署的成本。Puppet 作为开源的集群管理框架,有着简单易用、快速部署、使用范围广等特性,已经有超过 250 家的用户,包括 Zynga、Twitter、Citrix、Oracle、Shopzilla、Google、RedHat、新浪、阿里巴巴、豆瓣、好乐买、趣游、PPTV 等大公司。本文主要介绍了 puppet 架构、安装方法以及资源的使用案例,属于 puppet 集群管理的基础篇。随着 puppet 集群规模的增大,将来我们会继续介绍 puppet 中的 facter 工具、hiera 工具、模块编写规范、master 集群扩展,逐渐搭建一套大规模、健壮的 puppet 自动化管理集群。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/oitFRUJ_9LGTdRl7HxyVjQ


2019-11-18 17:323027

评论

发布
暂无评论
发现更多内容

华为校园鸿蒙公开课走进南京大学

极客天地

1688API接口推荐:1688工厂档案信息数据接口

tbapi

1688 1688API接口 1688工厂档案信息

活动预告:如何培养高质量应用型医学人才?

ModelWhale

数据分析 人才培养 R语言 临床医学 新医科

走进AI新时代:织信低代码的实践与启示

优秀

AI 低代码 AI智能

探索自然语言处理:语言模型的发展与应用

霍格沃兹测试开发学社

Java 异常处理与正则表达式详解,实例演练及最佳实践

小万哥

Java 程序人生 编程语言 软件工程 后端开发

“打工人”的自我修养-如何在30秒内把“问题”讲清楚

M

原创 职场 认知 逻辑

深入了解 Linux 常用性能统计命令

霍格沃兹测试开发学社

阿里通义灵码全面公测,来看看它的水平怎么样?

阿里巴巴云原生

阿里云 云原生 通义灵码

零基础入门数据挖掘-课程汇总

阿里云天池

阿里云

HStream Webinar: 兼容 Kafka 协议的下一代流数据平台

EMQ映云科技

kafka mqtt

SQL中如何添加数据:基础指南

霍格沃兹测试开发学社

ADB 下载、安装及使用教程:让你更好地管理 Android 设备

霍格沃兹测试开发学社

AppLink对51Tracking的集成方式

谷云科技RestCloud

APPlink 自动化集成 51tracking

科技进步对于我们的未来来说,到底是利好还是利弊?为什么?

算法的秘密

与鲸同行,智领未来!和鲸科技高校市场渠道合作伙伴正式开启招募

ModelWhale

人工智能 数据科学 渠道

提升跨境直播体验,选择适用的直播专线

Ogcloud

海外直播专线 海外直播 跨境直播 跨境直播专线

设计原则 — DRY & Rule of three

Lemoon Can

设计原则 DRY Rule Of three

探索机器学习:从基础概念到应用实践

霍格沃兹测试开发学社

一文告诉你服务器为什么要托管?

Finovy Cloud

云服务器 IDC 服务器托管

电子签赛道效率之争,e签宝率先给解法

ToB行业头条

思维导图ai生成软件有哪些?这5款值得推荐!

彭宏豪95

人工智能 思维导图 在线白板 AIGC 思维导图软件

干货盘点!市场调查与分析必备的10个模板!

彭宏豪95

职场 在线白板 行业调研 效率软件 调研报告

观测云在 .NET 业务中分析性能问题的最佳实践

观测云

APM Profile 可观测性

图数据库基准测试 LDBC SNB 系列讲解:Schema 和数据生成的机制

不在线第一只蜗牛

数据库 LDBC

揭秘ChatGPT的Prompt方法:原理与应用总结

霍格沃兹测试开发学社

大模型 | LLM的7大主要功能有哪些?

澳鹏Appen

大模型 LLM

白嫖他悟空CRM项目 ,部署了直接用起来

程序猿忙什么

Puppet自动化集群管理基础篇_DevOps & 平台工程_武伟_InfoQ精选文章