在案例十六中已经介绍过expect脚本的使用,可以远程登录机器并执行命令,其实expect脚本也可以传输文件。本案例的需求就是通过expect脚本来同步文件,从而实现代码上线。生产环境中一个业务通常跑在多台服务器上,也就是负载均衡,所以这些机器上运行的代码必须要保持一致。怎么实现一致?有两种方案。

1、通过共享的方式
如果机器量不多,可以使用NFS实现,如果要求稳定性最好是使用专业的存储设备(NAS、SAN等),这种方式架构如下:

这种架构的优点是方便维护,比如有代码更新时,只需要更新一台机器上的代码,则其他机器上都会跟着更新。缺点是,机器量大的话,共享存储会成为瓶颈,甚至由于对文件的争抢造成性能问题。还有一点,共享存储这里是一个很大的单点隐患,不出故障一切都OK,一旦出故障,则整个业务都挂掉,影响非常大。
2、分布式
既然通过共享的方式有不少缺点,那么就选择另外一种方式,即把代码存到每一台web服务器的本地磁盘上,如图所示:

这样做的好处是,没有存储性能问题,没有资源争抢冲突,也没有单点故障的隐患。缺点是,每次代码更新需要对所有web服务器就行更新,比较繁琐。虽然步骤繁琐,但大多数企业都会选择该方式。本案例的背景就是第二种方式,具体要求如下:
1)提供一个所有web服务器的IP列表ip.list。
2)假设所有web服务器上有一个普通用户user01,密码为SGs2ox6uj,该用户为同步代码的用户。
3)每次代码上线会提供一个文件列表file.list(即要更改的文件列表)。

知识点一:rsync同步文件通过文件列表
rsync这个同步文件的工具虽然在前面案例出现过,但通过一个文件列表来同步文件并不常见,先看示例:
# cat 1.txt /tmp/123/1.sh/root/test/a.txt/etc/passwd# rsync -av --files-from=./1.txt  /  root@192.168.93.130:/说明:1.txt为一个文件列表,即要同步的文件列表;rsync的--files-from选项指定要同步文件的列表文件(1.txt的路径,可以是绝对路径,也可以是相对路径),这个文件列表内容其实就是一堆文件路径,这个路径建议用绝对路径,不然会出错;如果文件列表中的文件路径为绝对路径,则rsync的源目录必须为/,目标目录也必须为/。

知识点二:expect脚本同步文件
跟远程执行命令类似,expect脚本要想同步文件,spawn后面的shell命令不再是ssh,而是rsync,示例:
#!/usr/bin/expectset passwd "SGs2ox6uj"set host "192.168.93.130"spawn rsync -a  user01@$host:/tmp/test.txt /tmp/expect {    "yes/no" {send "yes\r"}    "password:" {send "$passwd\r"}}expect eof也可以传递参数给expect脚本,示例:#!/usr/bin/expectset passwd "SGs2ox6uj"set host [lindex $argv 0]set file [lindex $argv 1]spawn rsync -a --files-from=$file  / user01@$host:/expect {    "yes/no" {send "yes\r"}    "password:" {send "$passwd\r"}}expect eof

本案例参考脚本
#/bin/bash##代码上线##作者:##日期:#提醒用户,是否更新了要上线的代码列表文件read -p "你是否已经更新了文件列表./file.list?确认请输入y或者Y,否则按其他任意键退出脚本。" c#如果直接按回车,也会退出脚本if [ -z "$c" ]then    exit 1fiif [ $c == "y" -o $c == "Y" ]then    echo "脚本将在2秒后,继续执行。"

云专线是一种云服务解决方案。云专线服务提供高质量的跨数据中心专线,帮助您轻松建立从本地到云的高效、灵活、稳定、安全的专属网络通道,实现可靠的混合云部署。企业可以利用云专线服务建立私人连接,实现本地数据中心、智能、可视化、灵活的主流公共云和虚拟私有云之间的云互联,解决不同地区/不同网络环境之间的私人通信问题。

#每秒输出一个.共输出两个.    for i in 1 2    do        echo -n "."        sleep 1    done    echoelse    exit 1fi#判断有无./rsync.exp文件[ -f ./rsync.exp ] && rm -f ./rsync.exp#定义rsync.expcat >./rsync.exp <说明:要想在生产环境中使用该脚本,需要先提前创建一个user01用户,并且保证user01用户对web服务器上代码所在目录有写权限。

