自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定

  • A+
所属分类:linux技术
摘要

  前文我们了解了puppe中模块的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14086315.html;今天我来了解下puppet的master/agent模型以及站点清单的相关话题;

  前文我们了解了puppe中模块的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14086315.html;今天我来了解下puppet的master/agent模型以及站点清单的相关话题;

  在说puppet的master/agent模型前,我们要先来回顾下master/agent的工作过程

自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定

  如上图所示,puppet的master/agent模型的工作过程;首先agent向master发送自己的主机名和facts信息,然后对应的master收到信息后,会根据对应的主机名来查找和agent相关的配置,然后把对应的配置(主要是类和模块中的资源清单内容)编译好,master把编译好的catalog发送给agent;agent收到master发送到catalog后,首先要在本机查找相关资源的状态,如果对应资源的状态和编译好的catalog中的状态一样,则不改变其状态或者跳过;如果对应的资源状态和catalog中的状态不一样,此时agent就会应用catalog,把对应资源强制更改为和catalog中的状态一样;最后agent把应用报告发送给master;此时agent就变成了我们在资源清单中定义的系统状态;这里需要注意一点catalog是一个二进制文件,不能直接查看,这个二进制文件是通过master上定义的模块,或类等资源清单中的内容编译而成;

  master和agent的通信

  在puppet的master/agent模型中,master和agent通信是以https协议通信;使用https通信就意味着要有证书验证,有证书就会有ca;在puppet的master/agent模型中,它内置了ca,意思就是我们不需要再手动搭建ca;对应master的证书,私钥文件以及ca的证书私钥文件,puppet master都会自动生成;对于agent的私钥和证书签署文件也会由puppet agent自动生成;并且在第一次启动agent时,它默认会把生成的证书签发文件发送给master,等待master签发证书;在master上签发证书,这一步需要人工手动干预;证书签发好以后,master和agent才可以正常通信;默认情况下agent是每30分钟到master上拉取一次相关配置,这也就意味着我们在master端上的资源清单内容最多不超过30分钟就能在对应的agent上得到应用;

  站点清单

  在上述master/agent模型的工作过程中,agent向master发送主机名和facts,然后对应master把对应主机名的配置进行编译然后发送给对应agent;这里master根据什么来查找对应主机名的对应配置呢?通常情况下如果我们在master端上不定义站点清单,对应的agent就无法获取到对应的配置;也就说站点清单是用来定义哪些agent上,应该跑哪些资源或模块;这个逻辑和我们在使用ansible一样,定义好角色以后,还需要额外的playbook来定义那些主机上应该应用那些角色;对于puppet也是一样,我们定义好模块以后,至于哪些主机应用哪些模块这个是需要我们定义站点清单;

  puppet的master/agent模型的搭建

  部署master端

  配置主机名解析

[root@master ~]# cat /etc/hosts 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.16.151 master.test.org master 192.168.16.152 node01.test.org node01 192.168.16.153 node02.test.org node02 [root@master ~]#  

  提示:除了各服务器之间的主机名解析,我们还需要注意确保各服务器时间同步,关闭selinux,确保iptables是关闭状态;

  安装puppet-server包

[root@master ~]# yum install -y puppet-server 

  提示:在master端安装puppet-server这个包默认会把puppet当作依赖包一并安装;

  启动服务

[root@master ~]# systemctl start puppetmaster.service  [root@master ~]# ss -tnl State       Recv-Q Send-Q          Local Address:Port                         Peer Address:Port               LISTEN      0      128                         *:22                                      *:*                   LISTEN      0      100                 127.0.0.1:25                                      *:*                   LISTEN      0      128                         *:8140                                    *:*                   LISTEN      0      128                      [::]:22                                   [::]:*                   LISTEN      0      100                     [::1]:25                                   [::]:*                   [root@master ~]#  

  提示:puppet master默认会监听在tcp的8140端口,用于接收agent来master获取配置;所以请确保master端的8140端口能够正常处于监听状态;

  部署agent端

  安装puppet

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

  编辑配置文件,配置puppet server的地址

