设为首页 收藏本站
查看: 968|回复: 0

[经验分享] Puppet系列之三:Puppet结合SVN实现版本的集中化备份与恢复

[复制链接]

尚未签到

发表于 2018-8-2 12:57:33 | 显示全部楼层 |阅读模式
  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
  [groups]
  admin= puppet
  [admin:/]
  @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
  [general]
  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-545389-1-1.html 上篇帖子: Puppet系列之二:自动化配置管理平台的搭建 下篇帖子: Puppet系列之四:Puppet利用Nginx多端口实现负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表