puppet结合SVN版本控制系统实现版本的集中化备份与恢复

一、介绍

通过安装部署Puppet C/S模型,实现Puppet Server端管理所有被控制机的整个生命周期:从初始化到软件升级、从配置文件创建到测试部署、从系统维护到服务器迁移等。Puppet能够持续化的与被控制机进行交互,从而实现配置文件的及时检测更新。结合SVN版本控制系统,puppet可在更新之前将当前正在运行的环境以版本的方式保存到SVN版本控制系统中,方便以后通过puppet更新出错或者需要回滚到之前的某一个环境时快速恢复。

二、环境介绍

序号    服务器类型                     版本/IP参数
 1    PuppetMaster         RHEL6.4 x86_64(192.168.100.110)
 2    PuppetAgent             RHEL5.8 x86_64(192.168.100.111)和RHEL5.7 x86_64(192.168.100.112)
 3    SVN Service端     RHEL6.4 x86_64(192.168.100.110)
 4    SVN Service端     RHEL6.4 x86_64(192.168.100.110)和Windows 8.1 x86_64(192.168.100.2)

编号      类型       主机名/软件名称    系统/软件版本                    其他信息
 1    Software    Subversion        1.6.11-7    rpm                 package
 2    Software    TortoiseSVN        1.8.2.24708-x64-svn-1.8.3        msi

三、部署流程

1 SVN Server端部署

1.1 安装相关软件包

[[email protected] ~]# yum install subversion
[[email protected] ~]# svnserve –version  #通过查看版本验证安装是否成功
svnserve, version 1.6.11 (r934486)
   compiled Apr 12 2012, 11:09:11
Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).
The following repository back-end (FS) modules are available:
* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.
Cyrus SASL authentication is available.

1.2 创建第一个版本库

[[email protected] ~]# mkdir /svndata
[[email protected] ~]# svnadmin create /svndata/puppet
[[email protected] ~]# ll /svndata/puppet/
total 24
drwxr-xr-x 2 root root 4096 Oct 22 13:29 conf
drwxr-sr-x 6 root root 4096 Oct 22 13:29 db
-r--r--r-- 1 root root    2 Oct 22 13:29 format
drwxr-xr-x 2 root root 4096 Oct 22 13:29 hooks
drwxr-xr-x 2 root root 4096 Oct 22 13:29 locks
-rw-r--r-- 1 root root  229 Oct 22 13:29 README.txt

2 通过Apache+ssl安全认证访问SVN服务器

2.1    安装相关软件包

[[email protected] ~]# yum install httpd httpd-devel mod_dav_svn

2.2    创建SVN虚拟主机

[[email protected] svndata]# vim /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
Listen 8142
<VirtualHost *:8142>
<Location /svndata>
DAV svn
SVNListParentPath on
SVNPath "/svndata/puppet"
AuthType Basic
AuthName "Subversion repository"
AuthUserFile "/svndata/puppet/conf/authfile"
#AuthzSVNAccessFile /svndata/puppet/conf/svn-acl-conf
Require valid-user
SVNAutoversioning on
ModMimeUsePathInfo on
</Location>
</VirtualHost>

2.3    创建svn权限配置文件

[[email protected] svndata]# vim puppet/conf/authz  
[groups]
admin = puppet
[admin:/]
@admin = rw
[/]
* = r
[$name:/]
test = rw">>/svndata/puppet/conf/authz

2.4    创建用户名及密码并设置相应权限
[[email protected] ~]# /usr/bin/htpasswd -c /svndata/puppet/conf/authfile puppet #创建SVN服务器账户puppet密码为redhat
New password: redhat
Re-type new password: redhat
Adding password for user puppet
[[email protected] ~]# chown apache /svndata/puppet -R
[[email protected] ~]# echo "puppet = redhat" >>/svndata/puppet/conf/passwd

2.5    配置SVN服务信息

[[email protected] svndata]# vim /svndata/puppet/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = /svndata/puppet/conf/passwd
authz-db = /svndata/puppet/conf/authz
realm = puppet Repository

2.6    通过浏览器测试访问

[[email protected] svndata]# /etc/rc.d/init.d/httpd restart #重启httpd服务
http://192.168.100.110:8142/svndata/

svn版本控制测试界面

svn版本控制测试界面

2.7    通过其他linux节点访问测试

[[email protected] ~]# svn checkout http://192.168.100.110:8142/svndata/  /mnt/
Authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository
Password for ‘root‘:
Authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository
Username: puppet
Password for ‘puppet‘:
-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:
   <http://192.168.100.110:8142> Puppet Subversion repository
can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.
You can avoid future appearances of this warning by setting the value
of the ‘store-plaintext-passwords‘ option to either ‘yes‘ or ‘no‘ in
‘/root/.subversion/servers‘.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? no
Checked out revision 0.

