Puppet基于MasterAgent模式实现LNMP平台部署

Puppet基于MasterAgent模式实现LNMP平台部署,第1张

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

前言

随着IT行业的快速发展,传统的运维方式依赖大量的人力,使得运维人员很难自动处理大量重复繁琐的工作。前期我们介绍了运维自动化工具ansible的简单应用。本期带来了运维自动化神器puppet,实现基于主/代理模式的LNMP平台部署。

木偶

简介

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

工作流

①代理向主机发起认证请求。

②②主终端验证其合法性并允许其连接。

③代理发送本地变量(主机名、内存大小、IP地址等。)通过SSL连接来掌握。

④Master检测代理的主机名,然后找到manifest对应的节点配置,分析这部分内容。解析结果以生成“伪代码”(catelog)并发送给代理。

⑤代理收到“伪代码”并开始执行。

⑥执行时,判断是否有文件File,如果有,向文件服务器发起请求。

⑦判断是否配置了报表,如果配置了报表,则将执行结果发送给服务器。

执行结束,检查系统状态。

实施过程

实验拓扑

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

傀儡师配置

安装所需的软件包

[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,作为puppetserver的本地主机向CA申请证书,获取证书,去除CA的证书签名请求等过程。,然后启动服务进程,准备接受各个代理的连接请求。您还可以通过对以下命令使用-debug选项来获得更详细的输出信息。


如果上面的测试启动没有问题,就可以停止当前的启动,正式启动服务。

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

傀儡代理配置

安装所需的软件包

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

指定傀儡服务器

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

在启动服务之前,请检查是否安装了每个代理所需的软件。

[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代理第一次启动时,它将从为它指定的puppet服务器申请一个证书,并完成后续的连接请求。出于同样的原因,出于测试的目的,可以通过非守护进程的方式访问当前puppet集群中的第一个代理节点,以观察其初始化过程。

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

此时,在puppet服务器端使用puppetcert命令来管理客户端的证书请求,其-list选项可以查看等待签署证书的客户端列表,而-sign选项可以用于签署指定节点的证书。如果希望一次为多个节点签署证书请求,可以同时使用-all选项

正式开始服务

[root@node3 ~]# service puppet start Starting puppet:                                           [  OK  ] [root@node4 ~]# service puppet start Starting puppet:                                           [  OK  ]

再次检查每个代理软件的状态。

[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基于主/代理模式成功部署LNMP平台。

木偶踢

默认情况下,我们每30分钟与主代理通信一次。如果在此期间某项服务出现bug或配置错误,如何实现紧急推送,将业务损失降到最低?下面简单说一下木偶踢腿功能的实现。

傀儡代理配置

[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都执行以上 *** 作

木偶大师推

[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基于主/代理模式的LNMP平台部署实验已经完成

结尾

Puppet的基础应用就这些了。Puppet是强大的,从管理规模上和Ansible相比,Puppet还是略胜一筹的。以上只是小试牛刀,有兴趣的朋友可以深入研究一下,部署时遇到问题可以留言交流。以上仅供个人学习。如有错漏,请勿喷~~~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/780000.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存