自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定

  提示:编辑/etc/puppet/puppet.conf文件,将server=puppetmaster主机的主机名配置上,如上;如果使用主机名的形式,请确保对应agent能够正常解析;

  启动服务

[root@node01 ~]# systemctl start puppet [root@node01 ~]# ss -tnl State       Recv-Q Send-Q          Local Address:Port                         Peer Address:Port               LISTEN      0      128                         *:22                                      *:*                   LISTEN      0      100                 127.0.0.1:25                                      *:*                   LISTEN      0      128                      [::]:22                                   [::]:*                   LISTEN      0      100                     [::1]:25                                   [::]:*                   [root@node01 ~]# ps aux |grep puppet root      1653  0.0  0.0 115404  1436 ?        Ss   15:27   0:00 /bin/sh /usr/bin/start-puppet-agent agent  --no-daemonize root      1654 26.7  2.2 317640 41888 ?        Sl   15:27   0:02 /usr/bin/ruby /usr/bin/puppet agent --no-daemonize root      1680  0.0  0.0 112808   968 pts/0    S+   15:28   0:00 grep --color=auto puppet [root@node01 ~]#  

  提示:puppet agent虽然也是一个守护进程工作,但它主要不是对外提供服务,它之所以要工作为守护进程,是因为它要周期性的到master端拉取和自己相关的配置;所以它不会监听任何端口;

  在master端查看未签发证书列表

[root@master ~]# puppet cert list   "node01.test.org" (SHA256) AD:01:59:E7:6C:97:E7:5E:67:09:B9:52:94:0D:37:89:82:8B:EE:49:BB:4D:FC:E1:51:64:BE:EF:71:47:15:11   "node02.test.org" (SHA256) E1:EC:5B:0C:BF:B7:4C:B9:4F:10:A9:12:34:8B:7A:36:E3:A1:D4:EC:DD:DD:DC:F4:05:48:0B:85:B5:70:AC:28 [root@master ~]#  

  提示:puppet默认会自己维护一个ca,我们只需要用对应的子命令进行管理即可;以上命令表示列出未签发的证书列表(即收到的agent证书签发文件列表);从上面的信息可以看到现在node01和node02都没有签发证书;

  在master端签发证书

[root@master ~]# puppet cert list   "node01.test.org" (SHA256) AD:01:59:E7:6C:97:E7:5E:67:09:B9:52:94:0D:37:89:82:8B:EE:49:BB:4D:FC:E1:51:64:BE:EF:71:47:15:11   "node02.test.org" (SHA256) E1:EC:5B:0C:BF:B7:4C:B9:4F:10:A9:12:34:8B:7A:36:E3:A1:D4:EC:DD:DD:DC:F4:05:48:0B:85:B5:70:AC:28 [root@master ~]# puppet cert sign node01.test.org Notice: Signed certificate request for node01.test.org Notice: Removing file Puppet::SSL::CertificateRequest node01.test.org at '/var/lib/puppet/ssl/ca/requests/node01.test.org.pem' [root@master ~]# puppet cert list   "node02.test.org" (SHA256) E1:EC:5B:0C:BF:B7:4C:B9:4F:10:A9:12:34:8B:7A:36:E3:A1:D4:EC:DD:DD:DC:F4:05:48:0B:85:B5:70:AC:28 [root@master ~]# puppet cert sign --all Notice: Signed certificate request for node02.test.org Notice: Removing file Puppet::SSL::CertificateRequest node02.test.org at '/var/lib/puppet/ssl/ca/requests/node02.test.org.pem' [root@master ~]# puppet cert list [root@master ~]# puppet cert list --all + "master.test.org" (SHA256) 0C:CC:20:EE:F5:FC:73:21:0B:15:73:EF:A5:0B:3A:F8:01:DB:F7:07:7C:DB:78:87:80:87:FC:F2:BF:E7:2F:30 (alt names: "DNS:master.test.org", "DNS:puppet", "DNS:puppet.test.org") + "node01.test.org" (SHA256) 34:BE:E1:1E:26:15:56:56:C3:A0:0D:FB:7F:01:B1:80:35:EC:1D:07:26:C7:05:CA:6E:19:8C:75:9A:A4:67:4E + "node02.test.org" (SHA256) E7:B6:B0:FD:04:61:A8:87:D9:E5:DA:51:8B:1D:E0:AD:11:F0:A2:65:43:6D:C4:8D:54:C8:75:8B:DF:CC:51:93 [root@master ~]#  

  提示:签发证书需要用cert sign+对应要签发的证书的主机名;如果不想一个一个指定来签发,也可以使用--all选项来签发所有未签发的证书;到此puppet的master/agent模型就搭建好了;后续我们只需要在master端上定义模块和站点清单即可;

  示例:在master上创建redis模块,主要功能是安装启动redis,并让其配置为主从复制模式;

  在master端上创建模块目录结构

