liukun2009 发表于 2018-8-2 12:57:33

Puppet系列之三:Puppet结合SVN实现版本的集中化备份与恢复

  1 概述
  通过安装部署Puppet C/S模型,实现Puppet Server端管理所有被控制机的整个生命周期:从初始化到软件升级、从配置文件创建到测试部署、从系统维护到服务器迁移等。Puppet能够持续化的与被控制机进行交互,从而实现配置文件的及时检测更新。结合SVN版本控制系统,puppet可在更新之前将当前正在运行的环境以版本的方式保存到SVN版本控制系统中,方便以后通过puppet更新出错或者需要回滚到之前的某一个环境时快速恢复。
  2 环境部署
序号            服务器类型            版本/IP参数  1      PuppetMaster    CentOS 6.5 i686 (192.168.56.1)
  2      PuppetAgent   CentOS 6.5 x86_64 (192.168.56.101)
  3      PuppetAgent   CentOS 6.5 x86_64 (192.168.56.102)
  4      PuppetAgent   CentOS 6.5 i686 (192.168.56.103)
  5      PuppetAgent   CentOS 6.5 i686 (192.168.56.104)
  6      SVN Service   rango.fugue.com
  7      SVN Agent       vm3.sysu(Linux) Windows7
  所使用软件版本:
  Subversion Version: subversion-1.6.11-9.el6_4.i686
  TortoiseSVN: 1.8.2.24708-x64-svn-1.8.3
  
  3 部署流程
  
  3.1 SVN Server端部署
  3.1.1 安装软件:yum install subversion
  3.1.2 创建第一个版本库:mkdir /opt/svn
  svnadmin create /opt/svn/puppet
  更改版本库所有为apache用户组:chown -R apache.apache /opt/svn/puppet
  3.2 通过apache+ssl安全认证访问SVN服务器
  3.2.1 安装相关软件包:yum install httpd httpd-devel mod_dav_svn
  
  3.2.2 创建SVN虚拟主机:vim /etc/httpd/conf.d/subversion.conf
  LoadModuledav_svn_module   modules/mod_dav_svn.so
  LoadModuleauthz_svn_module   modules/mod_authz_svn.so
  Listen 8146
  <VirtualHost *:8146>
  <Location/svn>
  DAV svn
  SVNParentPath /opt/svn
  AuthType Basic
  AuthName "Subversion Realm"
  SVNListParentPath on
  AuthUserFile /opt/svn/puppet/conf/authfile
  #AuthzSVNAccessFile /opt/svn/puppet/conf/svn-acl-conf
  Require valid-user
  SVNAutoversioning on
  ModMimeUsePathInfo on
  </Location>
  </VirtualHost>
  虚拟主机监听在8146端口,确保8146端口未被其他程序占用。
  
  3.2.3 创建SVN权限配置文件
  vim /opt/svn/puppet/conf/authz
  
  admin= puppet
  
  @admin= rw
  [/]
  *= r
  [$name:/]
  test= rw">>/opt/svn/puppet/conf/authz
  
  3.2.4 创建用户名及密码并设置相应权限
  /usr/bin/htpasswd -c /opt/svn/puppet/conf/authfile puppet #创建SVN服务器账户puppet密码为“yourkey”
  echo "puppet = yourkey">> /opt/svn/puppet/conf/passwd
  
  3.2.5 配置SVN服务信息:
  vim /opt/svn/puppet/conf/svnserve.conf
  
  anon-access= none
  auth-access= write
  password-db= /opt/svn/puppet/conf/passwd
  authz-db= /opt/svn/conf/authz
  realm= puppet Repository
  
  3.2.6 通过浏览器测试访问:/etc/init.d/httpd restart
  http://192.168.56.1:8146/svn/ 输入账户及密码即可
  
  3.2.7 通过其他Linux节点访问测试:vm3.sysu
  svn checkout http://192.168.56.1:8146/svn/puppet/ /mnt/
  3.3 整合puppet server端
  3.3.1 将puppetserver模块目录导入到版本库中:当svnserver,puppet server在同一台服务器上时
  svn import /etc/puppet/ file:///opt/svn/puppet -m "Puppet moduleInspection"
  3.3.2 通过浏览器访问查看SVN服务器:http://192.168.56.1:8146/svn/puppet
  3.3.3 通过Windows客户端TortoiseSVNcheckout最新的版本库到本地
  3.3.4 删除puppetmaster端puppet目录,并将版本库中的数据导出
  rm -rf /etc/puppet
  svn checkout http://192.168.56.1:8146/svn/puppet /etc/puppet/
  cd /etc/puppet/ ; ls -a
  每个目录下面都会生成.svn隐藏目录,用于保存当前版本的信息
  checkout之后,在/etc/puppet/modules目录下就会有一份SVN服务器上最新版本的副本。
  3.4 部署SVNhooks
  3.4.1 设置pre-commit
  设置pre-commit钩子可以提交文件到SVN服务器之前对puppet语法进行检查,语法通过则提交成功,语法错误则提交失败。
  cd /opt/svn/ puppet/hooks/
  cp pre-commit.tmpl pre-commit
  chmod 774 pre-commit
  vim pre-commit:
  #!/bin/bash
  #SVN pre-commit hook to check Puppet syntax for .pp files
  export PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
  REPOS="$1"
  TXN="$2"
  tmpfile=`mktemp`
  for file in $(svnlook changed -t "$TXN" "$REPOS" |awk '/^[^D].*\.pp$/ {print $2}')
  do
  svnlook cat -t $TXN $REPOS $file > $tmpfile
  if[ $? -ne 0 ]
  then
  echo"Warning: Failed to checkout $file" >&2
  fi
  puppet parser validate $tmpfile >>/var/log/puppet/svn_pre-commit.log2>&1
  if[ $? -ne 0 ]
  then
  echo "Puppet syntax error in $file" >>/var/log/puppet/svn_pre-commit.log 2>&1
  exit 1
  fi
  done
  3.4.2 设置post-commit
  设置post-commit钩子可以在正确提交文件至SVN服务器之后,puppetmaster的模块目录/etc/puppet/modules会自动从SVN服务器上update最新的版本库到本地。
  #!/bin/bash
  #POST-COMMIT HOOK
  REPOS="$1"
  REV="$2"
  export LANG=en_US.UTF-8
  SVN=/usr/bin/svn
  PUPPET_DIR=/etc/puppet
  $SVN update $PUPPET_DIR --username puppet --password yourkey>>/var/log/puppet/svn_post-commit.log
  3.5 SVN Client端部署测试
  3.5.1 本地测试
  1)导出版本数据库文件到本地,
  svn checkout file:///opt/svn/puppet/mnt/puppet
  2)创建并添加新的目录及文件
  svn add /mnt/ssh
  3)将修改后的文件提交到SVN服务器,此时版本库版本加1
  svn commit -m “add ssh modules” /mnt/puppet/*
  3.5.2 远程测试(Linux)
  svn checkout http://192.168.56.1:8146/svn/puppet/ /mnt/
  3.5.3 客户端TortoiseSVN测试(Windows)
  4 总结
  本文介绍了Puppet结合SVN版本控制系统实现版本的集中化备份和恢复,重点在于SVN服务器的搭建以及Puppet与SVN Server的融合。后续文章将会介绍Puppet负载均衡技术。
  ——RangChen
页: [1]
查看完整版本: Puppet系列之三:Puppet结合SVN实现版本的集中化备份与恢复