批量同步代码:有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批量同步代码:有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具相关的知识,希望对你有一定的参考价值。

需求背景是:

一个业务,有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具。有新的需求时,开发同事改完代码会把变更上传到其中一台服务器A上。但是其他2台服务器也需要做相同变更。

写一个shell脚本,把A服务器上的变更代码同步到B和C上。

其中,你需要考虑到不需要同步的目录(假如有tmp、upload、logs、caches)

#!/bin/bash
echo "该脚本将会把A机器上的/data/wwwroot/www.aaa.com目录同步到B、C机器上"
read -p "是否要继续(y|n)"
rs() {
     rsync -azP \                     #“\”,表示使行得以继续,命令可以继续正常输入
     --exclude logs      --exclude upload      --exclude caches      --exclude tmp www.aaa.com/ $1:/data/wwwroot/www.aaa.com
}
if [ $REPLY == 'y' -o $REPLY == 'Y' ]
then
    echo "即将同步... ..."
    sleep 2
    cd /data/wwwroot/
    rs [email protected] #B机器ip,格式:用户名@ip
    rs [email protected] #C机器ip,格式:用户名@ip
    echo "同步完成。"
elif [ $REPLY == 'n' -o $REPLY == 'N' ]
then
    exit 1
else
    echo "请输入字母y或者n"
fi

解析:rs() { }是函数,由{}包围的命令构成了一个代码块,也就是函数体。通过使用花括号{}包围命令,可以使各种用途的命令关联在一起,构成一个整体。调用函数时,里面的命令会作为一个整体一起执行。

         调用函数直接使用函数名像普通命令一样使用,直接这里直接使用rs,表示除了logs、upload、caches、tmp目录,将www.aaa.com下的文件同步到$1主机下的/data/wwwroot/www.aaa.com

         rsync命令是一个远程数据同步工具,格式为:rsync [OPTION]... SRC [[email protected]]host:DEST。  -a选项表示以递归方式传输文件,并保持所有文件的属性。-z选项表示对备份的文件在传输时进行压缩处理,-P选项 等同于 --partial选项,表示保留那些因故没有完全传输的文件,以加快随后的再次传输。--exclude选项表示指定排除不需要传输的文件,可以是万用字符模式(如*.txt)

       而需要特别说明的是,rsync -azP  www.aaa.com/  [email protected]:/data/wwwroot  本地目录(www.aaa.com)的后面如果不加"/",则会把www.aaa.com这个目录以及目录下的文件一同同步,如果不加“/”,则只会同步目录下的文件,不会同步目录本身。

      函数体里面有集合命令后面用了反斜杠“\”,表示使行得以继续,命令可以继续正常输入,也就是函数体中的每行命令使用“\”,将其连接为一条命令。

      这里有个变量$REPLY,为环境变量。在read命令行中,如果不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中。环境变量REPLY中包含最后一次输入的所有数据,可以像使用其他变量一样在shell脚本中使用环境变量REPLY.

    if判断的含义是:如果read输入的变量值为"y"或者"Y",则依次输出“正在同步”,延迟2秒,进入/data/wwwroot/,执行函数体,输出“同步完成”,如果read 输入的变量值为"n"或"N",则退出,否则(以上两种情况都不存在),则输出请输入字母y或者n

     sleep 2 表示延迟2秒

   

以上是关于批量同步代码:有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具的主要内容,如果未能解决你的问题,请参考以下文章

关于Nginx负载均衡目录同步问题

CentOS环境下Nginx实现3台虚拟机负载均衡

多台服务器如何做网络负载均衡?

LVS-DR实现基于LAMP的负载均衡

Ubuntu配置Nginx负载均衡

负载均衡原理