[root@master ~]# mkdir -pv /etc/puppet/modules/redis/{manifests,files,templates,lib,spec,tests} mkdir: created directory ‘/etc/puppet/modules/redis’ mkdir: created directory ‘/etc/puppet/modules/redis/manifests’ mkdir: created directory ‘/etc/puppet/modules/redis/files’ mkdir: created directory ‘/etc/puppet/modules/redis/templates’ mkdir: created directory ‘/etc/puppet/modules/redis/lib’ mkdir: created directory ‘/etc/puppet/modules/redis/spec’ mkdir: created directory ‘/etc/puppet/modules/redis/tests’ [root@master ~]# tree /etc/puppet/modules/redis/ /etc/puppet/modules/redis/ ├── files ├── lib ├── manifests ├── spec ├── templates └── tests  6 directories, 0 files [root@master ~]#  

  在/etc/puppet/modules/redis/manifests/目录下创建资源清单

[root@master ~]# cat /etc/puppet/modules/redis/manifests/init.pp  class redis{         package{"redis":                 ensure  => installed,         }         service{"redis":                 ensure  => running,                 enable  => true,                 hasrestart      => true,                 restart => 'service redis restart',         } } [root@master ~]# cat /etc/puppet/modules/redis/manifests/master.pp  class redis::master($masterport='6379',$masterpass='admin') inherits redis {         file{"/etc/redis.conf":                 ensure  => file,                 content => template('redis/redis-master.conf.erb'),                 owner   => 'redis',                 group   => 'root',                 mode    => '0644',         }         Service["redis"]{                 subscribe       => File["/etc/redis.conf"],                 restart => 'systemctl restart redis'         } } [root@master ~]# cat /etc/puppet/modules/redis/manifests/slave.pp  class redis::slave($masterip,$masterport='6379',$masterpass='admin') inherits redis {         file{"/etc/redis.conf":                 ensure  => file,                 content => template('redis/redis-slave.conf.erb'),                 owner   => 'redis',                 group   => 'root',                 mode    => '0644',         }         Service["redis"]{                 subscribe       => File["/etc/redis.conf"],                 restart => 'systemctl restart redis'         } } [root@master ~]#  

  在templates目录创建对应的模版文件

  redis-master.conf.erb文件内容

自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定

[root@master ~]# cat /etc/puppet/modules/redis/templates/redis-master.conf.erb bind 0.0.0.0 protected-mode yes port <%= @masterport %> tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis/redis.log databases 16 requirepass <%= @masterpass %> save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /var/lib/redis slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes [root@master ~]# 

View Code

  redis-slave.conf.erb文件内容

自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定

[root@master ~]# cat /etc/puppet/modules/redis/templates/redis-slave.conf.erb bind 0.0.0.0 protected-mode yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis/redis.log databases 16 slaveof <%= @masterip %> <%= @masterport %> masterauth <%= @masterpass %> save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /var/lib/redis slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes [root@master ~]# 

