rsync推拉复制同步脚本编写(详细)内附jenkins通过rsync脚本部署到tomcat

  • 本处基于saltstack的配置目录里分解rsync的tar包,倒序讲解。
    [root@master rsync]# ls
    rsyncd.tar.gz 后两个是推复制rsyncd_tui_master.tar.gz rsync_tui_slave.tar.gz
    [root@master rsync]# pwd
    /srv/salt/rsync
    [root@master rsync]#
  • 解压之后 先从拉复制开始讲解
  • [root@master rsyncd]# pwd
    /srv/salt/rsync/rsyncd
    [root@master rsyncd]# ls
    rsyncd.conf rsyncd_master.sh rsyncd.motd rsyncd.secrets rsyncd_slave.sh
    配置文件 脚本 欢迎页 密钥 slave脚本
    [root@master rsyncd]#
    拉复制概念,如下先看脚本理解工作过程。
[root@master rsyncd]# cat rsyncd.conf 
uid=root
gid=root
port=873
max connections=0
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
motd file=/etc/rsyncd/rsyncd.motd
read only=yes    #配置只读
hosts allow=IP   #权限从上到下的优先级
hosts deny=*
[aaa]    #共享名称
path=B  #共享路径
list=yes
ignore errors
auth users=shych
secrets file=/etc/rsyncd/rsyncd.secrets	
[root@master rsyncd]# cat rsyncd_master.sh 
#!/bin/bash
read -p "请输入允许获取数据的IP或者IP网段:" a
read -p "共享目录绝对路径:" b
read -p "请输入密码文件的密码:" c
rm -rf /etc/rsyncd
cp -r /usr/src/rsyncd/ /etc/   
if [ $? -eq 0 ];then
	echo "配置文件完成"
	mkdir -p "$b"
	cd /etc/rsyncd/
	sed -i '10s:IP:'$a':' rsyncd.conf
	sed -i 's:0:'$c':' rsyncd.secrets
	sed -i '13s:B:'$b':' rsyncd.conf     #此处以冒号为分隔符,防止与变量b输入的/冲突
	    if [ $? -eq 0 ];then
		echo "配置文件修改成功"
	        rsync --daemon --config=/etc/rsyncd/rsyncd.conf
	        lsof -i:873
	            if [ $? -eq 0 ];then
	                echo "服务启动成功"
	            else
	                echo "服务启动失败,请检查配置文件"
		        break
	    	    fi
	    else
		echo "配置文件修改失败"
	    fi
else	
	echo "配置文件复制失败"
fi

[root@master rsyncd]# 

再看下salve的脚本

[root@master rsyncd]# cat rsyncd_slave.sh 
#!/bin/bash
read -p "请输入master的共享数据的IP:" a
read -p "请输入master共享目录绝对路径:" b
read -p "请输入密码文件的密码:" c
mkdir -p "$b"
touch /etc/rsyncd.pw
echo "$c" > /etc/rsyncd.pw
chmod 600 /etc/rsyncd.pw
rsync -aczP --delete --password-file=/etc/rsyncd.pw shych@"$a"::aaa "$b" > /dev/zero
if [ $? -eq 0 ];then
	echo "数据更新成功"
else
	echo "数据更新失败,请检查配置文件和密码文件权限是否为600!"
fi
[root@master rsyncd]# 

通过两个脚本可以看吃slave通过运行一个命令来达到与master同步的动作。
拉复制是slave通过计划任务来达到定时出发命令
rsync -aczP --delete --password-file=/etc/rsyncd.pw shych@“ a " : : a a a " a"::aaa " a"::aaa"b” > /dev/zero
综上所述,master上需要有配置文件还需要有欢迎文件rsyncd.motd以及密钥文件
[root@master rsyncd]# cat rsyncd.secrets
shych:0
[root@master rsyncd]#
密钥文件需要跟slave配对,并且执行权限必须是600.否则会报错.
拉复制缺点是并发能力不好,如果同时好多slave同时拉取数据,会导致master负载过大。但是对大文件传输
支持很好。

