设为首页 收藏本站
查看: 992|回复: 0

[经验分享] Puppet基于Master/Agent模式实现LNMP平台部署

[复制链接]

尚未签到

发表于 2018-8-2 09:33:47 | 显示全部楼层 |阅读模式
  前言
  随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的、繁琐的工作利用自动化处理。前期我们介绍了运维自动化工具ansible的简单应用,本期带来的是运维自动化神器puppet基于Master/Agent模式实现LNMP平台部署。
  Puppet
  简介
  Puppet是基于ruby语言开发的一种Linux、Unix、Windows平台的集中配置管理系统,可以C/S模式或独立运行,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。
  工作流程
DSC0000.jpg

  ①Agent向Master端发起认证请求
  ②Master端验证其合法性,允许其连接
  ③Agent将本机变量(主机名、内存大小、IP地址等)通过SSL连接发送给Master
  ④Master检测Agent的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。解析结果生成一个“伪代码”(catelog),并将其发给Agent
  ⑤Agent接收到“伪代码”,开始执行
  ⑥执行时判断有没有File文件,如果有,则向fileserver发起请求
  ⑦判断有没有配置Report,如果已配置,则把执行结果发送给服务器
  ⑧执行结束,检测系统状态
  实现过程
  实验拓扑
DSC0001.jpg

#系统环境:CentOS6.6  
#各主机间可通过域名通信,基于hosts实现
  
#各主机时间已同步
  Puppet Master配置
  安装所需软件包
[root@node1 ~]# yum install puppet puppet-server -y  创建模块目录
[root@node1 ~]# cd /etc/puppet/modules/  
[root@node1 modules]# mkdir nginx/{files,manifests} php/{files,manifests} mysql/{files,manifests} -pv
  准备各服务配置文件
[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/
  创建各模块
[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"
  以上资源详解
#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选项,还可以获得更为详细的输出信息。
DSC0002.jpg

  如果上述的测试启动没有问题,可中止当前的启动,正式启动服务了
[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配置
  安装所需软件包
[root@node3 ~]# yum install puppet -y  指定puppet server
[root@node3 ~]# vim /etc/puppet/puppet.conf   #也可手动命令指定  

  
[agent]
  

  
server = node1.scholar.com
  启动服务之前先来看一下各agent端所需软件是否安装
[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节点可以以非守护进程的方式进行,以观察其初始化过程
DSC0003.jpg

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

  正式启动服务
[root@node3 ~]# service puppet start  
Starting puppet:                                           [  OK  ]
  
[root@node4 ~]# service puppet start
  
Starting puppet:                                           [  OK  ]
  再次检查各agent端软件状态
[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:off1:off2:on3:on4:on5:on6: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:off1:off2:on3:on4:on5:on6: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:off1:off2:on3:on4:on5:on6:off
  各服务已按预设启动,Puppet基于Master/Agent模式实现LNMP平台部署成功完成
  Puppet Kick
  agent跟master默认30分钟通信一次,如果在这期间,某一服务出现bug或配置有误,如何实现紧急推送,尽量减少业务损失呢?下面简单说一下puppet kick功能的实现
  Puppet Agent配置
[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推送
[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还是略胜一筹的,以上只是牛刀小试,有兴趣的朋友可以深入研究,部署过程中遇到问题可留言交流。以上仅为个人学习整理,如有错漏,大神勿喷~~~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-545129-1-1.html 上篇帖子: puppet-linux运维 下篇帖子: Puppet 通过基础模块、类、节点正则表达式批量管理Apache服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表