View Code

  redis模块目录和文件存放情况,以及模版文件中需要传递参数

[root@master ~]# tree /etc/puppet/modules/redis/ /etc/puppet/modules/redis/ ├── files ├── lib ├── manifests │   ├── init.pp │   ├── master.pp │   └── slave.pp ├── spec ├── templates │   ├── redis-master.conf.erb │   └── redis-slave.conf.erb └── tests  6 directories, 5 files [root@master ~]# grep -Ei "^port|requirepass|masterauth|slaveof" /etc/puppet/modules/redis/templates/redis-master.conf.erb  port <%= @masterport %> requirepass <%= @masterpass %> [root@master ~]# grep -Ei "^port|requirepass|masterauth|slaveof" /etc/puppet/modules/redis/templates/redis-slave.conf.erb  port 6379 slaveof <%= @masterip %> <%= @masterport %> masterauth <%= @masterpass %> [root@master ~]#  

  提示:到此redis模块就准备好了;

  定义站点清单文件

[root@master ~]# cat /etc/puppet/manifests/site.pp node 'node01.test.org'{ 	class{"redis::master": 		masterport	=> "6379", 		masterpass	=> "admin123.com" 	} } node 'node02.test.org'{ 	class{"redis::slave": 		masterip	=> '192.168.16.152', 		masterport	=> '6379', 		masterpass	=> 'admin123.com' 	} } [root@master ~]#  

  提示:站点清单必须是在/etc/puppet/manifests/目录下,名字必须为site.pp,其内容必须由关键字node来定义对应一个主机或一类主机要应用的资源;站点清单也可以使用类的继承和我们在定义类时的使用差不多;

  在node01上获取自己相关的配置

自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定

  提示:可以看到在node01上手动拉取配置能够获取到对应到配置;

  取消--noop 选项跑一遍,看看对应到redis是否启动?配置文件是否上我们指定到就配置?

[root@node01 ~]# puppet agent -v --no-daemonize  Notice: Starting Puppet client version 3.6.2 Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for node01.test.org Warning: The package type's allow_virtual parameter will be changing its default value from false to true in a future release. If you do not want to allow virtual packages, please explicitly set allow_virtual to false.    (at /usr/share/ruby/vendor_ruby/puppet/type.rb:816:in `set_default') Info: Applying configuration version '1607328529' Info: /Stage[main]/Redis::Master/File[/etc/redis.conf]: Filebucketed /etc/redis.conf to puppet with sum d43fae161baaf47638d0bb571785974d Notice: /Stage[main]/Redis::Master/File[/etc/redis.conf]/content: content changed '{md5}d43fae161baaf47638d0bb571785974d' to '{md5}32a39b519eb7a9f70a4bdf4705a7afc0' Notice: /Stage[main]/Redis::Master/File[/etc/redis.conf]/mode: mode changed '0640' to '0644' Info: /Stage[main]/Redis::Master/File[/etc/redis.conf]: Scheduling refresh of Service[redis] Info: /Stage[main]/Redis::Master/File[/etc/redis.conf]: Scheduling refresh of Service[redis] Notice: /Stage[main]/Redis/Service[redis]/ensure: ensure changed 'stopped' to 'running' Info: /Stage[main]/Redis/Service[redis]: Unscheduling refresh on Service[redis] Notice: Finished catalog run in 0.32 seconds ^CNotice: Caught INT; calling stop [root@node01 ~]# ss -tnl State      Recv-Q Send-Q                    Local Address:Port                                   Peer Address:Port               LISTEN     0      128                                   *:22                                                *:*                   LISTEN     0      100                           127.0.0.1:25                                                *:*                   LISTEN     0      128                                   *:6379                                              *:*                   LISTEN     0      128                                [::]:22                                             [::]:*                   LISTEN     0      100                               [::1]:25                                             [::]:*                   [root@node01 ~]# grep -Ei "^port|bind|requirepass" /etc/redis.conf  bind 0.0.0.0 port 6379 requirepass admin123.com [root@node01 ~]#  

  提示:可以看到node01上的reids已经正常启动,并且配置文件中的内容也是我们传递参数的内容;

  在node02上手动拉取配置并运行,看看对应redis是否正常运行?配置文件下是否是我们指定传递的参数的配置文件?

