这篇博文主要介绍puppet在实际生产环境下的master/agent模型的使用;
===================================================================
1 原理介绍
1.1 原理图
1.2 详细说明
2 配置实例
2.0 准备
2.1 master配置
2.2 agent配置
2.3 master签署证书
2.4 agent一次完整的同步案例
1.1 原理图
<a href="http://s3.51cto.com/wyfs02/M01/28/60/wKiom1N4cNDQ8bmfAAPJxggyXqc425.jpg" target="_blank"></a>
1.2 详细说明
puppet agent通常运行为一个服务进程,其默认每隔半个小时向master发出一次连接请求;
puppet agent并不直接访问任何manifest,而是向master请求一个预编译的catalog文件;
puppet master会为发出请求的agent读取一个名为“site manifest”的特殊manifest文件,并基于此编译一个catalog后发送给agent;
puppet agent在获取到catalog后应用于本地;
因此,基于此种工作架构,仅在master端提供一个或少量几个manifest即可实现管理大量的节点,并能提供更加安全的工作过程;
2.0 准备
puppet利用主机名识别不同的节点,故需保证master和agent的主机名都可解析,生产环境下使用DNS解析,测试环境使用hosts文件即可;
2.1 master配置
1
2
3
4
5
6
7
8
<code># 安装puppet-server程序包</code>
<code>yum localinstall facter-1.7.3-1.el6.x86_64.rpm puppet-2.7.25-1.el6.noarch.rpm puppet-server-2.7.25-1.el6.noarch.rpm</code>
<code># 生成master配置文件:</code>
<code>puppet master --genconfig >> </code><code>/etc/puppet/puppet</code><code>.conf</code>
<code># 启动puppetmaster服务</code>
<code>puppetmasterd -</code><code>v</code> <code>-d --no-daemonize </code><code># 前台测试启动</code>
<code>service puppetmaster start </code><code># 正式启动服务</code>
<code># 服务验证:ss -antupl |grep 8140</code>
2.2 agent配置
9
<code># 安装puppet程序包</code>
<code>yum localinstall facter-1.7.3-1.el6.x86_64.rpm puppet-2.7.25-1.el6.noarch.rpm</code>
<code># 编辑配置文件</code>
<code>vi</code> <code>/ect/puppet/puppet</code><code>.conf </code><code># 在[agent]段添加server=Puppetmaster_Hostname,如</code>
<code> </code><code>server = master.lamp.com</code>
<code># 启动puppet服务</code>
<code>puppet agent --server mem.lamp.com -</code><code>v</code> <code>-d --noop --</code><code>test</code> <code># 测试启动,不实际应用配置</code>
<code>service puppet start </code><code># 正式启动agent服务</code>
<code>chkconfig puppet on </code><code># 配置开启启动</code>
2.3 master签署证书
<code># 手动签发:</code>
<code>puppet cert list </code><code># 显示待签发节点的证书请求</code>
<code>puppet cert sign Node_Name </code><code># 签署某一agent的请求</code>
<code>puppet cert sign --all </code><code># 一次性签署全部请求</code>
<code># 自动签发:</code>
<code>cat</code> <code>> </code><code>/ect/puppet/autosign</code><code>.conf << EOF *.lamp.com EOF </code><code># 会对所有来自lamp.com的主机请求都自动签发</code>
<code># 注:master端的任何修改,都要重新装载puppetmaster服务,即执行如下命令即可</code>
<code>service puppetmaster reload</code>
2.4 agent一次完整的同步案例
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
<code>[root@nginx1 ~]</code><code># puppet agent -v -t</code>
<code>info: Caching catalog </code><code>for</code> <code>nginx1.lamp.com</code>
<code>info: Applying configuration version </code><code>'1400402077'</code>
<code>notice: </code><code>/Stage</code><code>[main]</code><code>/Nginx</code><code>::Package::Redhat</code><code>/Package</code><code>[nginx]</code><code>/ensure</code><code>: created</code>
<code>notice: </code><code>/Stage</code><code>[main]</code><code>/Nginx</code><code>::Config</code><code>/File</code><code>[</code><code>/etc/nginx/nginx</code><code>.conf]</code><code>/content</code><code>:</code>
<code>--- </code><code>/etc/nginx/nginx</code><code>.conf 2013-04-27 04:36:51.000000000 +0800</code>
<code>+++ </code><code>/tmp/puppet-file20140518-5216-1feu0op-0</code> <code>2014-05-18 16:34:51.566999838 +0800</code>
<code>@@ -1,42 +1,31 @@</code>
<code>-</code><code># For more information on configuration, see:</code>
<code>-</code><code># * Official English Documentation: http://nginx.org/en/docs/</code>
<code>-</code><code># * Official Russian Documentation: http://nginx.org/ru/docs/</code>
<code>-</code>
<code>-user nginx;</code>
<code>-worker_processes 1;</code>
<code>+user nginx;</code>
<code>+worker_processes 1;</code>
<code> </code><code>error_log </code><code>/var/log/nginx/error</code><code>.log;</code>
<code>-</code><code>#error_log /var/log/nginx/error.log notice;</code>
<code>-</code><code>#error_log /var/log/nginx/error.log info;</code>
<code> </code><code>pid </code><code>/var/run/nginx</code><code>.pid;</code>
<code> </code><code>events {</code>
<code>- worker_connections 1024;</code>
<code>+ worker_connections 1024;</code>
<code>+</code>
<code> </code><code>}</code>
<code> </code><code>http {</code>
<code>- include </code><code>/etc/nginx/mime</code><code>.types;</code>
<code>- default_type application</code><code>/octet-stream</code><code>;</code>
<code>+ include </code><code>/etc/nginx/mime</code><code>.types;</code>
<code>+ default_type application</code><code>/octet-stream</code><code>;</code>
<code>+ access_log </code><code>/var/log/nginx/access</code><code>.log;</code>
<code>+ sendfile on;</code>
<code>+ keepalive_timeout 65;</code>
<code>+ tcp_nodelay on;</code>
<code>- log_format main </code><code>'$remote_addr - $remote_user [$time_local] "$request" '</code>
<code>- </code><code>'$status $body_bytes_sent "$http_referer" '</code>
<code>- </code><code>'"$http_user_agent" "$http_x_forwarded_for"'</code><code>;</code>
<code>- access_log </code><code>/var/log/nginx/access</code><code>.log main;</code>
<code>- sendfile on;</code>
<code>- </code><code>#tcp_nopush on;</code>
<code>- </code><code>#keepalive_timeout 0;</code>
<code>- keepalive_timeout 65;</code>
<code>- </code><code>#gzip on;</code>
<code>- </code><code># Load config files from the /etc/nginx/conf.d directory</code>
<code>- </code><code># The default server is in conf.d/default.conf</code>
<code>- include </code><code>/etc/nginx/conf</code><code>.d/*.conf;</code>
<code>+ </code><code>gzip</code> <code>on;</code>
<code>+ gzip_disable </code><code>"MSIE [1-6]\.(?!.*SV1)"</code><code>;</code>
<code>+ include </code><code>/etc/nginx/conf</code><code>.d/*.conf;</code>
<code>info: FileBucket got a duplicate </code><code>file</code> <code>{md5}d9dfc198c249bb4ac341198a752b9458</code>
<code>info: </code><code>/Stage</code><code>[main]</code><code>/Nginx</code><code>::Config</code><code>/File</code><code>[</code><code>/etc/nginx/nginx</code><code>.conf]: Filebucketed </code><code>/etc/nginx/nginx</code><code>.conf to puppet with </code><code>sum</code> <code>d9dfc198c249bb4ac341198a752b9458</code>
<code>notice: </code><code>/Stage</code><code>[main]</code><code>/Nginx</code><code>::Config</code><code>/File</code><code>[</code><code>/etc/nginx/nginx</code><code>.conf]</code><code>/content</code><code>: content changed </code><code>'{md5}d9dfc198c249bb4ac341198a752b9458'</code> <code>to </code><code>'{md5}df69537f815f9aacfe6dd6a439a7ba06'</code>
<code>notice: </code><code>/Stage</code><code>[main]</code><code>/Nginx</code><code>::Config</code><code>/File</code><code>[</code><code>/etc/nginx/conf</code><code>.d</code><code>/proxy</code><code>.conf]</code><code>/ensure</code><code>: defined content as </code><code>'{md5}530e67c1708924887565ce91f2c5b9f8'</code>
<code>info: Class[Nginx::Config]: Scheduling refresh of Class[Nginx::Service]</code>
<code>info: Class[Nginx::Service]: Scheduling refresh of Service[nginx]</code>
<code>info: Class[Nginx::Service]: Scheduling refresh of Exec[rebuild-nginx-vhosts]</code>
<code>notice: </code><code>/Stage</code><code>[main]</code><code>/Nginx</code><code>::Service</code><code>/Exec</code><code>[rebuild-nginx-vhosts]: Triggered </code><code>'refresh'</code> <code>from 1 events</code>
<code>info: </code><code>/Stage</code><code>[main]</code><code>/Nginx</code><code>::Service</code><code>/Exec</code><code>[rebuild-nginx-vhosts]: Scheduling refresh of Service[nginx]</code>
<code>notice: </code><code>/Stage</code><code>[main]</code><code>/Nginx</code><code>::Service</code><code>/Service</code><code>[nginx]</code><code>/ensure</code><code>: ensure changed </code><code>'stopped'</code> <code>to </code><code>'running'</code>
<code>notice: </code><code>/Stage</code><code>[main]</code><code>/Nginx</code><code>::Service</code><code>/Service</code><code>[nginx]: Triggered </code><code>'refresh'</code> <code>from 2 events</code>
<code>notice: Finished catalog run </code><code>in</code> <code>5.06 seconds</code>
<code># 特别注意notice的输出内容,分别完成了nginx程序的安装,配置文件的生成,服务的启动等操作;</code>
本文转自 xxrenzhe11 51CTO博客,原文链接:http://blog.51cto.com/xxrenzhe/1413189,如需转载请自行联系原作者