天天看点

深度分析puppet自带filebucket的备份恢复功能

日常情况下都是通过puppetmaster端进行推送变更,推送可以用MC实现,至于变更的回滚可以通过SVN活该Git辅助实现。

存在这样一种情况,在一个复杂的环境中,存在多个管理员,而你是负责变更推送的,他们只是做应用的,很多时候是需要登录系统权限的,有一次,一个管理员为了满足他的应用并没有告知给你,登录到系统之后,修改了一个配置文件,完后也没有保存,而这个配置文件恰恰是你这边puppetmaster管理的配置文件,在你做puppet推送之后,那个管理员的配置文件被还原了。而那个管理员发现应用出了问题,要求你给他还原,你如何做呢?

答案是可以通过filebucket功能完成,那么那么多机器,如何集中管理这些单版本呢。

<a></a>

1

2

3

4

5

6

<code>[root@linuxmaster1poc manifests]# cat site.pp</code>

<code> </code><code>import</code> <code>'nodes/*.pp'</code>

<code> </code><code>$puppetserver = ‘puppetmaster.kisspuppet.com’</code>

<code>filebucket { ‘main’:</code>

<code>path =&gt; </code><code>"/puppet/version/hosts/${fact_certname}"</code><code>,</code>

<code> </code><code>}</code>

备注:有以上模块之后,只要在file模块中添加<code>backup =&gt; 'main',</code>,那么这个文件就会被保存到以上目录中。

参数clientbucketdir为当file模块中没有定义<code>backup =&gt; 'main',</code>时被保存的路径,默认在<code>/var/lib/puppet/clientbucket</code>

参数bucketdir为使用<code>puppet filebucket backup [file]</code>保存的路径

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<code>[root@linux57poc ~]# cat /etc/puppet/puppet.conf</code>

<code>[main]</code>

<code>    </code><code>user = puppet</code>

<code>    </code><code>group = puppet</code>

<code>    </code><code>var</code><code>dir = /</code><code>var</code><code>/lib/puppet</code>

<code>    </code><code>logdir = /</code><code>var</code><code>/log/puppet</code>

<code>    </code><code>rundir = /</code><code>var</code><code>/run/puppet</code>

<code>    </code><code>ssldir = $</code><code>var</code><code>dir/ssl</code>

<code>    </code><code>pluginsync = </code><code>true</code>

<code>    </code><code>clientbucketdir = /puppet/version/hosts/puppet_linux57poc.kisspuppet.com</code>

<code>    </code><code>bucketdir = /puppet/version/hosts/puppet_linux57poc.kisspuppet.com</code>

<code>[agent]</code>

<code>    </code><code>server = puppetmaster.kisspuppet.com</code>

<code>    </code><code>classfile = $</code><code>var</code><code>dir/classes.txt</code>

<code>    </code><code>localconfig = $</code><code>var</code><code>dir/localconfig</code>

<code>    </code><code>runinterval=</code><code>86400</code>

<code>    </code><code>report = </code><code>true</code>

<code>    </code><code>authconfig = /etc/puppet/namespaceauth.conf</code>

<code>    </code><code>usecacheonfailure = </code><code>false</code>

<code>    </code><code>certname = puppet_linux57poc.kisspuppet.com</code>

<code>    </code><code>environment = production</code>

<code>#    listen = </code><code>true</code>

<code>#    puppetport = </code><code>8139</code>

<code>#    bindaddress = </code><code>192.168</code><code>.</code><code>100.125</code>

3、file模块中添加 <code>backup =&gt; 'main',</code>

25

<code>class</code> <code>puppet_linux57poc{</code>

<code>    </code><code>include</code> <code>puppet_linux57poc::motd,puppet_linux57poc::facts</code>

<code>}</code>