[root@node02 ~]# puppet agent -v --no-daemonize  Notice: Starting Puppet client version 3.6.2 Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for node02.test.org Warning: The package type's allow_virtual parameter will be changing its default value from false to true in a future release. If you do not want to allow virtual packages, please explicitly set allow_virtual to false.    (at /usr/share/ruby/vendor_ruby/puppet/type.rb:816:in `set_default') Info: Applying configuration version '1607328529' Notice: /Stage[main]/Redis/Package[redis]/ensure: created Info: FileBucket got a duplicate file {md5}d98629fded012cd2a25b9db0599a9251 Info: /Stage[main]/Redis::Slave/File[/etc/redis.conf]: Filebucketed /etc/redis.conf to puppet with sum d98629fded012cd2a25b9db0599a9251 Notice: /Stage[main]/Redis::Slave/File[/etc/redis.conf]/content: content changed '{md5}d98629fded012cd2a25b9db0599a9251' to '{md5}d1f0efeaee785f0d26eb2cd82acaf1f9' Notice: /Stage[main]/Redis::Slave/File[/etc/redis.conf]/mode: mode changed '0640' to '0644' Info: /Stage[main]/Redis::Slave/File[/etc/redis.conf]: Scheduling refresh of Service[redis] Info: /Stage[main]/Redis::Slave/File[/etc/redis.conf]: Scheduling refresh of Service[redis] Notice: /Stage[main]/Redis/Service[redis]/ensure: ensure changed 'stopped' to 'running' Info: /Stage[main]/Redis/Service[redis]: Unscheduling refresh on Service[redis] Notice: Finished catalog run in 10.62 seconds ^CNotice: Caught INT; calling stop [root@node02 ~]# ss -tnl State      Recv-Q Send-Q                    Local Address:Port                                   Peer Address:Port               LISTEN     0      128                                   *:22                                                *:*                   LISTEN     0      100                           127.0.0.1:25                                                *:*                   LISTEN     0      128                                   *:6379                                              *:*                   LISTEN     0      128                                [::]:22                                             [::]:*                   LISTEN     0      100                               [::1]:25                                             [::]:*                   [root@node02 ~]# grep -Ei "^port|requirepass|slaveof|masterauth" /etc/redis.conf port 6379 slaveof 192.168.16.152 6379 masterauth admin123.com [root@node02 ~]#  

  提示:可以看到node02上的redis已经正常跑起来了,并且配置文件中的对应参数也是为指定传入的参数;

  验证:在node01上登陆redis,创建一个key,看看对应node02上的redis是否正常将node01上创建的key同步到node02上的redis上?

[root@node01 ~]# redis-cli  127.0.0.1:6379> AUTH admin123.com OK 127.0.0.1:6379> set test test OK 127.0.0.1:6379> get test "test" 127.0.0.1:6379> exit [root@node01 ~]# redis-cli  -h node02.test.org -a admin123.com  node02.test.org:6379> get test "test" node02.test.org:6379>  

  提示:可以看到在node01上的redis上写入一个key在node02上能够看到对应key的值,说明redis的主从复制正常;以上就是puppet master/agent模型上安装启动redis主从的简单示例;

  puppet多环境设定

  所谓多环境指一个agent通过指定不同的环境名称,可以在master上获取不同环境的配置清单,从而实现在不同的环境中,对应的agent拉取不同的配置到本地应用;默认不配置多环境,在agent来master拉取配置都是拉取的生产环境的配置(production);

  示例:在master端上配置多个环境,对应节点使用传递不同环境来获取不同环境的配置

