Puppet基于Master/Agent模式实现LNMP平台部署

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

前言

随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的、繁琐的工作利用自动化处理。前期我们介绍了运维自动化工具ansible的简单应用,本期带来的是运维自动化神器puppet基于Master/Agent模式实现LNMP平台部署。

Puppet

简介

Puppet是基于ruby语言开发的一种Linux、Unix、Windows平台的集中配置管理系统,可以C/S模式或独立运行,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。

工作流程

wKioL1WgwHnxRx04AAHsGmtJw0E449.jpg

①Agent向Master端发起认证请求

②Master端验证其合法性,允许其连接

③Agent将本机变量(主机名、内存大小、IP地址等)通过SSL连接发送给Master

④Master检测Agent的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。解析结果生成一个“伪代码”(catelog),并将其发给Agent

⑤Agent接收到“伪代码”,开始执行

⑥执行时判断有没有File文件,如果有,则向fileserver发起请求

⑦判断有没有配置Report,如果已配置,则把执行结果发送给服务器

⑧执行结束,检测系统状态

实现过程

实验拓扑

wKiom1Wg3LaTFmHcAADiWDDG1ec885.jpg

1
2
3
#系统环境:CentOS6.6
#各主机间可通过域名通信,基于hosts实现
#各主机时间已同步

Puppet Master配置

安装所需软件包

1
[root@node1 ~] # yum install puppet puppet-server -y

创建模块目录

1
2
[root@node1 ~] # cd /etc/puppet/modules/
[root@node1 modules] # mkdir nginx/{files,manifests} php/{files,manifests} mysql/{files,manifests} -pv

准备各服务配置文件

1
2
3
[root@node1 modules] # cp /root/files/nginx.conf nginx/files/
[root@node1 modules] # cp /root/files/www.conf php/files/
[root@node1 modules] # cp /root/files/my.cnf mysql/files/

创建各模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
[root@node1 modules] # vim nginx/manifests/init.pp
 
class nginx {
     package{ 'nginx' :
         ensure  => present,
         name    => nginx,
     }
 
     file { 'nginx.conf' :
         ensure  =>  file ,
         source   =>  'puppet:///modules/nginx/nginx.conf' ,
         path    =>  '/etc/nginx/nginx.conf' ,
         require => Package[ 'nginx' ],
     }
 
    service{ 'nginx' :
         ensure  =>  true ,
         enable   =>  true ,
         subscribe => File[ 'nginx.conf' ],
     }
}
 
[root@node1 modules] # vim php/manifests/init.pp
 
class php {
     package{ 'php-fpm' :
         ensure  => present,
         name    => php-fpm,
     }
 
     file { 'www.conf' :
         ensure  =>  file ,
         source   =>  'puppet:///modules/php/www.conf' ,
         path    =>  '/etc/php-fpm.d/www.conf' ,
         require => Package[ 'php-fpm' ],
     }
 
    service{ 'php-fpm' :
         ensure  =>  true ,
         enable   =>  true ,
         subscribe => File[ 'www.conf' ],
     }
}
 
[root@node1 modules] # vim mysql/manifests/init.pp
 
class mysql {
     package{ 'mysql-server' :
         ensure  => present,
         name    =>  'mysql-server' ,
     }
 
     file { 'my.cnf' ,:
         ensure  =>  file ,
         source   =>  'puppet:///modules/mysql/my.cnf' ,
         path    =>  '/etc/my.cnf' ,
         require => Package[ 'mysql-server' ],
     }
 
    service{ 'mysqld' :
         ensure  =>  true ,
         enable   =>  true ,
         subscribe => File[ 'my.cnf' ],
     }
}
 
[root@node1 modules] # cd ../manifests/
[root@node1 manifests] # mkdir server
[root@node1 manifests] # vim server/node3.pp
 
node  'node3.scholar.com'  {
   include mysql
}
 
[root@node1 manifests] # vim server/node4.pp
 
node  'node4.scholar.com'  {
   include nginx,php
}
 
[root@node1 manifests] # vim site.pp 
 
import  "server/*.pp"

以上资源详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#package详解
ensure:程序包目标状态,{present(installed)|absent|purged|held|latest}
name:资源名称,即软件包名字,可省略,如果省略,将继承title的值
provide:软件包管理器,会自动识别
source :程序包文件路径
install_options:安装选项,最常用的是通过INATALLDIR来制定安装目录
#file详解
ensuce:目标状态,{present|absent|directory| file |link}
backup:通过filebacket资源来备份文件,值通常为filebucket资源的名称
content:文件内容,生成方式有三种(content, source ,target),三者彼此互斥
source :通过制定的url下载文件至本地,格式:puppet: ///modules/MODULE_NAME/file_name
target:为符号链接指定目标
links:文件为符号连接,{follow|manage}
path:文件路径,必须使用双引号
mode:定义权限,通常为8进制数字
owner: 定义文件的属主
group:定义文件的属组
force:强制执行删除文件、链接或目录,仅用于ensure为absent时
purge:清除指定目录中存在的,但未在资源中定义的文件
resurce:目录递归,{ true | false |inf|remote}
replace:替换,本地存在的文件与资源中指定的文件内容不同时是否执行替换,默认为否
#service详解
ensure:服务目标状态,{  true (running)| false (stopped)}
enable :是否开机自动启动,{ true | false }
name:服务名称,可以省略,如果省略,将继承title的值
path:服务脚本路径,默认为 /etc/init .d/
start:是否启动服务
stop:是否关闭服务
restart:是否重启服务
status:判断服务是否运行
#特殊属性
require:需要依赖于某个资源
before:应该先执行本资源,在执行别的资源
notify: 将当前资源的变动信息通知给别的资源
subscribe:订阅某资源变动信息
-> :后资源需要依赖前资源
~> :前资源变动通知后资源调用