<code>class</code> <code>puppet_linux57poc::motd{</code>

<code>        </code><code>package</code><code>{ setup:</code>

<code>                </code><code>ensure =&gt; present,</code>

<code>        </code><code>}</code>

<code>        </code><code>file{ </code><code>"/etc/motd"</code><code>:</code>

<code>                </code><code>owner =&gt; </code><code>"root"</code><code>,</code>

<code>                </code><code>group =&gt; </code><code>"root"</code><code>,</code>

<code>                </code><code>mode =&gt; </code><code>0400</code><code>,</code>

<code>        </code><code>content =&gt; template(</code><code>"puppet_linux57poc/motd.erb"</code><code>),</code>

<code>                </code><code>backup =&gt; </code><code>'main'</code><code>,</code>

<code>                </code><code>require =&gt; Package[</code><code>"setup"</code><code>],</code>

<code>class</code> <code>puppet_linux57poc::facts{</code>

<code>        </code><code>file{ </code><code>"/etc/mcollective/facts.txt"</code><code>:</code>

<code>        </code><code>content =&gt; template(</code><code>"puppet_linux57poc/facts.txt.erb"</code><code>),</code>

修改节点被管理的配置文件/etc/motd,然后运行puppet命令还原

<code>[root@linux57poc ~]# echo aa&gt;&gt;/etc/motd</code>

<code>[root@linux57poc ~]# puppet agent -t</code>

<code>info: Retrieving plugin</code>

<code>info: Loading facts </code><code>in</code> <code>/</code><code>var</code><code>/lib/puppet/lib/facter/fact_apply.rb</code>

<code>info: Caching catalog </code><code>for</code> <code>puppet_linux57poc.kisspuppet.com</code>

<code>info: Applying configuration version </code><code>'1386061716'</code>

<code>notice: /Stage[main]/Mcollective::Facter/File[/etc/mcollective/facts.yaml]/content:</code>

<code>--- /etc/mcollective/facts.yaml    </code><code>2013</code><code>-</code><code>12</code><code>-</code><code>03</code> <code>17</code><code>:</code><code>26</code><code>:</code><code>35.000000000</code> <code>+</code><code>0800</code>

<code>+++ /tmp/puppet-file20131203-</code><code>14159</code><code>-i1qgrq-</code><code>0</code>    <code>2013</code><code>-</code><code>12</code><code>-</code><code>03</code> <code>17</code><code>:</code><code>56</code><code>:</code><code>59.000000000</code> <code>+</code><code>0800</code>

<code>@@ -</code><code>1</code><code>,</code><code>89</code> <code>+</code><code>1</code><code>,</code><code>89</code> <code>@@</code>

<code>。。。</code>

<code>info: FileBucket adding {md5}3997ee041b3277fda12dbd849fac47e7</code>

<code>info: /Stage[main]/Mcollective::Facter/File[/etc/mcollective/facts.yaml]: Filebucketed /etc/mcollective/facts.yaml to main </code><code>with</code> <code>sum 3997ee041b3277fda12dbd849fac47e7</code>

<code>notice: /Stage[main]/Puppet_linux57poc::Motd/File[/etc/motd]/content:</code>

<code>--- /etc/motd    </code><code>2013</code><code>-</code><code>12</code><code>-</code><code>03</code> <code>17</code><code>:</code><code>56</code><code>:</code><code>49.000000000</code> <code>+</code><code>0800</code>

<code>+++ /tmp/puppet-file20131203-</code><code>14159</code><code>-1c90psx-</code><code>0</code>    <code>2013</code><code>-</code><code>12</code><code>-</code><code>03</code> <code>17</code><code>:</code><code>56</code><code>:</code><code>59.000000000</code> <code>+</code><code>0800</code>

<code>@@ -</code><code>7</code><code>,</code><code>4</code> <code>+</code><code>7</code><code>,</code><code>3</code> <code>@@</code>

<code> </code><code>rubyversion = </code><code>1.8</code><code>.</code><code>7</code>

<code> </code><code>....................</code>

<code> </code><code>------------------------------------------------</code>

<code>-aa</code>

<code>info: FileBucket adding {md5}6db65f0eb756ee96ef8e615e914fa0ee</code>

<code>info: /Stage[main]/Puppet_linux57poc::Motd/File[/etc/motd]: Filebucketed /etc/motd to main </code><code>with</code> <code>sum 6db65f0eb756ee96ef8e615e914fa0ee</code>

<code>notice: /Stage[main]/Puppet_linux57poc::Motd/File[/etc/motd]/content: content changed </code><code>'{md5}6db65f0eb756ee96ef8e615e914fa0ee'</code> <code>to </code><code>'{md5}7c6613a110541a050c8a8f51fc89dab2'</code>

<code>notice: Finished catalog run </code><code>in</code> <code>0.69</code> <code>seconds</code>

可以看到<code>/etc/motd</code>的MD5值从<code>'6db65f0eb756ee96ef8e615e914fa0ee'</code>变成<code>'7c6613a110541a050c8a8f51fc89dab2'</code>

<code>[root@linux57poc ~]# ll /puppet/version/hosts/puppet_linux57poc.kisspuppet.com/</code><code>6</code><code>/d/b/</code><code>6</code><code>/</code><code>5</code><code>/f/</code><code>0</code><code>/e/6db65f0eb756ee96ef8e615e914fa0ee/</code>

<code>total </code><code>8</code>

<code>-r--r----- </code><code>1</code> <code>nfsnobody nfsnobody </code><code>311</code> <code>Dec  </code><code>3</code> <code>17</code><code>:</code><code>56</code> <code>contents</code>

<code>-rw-r----- </code><code>1</code> <code>nfsnobody nfsnobody  </code><code>10</code> <code>Dec  </code><code>3</code> <code>17</code><code>:</code><code>56</code> <code>paths</code>

通过puppet filebucket恢复

<code>[root@linux57poc ~]# puppet filebucket --local backup /etc/motd</code>

<code>/etc/motd: 6db65f0eb756ee96ef8e615e914fa0ee</code>

<code>[root@linux57poc ~]#</code>

<code>[root@linux57poc ~]# &gt;/etc/motd</code>

<code>[root@linux57poc ~]# puppet filebucket --local restore  /etc/motd  6db65f0eb756ee96ef8e615e914fa0ee</code>

<code>[root@linux57poc ~]# cat /etc/motd</code>

<code>------------a few of facter values-------------</code>

<code>myhostname = linux57poc</code>

<code>eth0_ip = </code><code>192.168</code><code>.</code><code>100.125</code>

<code>kernel = </code><code>2.6</code><code>.</code><code>18</code><code>-</code><code>274</code><code>.el5</code>

<code>system release = Red Hat Enterprise Linux Server release </code><code>5.7</code> <code>(Tikanga)</code>

<code>puppetversion = </code><code>2.7</code><code>.</code><code>23</code>

<code>rubyversion = </code><code>1.8</code><code>.</code><code>7</code>

<code>....................</code>

<code>------------------------------------------------</code>

<code>aa</code>

如何集中管理呢,可以将所有节点那个目录挂在到一台服务器上,这样就集中了,然后可以通过扫描命令进行查看

<code>[root@linuxreportpoc ~]# ll /puppet/version/hosts</code>

<code>total </code><code>12</code>

<code>drwxr-x--- </code><code>12</code> <code>nfsnobody nfsnobody </code><code>4096</code> <code>Dec  </code><code>3</code> <code>17</code><code>:</code><code>56</code> <code>puppet_linux57poc.kisspuppet.com</code>

<code>drwxr-x--- </code><code>10</code> <code>nfsnobody nfsnobody </code><code>4096</code> <code>Dec  </code><code>3</code> <code>17</code><code>:</code><code>08</code> <code>puppet_linux58poc.kisspuppet.com</code>

<code>drwxr-x--- </code><code>11</code> <code>nfsnobody nfsnobody </code><code>4096</code> <code>Dec  </code><code>3</code> <code>17</code><code>:</code><code>09</code> <code>puppet_linux64poc.kisspuppet.com</code>

<code></code>

本文转自凌激冰51CTO博客,原文链接:http://blog.51cto.com/dreamfire/1337910,如需转载请自行联系原作者

继续阅读