自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定

  提示:在master端端配置文件中新整以上master配置段,并指明environmentpath位置;这里需要注意,更改了配置文件需要重启服务才可生效;

  查看confdir的位置

[root@master ~]# puppet config print |grep confdir confdir = /etc/puppet [root@master ~]#  

  在/etc/puppet目录下创建environments目录,并在其下创建对应环境名的目录以及子目录

[root@master ~]# mkdir -pv /etc/puppet/environments/{testing,development,production}/{manifests,modules} mkdir: created directory ‘/etc/puppet/environments’ mkdir: created directory ‘/etc/puppet/environments/testing’ mkdir: created directory ‘/etc/puppet/environments/testing/manifests’ mkdir: created directory ‘/etc/puppet/environments/testing/modules’ mkdir: created directory ‘/etc/puppet/environments/development’ mkdir: created directory ‘/etc/puppet/environments/development/manifests’ mkdir: created directory ‘/etc/puppet/environments/development/modules’ mkdir: created directory ‘/etc/puppet/environments/production’ mkdir: created directory ‘/etc/puppet/environments/production/manifests’ mkdir: created directory ‘/etc/puppet/environments/production/modules’ [root@master ~]# tree /etc/puppet/environments/ /etc/puppet/environments/ ├── development │   ├── manifests │   └── modules ├── production │   ├── manifests │   └── modules └── testing     ├── manifests     └── modules  9 directories, 0 files [root@master ~]#  

  提示:在每个环境目录下必须创建manifests和modules目录,manifests目录用于存放站点清单,modules用于存放模块;

  在testing环境下创建安装memcached,并指定监听在11211端口的模块和站点清单,配置development环境下的memcached监听在11212端口,配置prediction环境的memcached监听在11213端口

  创建memcached模块目录结构

[root@master ~]# mkdir -pv /etc/puppet/environments/testing/modules/memcached/{manifests,templates,files,lib,spec,tests} mkdir: created directory ‘/etc/puppet/environments/testing/modules/memcached’ mkdir: created directory ‘/etc/puppet/environments/testing/modules/memcached/manifests’ mkdir: created directory ‘/etc/puppet/environments/testing/modules/memcached/templates’ mkdir: created directory ‘/etc/puppet/environments/testing/modules/memcached/files’ mkdir: created directory ‘/etc/puppet/environments/testing/modules/memcached/lib’ mkdir: created directory ‘/etc/puppet/environments/testing/modules/memcached/spec’ mkdir: created directory ‘/etc/puppet/environments/testing/modules/memcached/tests’ [root@master ~]# tree /etc/puppet/environments/testing/modules/memcached/ /etc/puppet/environments/testing/modules/memcached/ ├── files ├── lib ├── manifests ├── spec ├── templates └── tests  6 directories, 0 files [root@master ~]#  

  在testing环境下的manifests目录下创建init.pp文件

[root@master ~]# cat /etc/puppet/environments/testing/modules/memcached/manifests/init.pp class memcached{ 	package{"memcached": 		ensure	=> installed, 	} -> 	file{"/etc/sysconfig/memcached": 		ensure	=> file, 		source	=> 'puppet:///modules/memcached/memcached', 		owner	=> 'root', 		group	=> 'root', 		mode	=> '0644', 	} ~> 	service{"memcached": 		ensure	=> running, 		enable	=> true 	} } [root@master ~]#  

  在testing环境下的files目录提供memcached配置文件

[root@master ~]# cat /etc/puppet/environments/testing/modules/memcached/files/memcached  PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="" [root@master ~]#  

  在testing环境下的manifests目录下创建站点文件site.pp

[root@master ~]# cat /etc/puppet/environments/testing/manifests/site.pp  node 'node02.test.org'{ 	include memcached } [root@master ~]#  

  提示:到此testing环境的memcached模块的配置和站点清单就配置好了;

  配置development环境下的memcached模块和站点清单

  复制testing环境下的模块到development