推复制

  • 推复制master端时时监控本地共享目录的文件变化,当检查到有更新时候,就会把更新推送到slave上。优点是抗病发能力强,对大文件传输效果不好。
  • [root@master rsyncd_tui_master]# ls
    confxml.bak GNU-Linux-x86 rsyncd_tui.sh
    [root@master rsyncd_tui_master]#
  • `[root@master rsyncd_tui_master]# cat rsyncd_tui.sh
    #!/bin/bash
    read -p “请输入监控文件的路径:” c
    read -p “请输入推送的目标IP:” a
    read -p “请输入密码文件的密码:” d
    mkdir -pv “ c " t o u c h / e t c / r s y n c d . p w e c h o " c" touch /etc/rsyncd.pw echo " c"touch/etc/rsyncd.pwecho"d” > /etc/rsyncd.pw
    chmod 600 /etc/rsyncd.pw
    rm -rf GNU-Linux-x86/confxml.xml
    cp confxml.bak ./GNU-Linux-x86/confxml.xml
    cd GNU-Linux-x86
    sed -i ‘25s/IP/‘ a ′ / ′ c o n f x m l . x m l s e d − i ′ 24 s : M U L U : ′ a'/' confxml.xml sed -i '24s:MULU:' a/confxml.xmlsedi24s:MULU:c’:’ confxml.xml
    ./sersync2 &
    if [ $? -eq 0 ];then
    echo “配置文件修改成功!”
    else
    echo “修改失败,请检查密码文件权限600?”
    fi

`
通过代码里可知master只负责监控本地的变化需要GNU-Linux-x86监控插件来实现。并且也需要注意密钥文件的权限。

salve上的部署区别拉复制的master的配置不大。如下:

[root@master rsync_tui_slave]# ls
rsyncd.conf rsyncd.motd rsyncd.secrets rsyncd.sh
[root@master rsync_tui_slave]#

[root@master rsync_tui_slave]# cat rsyncd.sh
#!/bin/bash
killall rsync > /dev/null
read -p "请输入允许获取数据的IP或者IP网段:" a
read -p "共享目录绝对路径:" b
read -p "请输入密码文件的密码:" c
rm -rf /etc/rsyncd
rm -rf /var/run/rsyncd.pid
cp -r /usr/src/rsyncd/ /etc/
if [ $? -eq 0 ];then
	echo "配置文件完成"
	mkdir -p "$b"
	cd /etc/rsyncd/
	sed -i '10s:IP:'$a':' rsyncd.conf
	sed -i 's:0:'$c':' rsyncd.secrets
	sed -i '13s:B:'$b':' rsyncd.conf     #此处以冒号为分隔符,防止与变量b输入的/冲突
	    if [ $? -eq 0 ];then
		echo "配置文件修改成功"
	        rsync --daemon --config=/etc/rsyncd/rsyncd.conf
	        lsof -i:873
	            if [ $? -eq 0 ];then
	                echo "服务启动成功"
	            else
	                echo "服务启动失败,请检查配置文件"
		        break
	    	    fi
	    else
		echo "配置文件修改失败"
	    fi
else	
	echo "配置文件复制失败"
fi
#作为推复制时候需要手动改配置文件rsyncd.conf的 read only=no

作为推复制时候需要手动改配置文件rsyncd.conf的 read only=no,因为slave是需要被写入数据的。
[root@master rsync_tui_slave]# cat rsyncd.conf

uid=root
gid=root
port=873
max connections=0
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
motd file=/etc/rsyncd/rsyncd.motd
read only=no    #注意此处跟拉复制的区别
hosts allow=IP
hosts deny=*
[aaa]
path=B
list=yes
ignore errors
auth users=shych
secrets file=/etc/rsyncd/rsyncd.secrets	

