Puppet基于Master/Agent模式实现LNMP平台部署
前言
随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的、繁琐的工作利用自动化处理。前期我们介绍了运维自动化工具ansible的简单应用,本期带来的是运维自动化神器puppet基于Master/Agent模式实现LNMP平台部署。
Puppet
简介
Puppet是基于ruby语言开发的一种Linux、Unix、Windows平台的集中配置管理系统,可以C/S模式或独立运行,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。
工作流程
①Agent向Master端发起认证请求
②Master端验证其合法性,允许其连接
③Agent将本机变量(主机名、内存大小、IP地址等)通过SSL连接发送给Master
④Master检测Agent的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。解析结果生成一个“伪代码”(catelog),并将其发给Agent
⑤Agent接收到“伪代码”,开始执行
⑥执行时判断有没有File文件,如果有,则向fileserver发起请求
⑦判断有没有配置Report,如果已配置,则把执行结果发送给服务器
⑧执行结束,检测系统状态
实现过程
实验拓扑
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选项,还可以获得更为详细的输出信息。
如果上述的测试启动没有问题,可中止当前的启动,正式启动服务了
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节点可以以非守护进程的方式进行,以观察其初始化过程
1
|
#所有agent端都执行以上系列操作
|
此时,在puppet服务器端使用puppet cert命令管理客户端的证书请求,其--list选项能够查看等待签署证书的客户端列表,而--sign选项可用于为指定指定节点签署证书,如果要一次性地为多个节点的证书申请进行签署可同时使用--all选项
正式启动服务
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
Puppet基于Master/Agent模式实现LNMP平台部署相关推荐
- 搭建LNMP平台加NFS文件共享部署wordpress博客
搭建LNMP平台部署wordpress博客 安装LNMP平台 安装nginx 安装PHP 搭建mysql数据 搭建NFS 安装LNMP平台 安装nginx 1)下载官方源 [root@Web ~]# ...
- puppet中master和agent之间实现通信
puppet master和agent实现通信 1 安装puppet 1)master端 192.168.196.183 master.example.com agent端 192.1 ...
- 基于阿米巴经营模式的电商平台研发
7月份是一个崭新开始,着手基于阿米巴经营模式的电商平台研发项目,运行多年的混沌状态接口不清晰/能力不分明的牵一发而动全身的旧业务系统,终于迎来了可负载均衡的三层设计的平台重构,前端有To C的运营中心 ...
- python语言的编程模式_一种基于Python语言的EDA开发平台及其使用方法与流程
本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法. 背景技术: 目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码 ...
- 基于Kafka-Zookeeper-Nginx-FIlebeat-MySQL的日志清洗分析平台搭建
一个域名可以解析成多个ip地址,一般来说会轮询方式去解析成各个ip,但是如果其中一个服务器挂了,DNS不会立马将这个ip地址去掉,还是会解析成挂掉的ip,可能会造成访问失败.虽然客户端有重试,但还是会 ...
- 文末赠书5本 | 附源码 | 三等奖作品 | 基于RA4M2和阿里云物联网平台的智能卧室小管家
[RA4M2设计挑战赛]基于RA4M2和阿里云物联网平台的智能卧室小管家 摘要 本项目已RA4M2为主控,搭载了RT-Thread实时操作系统,配合Wi-Fi模块来提供网络通讯能力,外设接入了继电器. ...
- 部署 Apache Camel K | 从 master 分支源码构建并部署 Camel K 平台
上一篇文章基于 camel-k:1.0.0-RC2 编写,部署到一半,遇到很多问题卡住了 有些问题修改一下项目比较容易解决,而且也不能干等下一个 Release 版本发布 因此选择从 master 分 ...
- jeecgboot前端开发_一款基于代码生成器的Java快速开发平台【jeecg-boot】
原标题:一款基于代码生成器的Java快速开发平台[jeecg-boot] 今天给大家介绍一个后台脚手架框架:jeecg-boot 来看看官方怎么介绍的. 一款基于代码生成器的Java快速开发平台!全新 ...
- 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)
前言: 原理与思想 这里选用GTID主从复制模式Mysql主从复制模式,是为了更加确保主从复制的正确性.健康性与易配性.这里做的是两服务器A,B各有Mysql实例3310,两个实例间互为主从 主从复制 ...
最新文章
- 打开git命令窗口_用动图的形式打开 10 大 Git 命令?
- Mirosoft Office自动化问题
- Acwing第 8 场周赛【未完结】
- Linux一键安装Lnmp
- linux 没有权限登录,CentOS中让一个用户没有登录权限
- SpringSecurity 跨域问题 Cors
- all方法 手写promise_前端进阶高薪必看手写源码篇
- 分享17个网页设计中字体排版的优秀示例
- oracle非延迟约束,Oracle可延迟约束Deferable的使用
- kafka如何确定分区数
- js简单实现切换图片上一张下一张功能
- matlab空间复杂度测试,NSGA2算法matlab实现(多个测试函数)
- 正确使用RecyclerView分割线
- allpairs工具的使用
- 回溯法求解八皇后问题
- 穿越六年艰难转型,明道云终于再获主流投资
- 为什么今年的苹果手机不支持5G?原因有四点,网友:错怪库克了
- Linux Kernel compile
- 【No server address listed in hbase:meta for region XX】
- 【电力系统经济调度】多元宇宙算法求解电力系统多目标优化问题附Matlab