Rsync+Inotify 多服务器同步方案
利用Rsync与Inotify构建一套基础的多服务器代码上线部署方案。其中Rsync分ssh方式或rsync守护进程方式,建议内网开发机与外网生产机之间利用ssh key认证方式增加安全性;外网生产机内部,采用rsync守护进程方式。
Rsync篇
========================================================
Rsync是类unix系统下的数据镜像备份工具;用户服务器间的代码同步;本文用于客服端与服务器端代码同步。
一、下载、安装rsync;服务器端与客户端同时需要安装;
本文涉及服务器:
本地开发机:192.168.1.1
预上线机:192.168.1.2
正式web服务器:192.168.1.3、192.168.1.4、192.168.1.5
其中,本地发开机,位于本地;预上线机与正式web服务器,位于机房同一局域网机。
本文中的的所有机器,都需装rsync;服务器端与客户端仅仅为两台同步数据机器的相对概念。
如:本地开发机向预上线机,上传数据时;
服务端:192.168.1.1
客户端:192.168.1.2
下载http://rsync.samba.org/ftp/rsync/
1
2
3
4
5
#tar zxvf rsync-2.6.9.tar.gz
#cd rsync-2.6.9
#./configure
#make
#make install
二、配置rsync server
1、配置/etc/rsyncd.conf(需要手动生成)
rsyncd.conf分全局参数和模块参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#vi /etc/rsyncd.conf
max connections=10
use chroot=no
log file=/var/run/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
secrets file = /etc/rsync_server.pwd
uid = www
gid = www
path=/home/upcode/test
comment = from test
ignore errors
read only=no
auth users=upcode
list=no
#hosts allow=192.168.1.2
#log format = "%o %h [%a] %m (%u) %f %l"
2、配置rsync服务端密码 /etc/rsync_server.pwd
权限:要将/etc/rsync_server.pwd设置为root拥有, 且权限为600。
1
2
3
4
5
6
#vi /etc/rsync_server.pwd
max connections=10
upcode:upcode
#chown root:root /etc/rsync_server.pwd
#chmod 600 /etc/rsync_server.pwd
三、启动rsync server
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a、基础
#vi /etc/xinetd.d/rsync
修改disable = yes
打开rsync daemon,让配置生效
#service xinetd restart
b、启动rsync服务端
#rsync --daemon
c、加入rc.local
#rsync --daemon
d、检查rsync
#netstat -antp | grep rsync
四、配置rsync client
1、设定客户端密码/etc/rsync_client.pwd
权限:只需包含一行密码,且权限为600
1
2
3
4
#vi /etc/rsync_client.pwd
upcode
#chown root:root /etc/rsync_client.pwd
#chmod 600 /etc/rsync_client.pwd
五、防火墙开启
1
2
3
4
5
6
vi /etc/sysconfig/iptables
添加
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
重启
service iptables restart
六、测试指令
1
rsync -vzrtopg --progress /home/upcode/test upcode@192.168.1.1::upcode --password-file=/etc/rsync_client.pwd
Inotify篇
========================================================
Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。
分发服务器编写此脚本,用户监控开发服务器,上传到预上线机的代码,用于分发到正式服务器。
一、下载安装
下载http://inotify-tools.sourceforge.net/
1
2
3
4
5
#tar zxvf inotify-tools-3.14.tar.gz
#cd inotify-tools-3.14
#./configure
#make
#make install
二、编写监控脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vi /etc/rsync-web.sh
#!/bin/sh
SRC=/tmp/upcode/*
DES=upcode
USER=upcode
WEB1=182.131.1.3
WEB2=182.131.1.4
WEB3=182.131.1.5
/usr/local/bin/inotifywait -mrq -e create,move,delete,modify $SRC | while read D E F
do
rsync -vzrtopg --progress $SRC $USER@$WEB1::$DES --password-file=/etc/rsync_client.pwd
#rsync -vzrtopg --progress $SRC $USER@$WEB2::$DES --password-file=/etc/rsync_client.pwd
#rsync -vzrtopg --progress $SRC $USER@$WEB3::$DES --password-file=/etc/rsync_client.pwd
done
三、启动监控服务
1
2
3
4
#chmod +x /etc/rsync-web.sh
#nohup /etc/rsync-web.sh &//必须使用nohup放入后台执行,否则关闭终端后此脚本进程会自动结束
nohup /etc/rsync-web-test.sh &
进阶篇 ssh key认证方案
========================================================
提高开发机与预上线机之间的安全性
方案:开发机与预上线机之间,通过SSH上传数据(本方案无需启动rsync服务端,强烈推荐,开发机与预上线机采用此方案)
在开发机(192.168.1.1)、预上线机(192.168.1.2)两台服务器上,分别创建两个普通帐户(注:本文简化,创建了同名用户 upcode)
1
2
3
4
5
6
7
8
9
10
#useradd -d /home/upcode upcode
# su upcode
$ cd ~
$ pwd
/home/upcode
$ mkdir .ssh
$ cd .ssh
$ pwd
/home/user/upcode/.ssh
二、开发机(192.168.1.1)生成公私密钥
1
$ssh-keygen -t rsa
三、将密钥存入预上线机(192.168.1.2)
1
2
3
4
#scp /home/upcode/.ssh/id_rsa.pub upcode@192.168.1.2:/home/upcode/.ssh/authorized_keys
确保 预上线机(192.168.1.2) upcode 文件夹权限
chmod 710 upcode
四、开发机(192.168.1.1)测试连接不需输入密码
1
2
su upcode
ssh upcode@192.168.1.2
五、使用,开发机(192.168.1.1)
1
2
3
//上传代码指令,结合预上线机开启的ssh安全端口
su upcode
rsync -vzrtopg --progress /home/upcode/test -e 'ssh -p7213' upcode@192.168.1.2:/tmp/upcode
提高篇
========================================================
记录每次上次代码痕迹,编写快速回滚脚本
摘自:http://www.wubiao.info/223
页:
[1]