案例二十、自动化运维-代码上线相关推荐

  1. Shell脚本学习-阶段二十九-运维使用的

    文章目录-运维使用 前言 1.查找当前目录下占用为0字节的文件并删除 2.将系统进程按内存占用大小排列显示出来 3.将系统进程按CPU占用大小排列显示 4.匹配某文件中某一行并进行内容替换 5.显示所 ...

  2. python实现自动化运维项目_Python自动化运维项目开发最佳实战

    下载地址:五号服务器---VIP资料下载七区\VIP专题教程二区 游客,如果您要查看本帖隐藏内容请回复 Python 自动化运维项目开发最佳实战 这个远比什么老男孩的python好的多 2017-1- ...

  3. 关于自动化运维的那些事儿

    随着近年全球运维大会的火热举办,自动化运维话题被推向了前所未有地热度.自动化运维并不是炒作的概念,而是随着信息技术发展的必要趋势."大数据""容器"" ...

  4. linux之AUTOMATION(自动化运维)二

    linux之AUTOMATION(自动化运维) 01: ansible基础 . Ansible ad-hoc 02: sudo提权 . Ansible配置 . Ansible Playbook . A ...

  5. 自动化运维工具——puppet详解(二)

    自动化运维工具--puppet详解(二) 目录 一.class 类 1)什么是类? 2)带有参数的类 3)类的继承 1.新增属性 2.新增原有值 3.修改原有值 4.整体调用父类,并重写部分值 二.模 ...

  6. 构建自动化运维——第十期魅族技术开放日现场纪实

    9月23日,麦思博与魅族联合主办的第十期技术开放日:构建自动化运维,在上海成功举行.最近几年,从数据库等基础架构到云计算等应用领域,从MVC到微服务等开发模式,从laas.Paas到Faas,运维技术 ...

  7. linux运维脚本编写,最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本...

    最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本 大家可以通过参考下面的课程学习目录,就会发现单单只从目录上来分析就知道这是一部非常系统的Shell自动化脚本运 ...

  8. python自动化办公 51cto_利用python实现批量自动化运维脚本案例

    本文为通过密码或密钥实现python批量自动化运维脚本案例分享,是老男孩linux培训 python课程教学案例内容,后续会分享多线程并发执行这个脚本的更高级的功能(http://oldboy.blo ...

  9. Python+Django+Ansible Playbook自动化运维项目实战(二)

    Python+Django+Ansible Playbook自动化运维项目实战 一.资产管理,自动化发现.扫描 1.服务端资产探测.扫描发现 1)资产管理的资产: 2)抽象与约定: 2.探测协议和模块 ...

最新文章

  1. 商品规格可选怎么设计_商品模块数据库表解析(一)
  2. Access denied for user 'root'@'localhost' (using password:YES) 解决方案
  3. 微信小程序项目,实现图书搜索高阶组件:
  4. linux libusb应用实例,在Linux中使用libusb-1.0作为非root用户访问USB设备
  5. 中国首枚芯片邮票问世;苹果开源 Swift System | 极客头条
  6. python avg_Python:作用域、闭包、装饰器
  7. AppLinks使用详解
  8. java丢硬币boolean_抛硬币模拟器
  9. 5.2 imnoise函数
  10. 论文期刊科普-SCI SSCI CSSCI CSCD和北大核心期刊分别是什么?
  11. 上位机和下位机计算机联锁,上位机下位机各是什么意思?上位机下位机介绍
  12. AtCoder Beginner Contest 062(CD)
  13. 【C语言】充当右值时,数组名前加不加的区别
  14. C/S模型(客户/服务器模型)
  15. 设计模式之单例模式(Singleton)
  16. 来西安必看的旅游攻略!看过来,带你玩转西安!
  17. 飞桨《百度构架师手把手教深度学习》结营体验
  18. 寒江独钓:Windows内核安全编程(china-pub到货首发)
  19. REW声学测试(六):信号与测量
  20. Android 第三方支付

热门文章

  1. HTML中有关表格的基本属性知识
  2. 组合数学(全排列)+DFS CSU 1563 Lexicography
  3. linux学习blog
  4. 计算器 abacus 技术文档之二----初步设计
  5. win 7 系统激活工具
  6. 在一个TextArea中如何限制行数和字符数
  7. OpenCV meanshift目标追踪
  8. emq认证mysql后如何使用_emq服务器开启mysql验证教程
  9. Python 循环中的陷阱(转载)
  10. Docker 制作镜像-redis