天天看点

一步一步学会puppet(四)--master/agent模型

这篇博文主要介绍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 &gt;&gt; </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>&gt; </code><code>/ect/puppet/autosign</code><code>.conf &lt;&lt; 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,如需转载请自行联系原作者

继续阅读