通过以上rsync推拉复制的部署,至于个人跟据公司的应用选择用哪种来部署。因便于管理发版更新,jenkins如果出发自动构建,建议采用推复制时时监控jenkins下workspace的项目的变化。如果需要手动审核,也可以推复制用一下命令,就不需要装监控软件了只需要构建时候调用脚本即可,脚本如下:
[root@bussiness-interface-ct deploy]# ls
deploy_m_new.sh program_new
[root@bussiness-interface-ct deploy]#
其中program_new是里包含项目名称文件
[root@bussiness-interface-ct program_new]# ls
CI–aps_approval CI–crf_intell CI–crf_online_aps CI–shlife_loan
jenkins通过调用此脚本 $1 $2 两个参数 如图JOBHOME 和WORKSPACE
在这里插入图片描述
赛选出项目的IP和项目名称并与program_new
目录对应判断是否存在此项目,存在的话就把war包通过rsync同步到对应的服务器的tomcat下。

#!/bin/bash


COLOR_WHITE="\033[1;37m"

dir="/usr/local/deploy/program_new"
project=$(ls /usr/local/deploy/program_new)
time=$(date "+%m-%d-%H:%M:%S")

p=$(echo "$1" |awk -F-- '{print $2}')

for i in "$p"; do
	echo "${project[@]}" |grep -wq "$1"
	if [ $? == 0 ];then
		cat $dir/$1 | grep -v "^#" | grep "IP" | awk -F= '{print $2}' |
	    while read ip
		  do
                     if [ "$i" = mobile_loan_static ];then
                        rsync -av --password-file=/usr/local/deploy/pwd.conf --exclude .svn $2/*  ruser@$ip::static
		
		     else
	          	rsync -av --password-file=/etc/pwd.conf $2/target/$i.war ruser@$ip::webapps/tomcat/webapps/
                     fi
                     if [ $? -ne 0 ];then
                        exit 1
                     fi
            done
    
	else
            echo "$COLOR_WHITE Usage: $0 {project_name}"
	fi
done

最关键的就是执行判断之后
rsync -av --password-file=/etc/pwd.conf 2 / t a r g e t / 2/target/ 2/target/i.war ruser@$ip::webapps/tomcat/webapps/
上边命令是推复制 本地推到远程的命令执行。
这里可以插一句:在saltstack部署远程环境时候需要在部署tomcat 之后,部署rsync推复制的客户端slave
到服务器下,并且守护进程开启,随时等待手动更新。其配置如下
[root@master rsync_tui_slave]# ls
rsyncd.conf rsyncd.motd rsyncd.secrets rsyncd.sh
[root@master rsync_tui_slave]#

#!/bin/bash
killall rsync > /dev/null
read -p "请输入允许获取数据的IP或者IP网段:" a
read -p "共享目录绝对路径:" b
read -p "请输入密码文件的密码:" c
rm -rf /etc/rsyncd
rm -rf /var/run/rsyncd.pid
cp -r /usr/src/rsyncd/ /etc/
if [ $? -eq 0 ];then
	echo "配置文件完成"
	mkdir -p "$b"
	cd /etc/rsyncd/
	sed -i '10s:IP:'$a':' rsyncd.conf
	sed -i 's:0:'$c':' rsyncd.secrets
	sed -i '13s:B:'$b':' rsyncd.conf     #此处以冒号为分隔符,防止与变量b输入的/冲突
	    if [ $? -eq 0 ];then
		echo "配置文件修改成功"
	        rsync --daemon --config=/etc/rsyncd/rsyncd.conf
	        lsof -i:873
	            if [ $? -eq 0 ];then
	                echo "服务启动成功"
	            else
	                echo "服务启动失败,请检查配置文件"
		        break
	    	    fi
	    else
		echo "配置文件修改失败"
	    fi
else	
	echo "配置文件复制失败"
fi
#作为推复制时候需要手动改配置文件rsyncd.conf的 read only=no
[root@master rsync_tui_slave]# 

所以综上几个脚本,就可以实现自动发版,而且根据不同的项目名称构建CI UAT各种环境。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值