2.8    通过Windows客户端TortoiseSVN访问测试

svn版本控制测试界面

svn版本控制测试界面

svn版本控制测试界面

备注:由于还为import版本,所以查看的内容为空

3 整合puppet server端

3.1    将puppet server模块目录导入到版本库中

[[email protected] ~]# svn import /etc/puppet/environments/testing
http://192.168.100.110:8142/svndata/puppet -m "Puppet Initial repository"
Authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository
Password for ‘root‘:
Authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository
Username: puppet
Password for ‘puppet‘:
Adding         /etc/puppet/environments/testing/groups
Adding         /etc/puppet/environments/testing/groups/modules
Adding         /etc/puppet/environments/testing/groups/modules/grub
Adding         /etc/puppet/environments/testing/groups/modules/grub/files
Adding         /etc/puppet/environments/testing/groups/modules/grub/manifests
…
Committed revision 1.

备注:由于SVN服务器端和puppetserver在同一台服务器上,也可以通过以下方式进行导入

[[email protected] ~]# svn import /etc/puppet/environments/testing  
file:///svndata/puppet -m "Puppet Initial repository"

3.2    通过IE浏览器访问SVN服务器

svn版本控制测试界面

3.3    通过Windows客户端TortoiseSVN checkout最新的版本库到本地

svn版本控制测试界面

svn版本控制测试界面

svn版本控制测试界面

3.4    删除puppetserver端testing目录,并将版本库中的数据导出

[[email protected] ~]# cd /etc/puppet/environments/testing/
[[email protected] testing]# rm -rf *  #删除之前建议备份
[[email protected] testing]# svn checkout
http://192.168.100.110:8142/svndata/puppet  /etc/puppet/environments/testing
Authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository
Password for ‘puppet‘:
Please type ‘yes‘ or ‘no‘: no
A    groups
A    groups/modules
A    groups/modules/grub
A    groups/modules/grub/files
A    groups/modules/grub/manifests
Checked out revision 1.
[[email protected] testing]# ls -a
.  ..  agents  environment  groups  manifests  .svn
[[email protected] testing]# ls .svn/  #每个目录下面都会生成.svn隐藏目录,用于保存当前版本的信息
all-wcprops  entries  prop-base  props  text-base  tmp
备注:checkout之后,在/etc/puppet/environments/testing目录下就会有一份SVN服务器上最新版本的副本。

4 部署SVN hooks

4.1    设置pre-commit

设置pre-commit钩子可以提交文件到SNV服务器之前对puppet语法进行检查,语法通过则提交成功,语法错误则提交失败。

[[email protected] hooks]# chmod 774 pre-commit^C
[[email protected] hooks]# cp pre-commit.tmpl pre-commit
[[email protected] hooks]# chmod 774 pre-commit
[[email protected] hooks]# vim pre-commit
#!/bin/sh
# SVN pre-commit hook to check Puppet syntax for .pp files
# Modified from http://mail.madstop.com/pipermail/puppet-users/2007-March/002034.html
# Access http://projects.puppetlabs.com/projects/1/wiki/puppet_version_control
REPOS="$1"
TXN="$2"
tmpfile=`mktemp`
export HOME=/
SVNLOOK=/usr/bin/svnlook
$SVNLOOK changed -t "$TXN" "$REPOS" | awk ‘/^[^D].*\.pp$/ {print $2}‘ | while read line
do
    $SVNLOOK cat -t "$TXN" "$REPOS" "$line" > $tmpfile
    if [ $? -ne 0 ]
    then
        echo "Warning: Failed to checkout $line" >&2
    fi
#    puppet --color=false --confdir=/etc/puppet --vardir=/var/lib/puppet --parseonly --ignoreimport $tmpfile >>/var/log/puppet/svn_pre-commit.log 2>&1
    puppet --color=false --confdir=/etc/puppet --vardir=/var/lib/puppet --parser --ignoreimport $tmpfile >>/var/log/puppet/svn_pre-commit.log 2>&1
    if [ $? -ne 0 ]
    then
        echo "Puppet syntax error in $line." >>/var/log/puppet/svn_pre-commit.log 2>&1
        exit 2
    fi
done
res=$?
rm -f $tmpfile
if [ $res -ne 0 ]
then
    exit $res
fi

4.2    设置post-commit

设置post-commit钩子可以在正确提交文件至SVN服务器之后,puppetmaster的模块目录/etc/puppet/environments/testing会自动从SNV服务器上update最新的版本库到本地。

#!/bin/sh
# POST-COMMIT HOOK
REPOS="$1"
REV="$2"
#mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
export LANG=en_US.UTF-8
SVN=/usr/bin/svn
PUPPET_DIR=/etc/puppet
#/usr/bin/svn  up /etc/puppet -non-interactive
$SVN  update $PUPPET_DIR --username puppet --password 123.com >>/var/log/puppet/svn_post-commit.log