启动服务

首次启动puppet-server守护进程时,其会自动进行运行环境的初始化,例如创建一个本地CA及服务器端相关的证书和密钥等。初始化操作完成后,puppet就会监听指定的套接字并等待客户端的连接请求。默认情况下,其证书和密钥等文件位于/var/lib/puppet/ssl/目录中。

出于调试的目的,首次启动puppet服务进程可以以非守护进程方式进行,并让其输出详解信息以便于观察初始化过程。如下所示过程,其逐步展示了创建本地CA、作为puppet服务器的本地主机向CA申请证书、获得证书以及CA移出证书签署请求的过程等,而后启动服务进程并准备接受各agent的连接请求。为下面的命令额外使用--debug选项,还可以获得更为详细的输出信息。

wKiom1WhGPGjGeJDAALfQfCHQrA380.jpg

如果上述的测试启动没有问题,可中止当前的启动,正式启动服务了

1
2
3
4
[root@node1 manifests] # service puppetmaster start
Starting puppetmaster:                                     [  OK  ]
[root@node1 manifests] # ss -tnlp | grep puppet
LISTEN     0      5              *:8140         *:*       users :(( "puppetmasterd" ,3186,5))

Puppet Agent配置

安装所需软件包

1
[root@node3 ~] # yum install puppet -y

指定puppet server

1
2
3
4
5
[root@node3 ~] # vim /etc/puppet/puppet.conf   #也可手动命令指定
 
[agent]
 
server = node1.scholar.com

启动服务之前先来看一下各agent端所需软件是否安装

1
2
3
4
5
6
[root@node3 ~] # rpm -q mysql-server
package mysql-server is not installed
[root@node4 ~] # rpm -q ngnix
package ngnix is not installed
[root@node4 ~] # rpm -q php-fpm
package php-fpm is not installed

启动服务

puppet agent在首次启动时,会向为其指定的puppet server申请证书,并完成后续连接请求。同样的理由,出于测试的目的,接入当前puppet集群中的首个agent节点可以以非守护进程的方式进行,以观察其初始化过程

wKiom1WhH4mQYU2IAADf9qhYdfk057.jpg

1
#所有agent端都执行以上系列操作

此时,在puppet服务器端使用puppet cert命令管理客户端的证书请求,其--list选项能够查看等待签署证书的客户端列表,而--sign选项可用于为指定指定节点签署证书,如果要一次性地为多个节点的证书申请进行签署可同时使用--all选项

wKioL1WhIp3CmTMVAAHIEzKCtZM886.jpg

正式启动服务

1
2
3
4
[root@node3 ~] # service puppet start
Starting puppet:                                           [  OK  ]
[root@node4 ~] # service puppet start
Starting puppet:                                           [  OK  ]

再次检查各agent端软件状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@node3 ~] # rpm -q mysql-server
mysql-server-5.1.73-5.el6_6.x86_64
[root@node3 ~] # service mysqld status
mysqld (pid  4526) is running...
[root@node3 ~] # chkconfig --list mysqld
mysqld             0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@node4 ~] # rpm -q nginx 
nginx-1.0.15-11.el6.x86_64
[root@node4 ~] # service nginx status
nginx (pid  6678) is running...
[root@node4 ~] # chkconfig --list nginx
nginx             0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@node4 ~] # rpm -q php-fpm
php-fpm-5.3.3-46.el6_6.x86_64
[root@node4 ~] # service php-fpm status
php-fpm (pid  6309) is running...
[root@node4 ~] # chkconfig --list php-fpm
php-fpm         0:off   1:off   2:on    3:on    4:on    5:on    6:off

各服务已按预设启动,Puppet基于Master/Agent模式实现LNMP平台部署成功完成

Puppet Kick

agent跟master默认30分钟通信一次,如果在这期间,某一服务出现bug或配置有误,如何实现紧急推送,尽量减少业务损失呢?下面简单说一下puppet kick功能的实现

Puppet Agent配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@node3 ~] # vim /etc/puppet/puppet.conf 
 
[agent]
 
listen= true
 
[root@node3 ~] # vim /etc/puppet/namespaceauth.conf
 
[puppetrunner]
allow *.scholar.com
 