[root@master ~]# cp -a /etc/puppet/environments/testing/modules/memcached/ /etc/puppet/environments/development/modules/ [root@master ~]# tree /etc/puppet/environments/development/modules/ /etc/puppet/environments/development/modules/ └── memcached     ├── files     │   └── memcached     ├── lib     ├── manifests     │   └── init.pp     ├── spec     ├── templates     └── tests  7 directories, 2 files [root@master ~]#  

  编辑files目录下的memcached配置文件,修改监听端口为11212

[root@master ~]# cat /etc/puppet/environments/development/modules/memcached/files/memcached PORT="11212" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="" [root@master ~]#  

  提示:testing和development环境下的memcached除了配置文件不同,站点清单一样;

  复制testing环境下的站点清单到development环境下

[root@master ~]# cp /etc/puppet/environments/testing/manifests/site.pp /etc/puppet/environments/development/manifests/ [root@master ~]# cat /etc/puppet/environments/development/manifests/site.pp  node 'node02.test.org'{ 	include memcached } [root@master ~]#  

  提示:到此development环境下到memcached模块和站点清单文件就配置好了;

  配置production环境下的memcached模块和站点清单 

  复制testing环境下到memcached模块

[root@master ~]# cp -a /etc/puppet/environments/testing/modules/memcached/ /etc/puppet/environments/production/modules/ [root@master ~]# tree /etc/puppet/environments/production/modules/ /etc/puppet/environments/production/modules/ └── memcached     ├── files     │   └── memcached     ├── lib     ├── manifests     │   └── init.pp     ├── spec     ├── templates     └── tests  7 directories, 2 files [root@master ~]#  

  编辑files目录下的memcached配置文件,修改监听端口为11213

[root@master ~]# cat /etc/puppet/environments/production/modules/memcached/files/memcached PORT="11213" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="" [root@master ~]#  

  复制站点文件到production环境下

[root@master ~]# cp /etc/puppet/environments/testing/manifests/site.pp /etc/puppet/environments/production/manifests/ [root@master ~]# cat /etc/puppet/environments/production/manifests/site.pp  node 'node02.test.org'{ 	include memcached } [root@master ~]#  

  提示:到此三个环境到memcached模块和站点清单都准备好了;

  在node02上使用不同的环境来启动监听不同的端口的memcached

  使用testing环境

[root@node02 ~]# puppet agent -v --no-daemonize --environment=testing  Notice: Starting Puppet client version 3.6.2 Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for node02.test.org Warning: The package type's allow_virtual parameter will be changing its default value from false to true in a future release. If you do not want to allow virtual packages, please explicitly set allow_virtual to false.    (at /usr/share/ruby/vendor_ruby/puppet/type.rb:816:in `set_default') Info: Applying configuration version '1607334372' Notice: /Stage[main]/Memcached/Service[memcached]/ensure: ensure changed 'stopped' to 'running' Info: /Stage[main]/Memcached/Service[memcached]: Unscheduling refresh on Service[memcached] Notice: Finished catalog run in 0.29 seconds ^CNotice: Caught INT; calling stop [root@node02 ~]# ss -tnl State      Recv-Q Send-Q                    Local Address:Port                                   Peer Address:Port               LISTEN     0      128                                   *:22                                                *:*                   LISTEN     0      100                           127.0.0.1:25                                                *:*                   LISTEN     0      128                                   *:11211                                             *:*                   LISTEN     0      128                                   *:6379                                              *:*                   LISTEN     0      128                                [::]:22                                             [::]:*                   LISTEN     0      100                               [::1]:25                                             [::]:*                   LISTEN     0      128                                [::]:11211                                          [::]:*                   [root@node02 ~]#  

  提示:可以看到在node02上使用--envrionment选项指定为testing环境,对应启动的memcached的端口为11211;

  使用development环境