5 SVN Client端部署测试

5.1    本地测试

1)导出版本数据库文件到本地

[[email protected] ~]# svn checkout file:///svndata/puppet  /puppet/puppet

2)、创建并添加新的目录及文件

[[email protected] puppet]# svn add ssh

3)、将修改后的文件提交到SVN服务器,此时版本库版本加1

[[email protected] .svn]# svn commit -m "add ssh modules" /puppet/puppet/*

5.2    远程测试(Linux)

[[email protected] svndata]#  svn checkout http://172.16.200.100/svndata/  /mnt/

5.3    客户端TortoiseSVN测试(Windows)

svn版本控制测试界面

svn版本控制测试界面

时间: 2024-08-28 18:42:41

puppet结合SVN版本控制系统实现版本的集中化备份与恢复的相关文章

版本控制系统之SVN和GIT的区别

版本控制器的作用: 1. 可以协同代码管理,让多人开发代码得以实现. 2. 回归到以前的任何一个时间点的代码处(好比:开始写了很多代码,后面有修改了一些,突然IDE崩溃,但是发现还是以前的代码更好,这个时候无法回去,这个时候没有后悔药吃,但是可以使用版本备份,但是即花费空间和花费时间). 3. 由于上面的版本备份造成版本众多,难于找到正确的版本(SVN有专门的日志记录了文件的每一次修改,可以通过查看日志回到任何一个自己想要的版本). 4. 代码冲突的问题,主要是多人操作同一个文件(团队开发很常见

版本控制系统-集中式与分布式的区别

SVN和CVS都是集中式版本控制系统,而Git是分布式版本控制系统 集中式版本控制系统 版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器. 集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟 分布式版本控制系统 分布式版本控制系统没有"中央服务器",每个人的电脑上都是一个完

Git是目前世界上最先进的分布式版本控制系统

一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库

何为集中式版本控制系统与分布式版本控制系统?

什么是集中式版本控制系统与分布式版本控制系统? 集中式版本控制系统:版本库是集中放在中央服务器的,当我们实际工作的时候,用的都是自己的电脑,所以首先要连接中央服务器,从那里得到最新的版本,然后编写或者更改代码,干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就很郁闷了.     分布式版本控制系统:对于搞过大数据(Hadoop)或者大型数据库的朋友,对"分布式"这个概念一定很熟悉了

如何选择版本控制系统

版本控制系统 "代码"作为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决bug的新patch,这就需要有一款系统,能够存储.追踪文件的修改历史,记录多个版本的开发和维护.于是,版本控制系统(Version Control Systems)应运而生,主要分为两类,集中式和分布式. 集中式版本控制系统 集中式版本控制系统的特点是只有一台中央服务器,存放着所有研发数据,而其它客户端机器上保存的是中央服务器最新版本的文件快照,不包括项目文件的变更历史.所以,每个相关人员工作

如何选择版本控制系统 ---为什么选择Git版本控制系统

版本控制系统 "代码"作为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决bug的新patch,这就需要有一款系统,能够存储.追踪文件的修改历史,记录多个版本的开发和维护.于是,版本控制系统(Version Control Systems)应运而生,主要分为两类,集中式和分布式. 集中式版本控制系统 集中式版本控制系统的特点是只有一台中央服务器,存放着所有研发数据,而其它客户端机器上保存的是中央服务器最新版本的文件快照,不包括项目文件的变更历史.所以,每个相关人员工作

集中式和分布式版本控制系统的区别

SVN 是集中式的版本控制系统,而 Git 是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器.中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆. 集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网

分布式版本控制系统(git基础)

一,了解git 1,git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一),由Linus公司(创建了开源的linux)开发而成. 2,分布式版本控制系统是什么意思?具体表现在哪? Git就是分布式管理系统,于其对应的集中式版本控制系统有SVN,简单的说,分布式的版本控制就是每个人都可以创建一个独立的代码仓库,用于管理,各种版本控制的操作都可以在本地完成,每个人修改的代码都可以合并推送到另一个代码仓库中.而像SVN这样,只有一个中央服务器,所有的开发人员都必须依赖与这个代码仓库,

版本控制系统git

6月30日学习笔记: 版本控制系统git: 1.应用:记录文件的所有历史变化随时可恢复到任何一个历史状态多人协作开发或修该错误恢复多功能并行开发 2.分类:本地版本控制系统集中化版本控制系统分布式版本控制系统 3.基本概念:repository -- 存放所有文件及其历史信息checkout -- 取出或切换到指定版本的文件version -- 记录标识一个版本(编号或其他代码)tag -- 记录标识一个主要版本(1.0 2.0 3.0) 本地版本控制系统(LVCS)如:RCS(在很多Linux