[root@node3 ~] # vim /etc/puppet/auth.conf 
 
path  /run
method save
allow node1.scholar.com
# this one is not stricly necessary, but it has the merit
# to show the default policy which is deny everything else
path /
auth any
 
[root@node3 ~] # service puppet restart
Stopping puppet:                                           [  OK  ]
Starting puppet:                                           [  OK  ]
 
#所有agent都执行以上操作

Puppet Master推送

1
2
3
4
5
6
[root@node1 ~] # puppet kick -p 10 --host node3.scholar.com
Triggering node3.scholar.com
Getting status
status is success
node3.scholar.com finished with  exit  code 0
Finished

推送成功,puppet kick功能实现,至此,Puppet基于Master/Agent模式实现LNMP平台部署实验全部完成

The end

Puppet基本应用就先说到这里了,Puppet功能强大,从管理规模方面较之Ansible,Puppet还是略胜一筹的,以上只是牛刀小试,有兴趣的朋友可以深入研究,部署过程中遇到问题可留言交流。以上仅为个人学习整理,如有错漏,大神勿喷~~~



本文转自 北城书生  51CTO博客,原文链接:http://blog.51cto.com/scholar/1673562

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
JSON Serverless API
Agent平台快速体验
通过《智能体(Agent)平台介绍》您了解到Agent及其构建平台的价值,通过《在函数计算上部署专属的Agent平台》你获得了专属的Agent平台,本篇进入更加激动人心的使用阶段,一起探索Agent的魅力吧
485 6
Agent平台快速体验
|
1月前
|
人工智能 Serverless API
在函数计算上部署专属的Agent平台
Agent及Agent平台的相关概念和应用价值已经在《智能体(Agent)平台介绍》 文章进行了介绍,接下来我们要进行实际的操作,在阿里云函数计算上快速获取专属的Agent平台-AgentCraft
83151 6
在函数计算上部署专属的Agent平台
|
4月前
|
人工智能 自然语言处理 搜索推荐
AI原生企业级Agent构建平台具备哪些特性?一篇文章看明白
AI原生企业级Agent构建平台有哪些特性?澜码正式发布AskXBOT平台为业界揭晓答案。
226 0
|
7月前
|
关系型数据库 MySQL 应用服务中间件
手动部署LNMP环境(Alibaba Cloud Linux 2)
本场景带您体验如何在Alibaba Cloud Linux 2.1903 LTS 64位操作系统的云服务器上搭建LNMP环境。
199 0
|
1月前
|
人工智能 运维 安全
智能体(Agent)平台介绍
2023年11月9日,比尔盖茨先生发布了《人工智能即将彻底改变你使用计算机的方式》文章,详尽阐明了Agent(智能体)这个新一代智能应用的技术理念。在个人助理、卫生保健、教育、生产率、娱乐购物、科技等领域有着广泛的应用场景,对于开发者而言是个巨大的机会, 本篇文章尝试从系统化的角度解决构建Agent的问题,探讨Agent平台化的方案。
1163 2
智能体(Agent)平台介绍
|
8月前
|
存储 数据采集 缓存
【运维知识进阶篇】Zabbix5.0稳定版详解9(Zabbix优化:高并发对MySQL进行拆分、Zabbix-agent主动上报模式、使用proxy代理模式、系统自带监控项优化、进程优化、缓存优化)
【运维知识进阶篇】Zabbix5.0稳定版详解9(Zabbix优化:高并发对MySQL进行拆分、Zabbix-agent主动上报模式、使用proxy代理模式、系统自带监控项优化、进程优化、缓存优化)
224 0
|
8月前
|
运维 负载均衡 关系型数据库
【运维知识进阶篇】用Ansible Roles重构LNMP架构(Linux+Nginx+Mariadb+PHP),实现4个项目一键部署
【运维知识进阶篇】用Ansible Roles重构LNMP架构(Linux+Nginx+Mariadb+PHP),实现4个项目一键部署
111 0
|
4月前
|
关系型数据库 MySQL 应用服务中间件
小白带你部署LNMP分布式部署
小白带你部署LNMP分布式部署
69 0
|
4月前
|
弹性计算 网络安全 数据安全/隐私保护
通过计算巢部署 Puppet Enterprise 服务
Puppet Enterprise 是一款自动化软件,可帮助您和您的组织在管理 IT 基础设施的同时提高工作效率和敏捷性。 本文向您介绍如何开通计算巢上的 Puppet Enterprise 服务,以及部署流程和使用说明。
262 1
通过计算巢部署 Puppet Enterprise 服务
|
7月前
|
弹性计算 关系型数据库 MySQL
基于ROS快速部署LNMP环境(CentOS 7)
本教程提供在阿里云云服务器ECS上基于CentOS 7.9操作系统搭建LNMP环境的指引。LNMP是应用广泛的网站服务系统,由四种免费的开源软件Linux、Nginx、MySQL和PHP组成。搭建好LNMP环境后,您可以在该ECS实例上搭建网站、访问网站
406 0

推荐镜像

更多