[root@node02 ~]# puppet agent -v --no-daemonize --environment=development Notice: Starting Puppet client version 3.6.2 Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for node02.test.org Warning: The package type's allow_virtual parameter will be changing its default value from false to true in a future release. If you do not want to allow virtual packages, please explicitly set allow_virtual to false.    (at /usr/share/ruby/vendor_ruby/puppet/type.rb:816:in `set_default') Info: Applying configuration version '1607334662' Info: /Stage[main]/Memcached/File[/etc/sysconfig/memcached]: Filebucketed /etc/sysconfig/memcached to puppet with sum 05503957e3796fbe6fddd756a7a102a0 Notice: /Stage[main]/Memcached/File[/etc/sysconfig/memcached]/content: content changed '{md5}05503957e3796fbe6fddd756a7a102a0' to '{md5}b69eb8ec579bb28f4140f7debf17f281' Info: /Stage[main]/Memcached/File[/etc/sysconfig/memcached]: Scheduling refresh of Service[memcached] Notice: /Stage[main]/Memcached/Service[memcached]: Triggered 'refresh' from 1 events Notice: Finished catalog run in 0.34 seconds ^CNotice: Caught INT; calling stop [root@node02 ~]# ss -tnl State      Recv-Q Send-Q                    Local Address:Port                                   Peer Address:Port               LISTEN     0      128                                   *:22                                                *:*                   LISTEN     0      100                           127.0.0.1:25                                                *:*                   LISTEN     0      128                                   *:6379                                              *:*                   LISTEN     0      128                                   *:11212                                             *:*                   LISTEN     0      128                                [::]:22                                             [::]:*                   LISTEN     0      100                               [::1]:25                                             [::]:*                   LISTEN     0      128                                [::]:11212                                          [::]:*                   [root@node02 ~]#  

  提示:可以看到使用development环境,对应启动的memcached的端口就是11212;

  使用production环境

[root@node02 ~]# puppet agent -v --no-daemonize --environment=production Notice: Starting Puppet client version 3.6.2 Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for node02.test.org Warning: The package type's allow_virtual parameter will be changing its default value from false to true in a future release. If you do not want to allow virtual packages, please explicitly set allow_virtual to false.    (at /usr/share/ruby/vendor_ruby/puppet/type.rb:816:in `set_default') Info: Applying configuration version '1607334761' Info: /Stage[main]/Memcached/File[/etc/sysconfig/memcached]: Filebucketed /etc/sysconfig/memcached to puppet with sum b69eb8ec579bb28f4140f7debf17f281 Notice: /Stage[main]/Memcached/File[/etc/sysconfig/memcached]/content: content changed '{md5}b69eb8ec579bb28f4140f7debf17f281' to '{md5}f7cdb226870b0164bbdb8671eb11e433' Info: /Stage[main]/Memcached/File[/etc/sysconfig/memcached]: Scheduling refresh of Service[memcached] Notice: /Stage[main]/Memcached/Service[memcached]: Triggered 'refresh' from 1 events Notice: Finished catalog run in 0.33 seconds ^CNotice: Caught INT; calling stop [root@node02 ~]# ss -tnl State      Recv-Q Send-Q                    Local Address:Port                                   Peer Address:Port               LISTEN     0      128                                   *:22                                                *:*                   LISTEN     0      100                           127.0.0.1:25                                                *:*                   LISTEN     0      128                                   *:6379                                              *:*                   LISTEN     0      128                                   *:11213                                             *:*                   LISTEN     0      128                                [::]:22                                             [::]:*                   LISTEN     0      100                               [::1]:25                                             [::]:*                   LISTEN     0      128                                [::]:11213                                          [::]:*                   [root@node02 ~]#  

  提示:可以看到memcached监听地址就变为了11213;如以上测试没有任何问题,接下来就可以确定对应agent的环境,配置agent的环境;

  配置agent端的环境

自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定

  提示:在agent的配置文件中使用environment指定对应的环境名称,保存退出重启puppetagent服务,现在这台agent就会周期性的到master端拉取testing环境的相关配置;

  以上就是puppet的master/agent模型以及多环境相关配置的使用和测试;