rsync是一个数据镜像及备份工具,具有可使本地和远程两台主机的文件,目录之间,快速同步镜像,远程数据备份等功能。在同步过程中,rsync是根据自己独特的算法,只同步有变化的文件,甚至在一个文件里只同步有变化的部分,所以可以实现快速的同步数据的功能
一、服务端
1.获取相关rpm包
yum install --downloadonly --downloaddir=/rsync rsync #远程镜像rpm包
yum install --downloadonly --downloaddir=/rsync xinetd #守护进程
2.验证是否安装了rysnc程序包 rpm –qa|grep rsync
3.删除并安装最新rysnc程序包 rpm –e `rpm –qa|grep rsync` rpm –ivh 安装包
4.创建公钥并远程拷贝到相应的主机上
ssh-keygen -t rsa
scp /root/.ssh/id_rsa.pub #拷贝公钥到相应目标主机之上
5.验证目标主机是否可以正常登陆ssh ip (一般情况下是正常的)
6.获取wget inotify介质
7.在服务端安装inotify rpm –ivh inotify-tools-3.14-1.el5.i386.rpm介质
8.测试镜像工具的可用性功能rsync -aSvH /home/
# a 等同于 -rlptgoD 归档模式,就是保持文件所有属性、权限不变
#S 有效的处理零散文件
#v verbose模式
#H 保持hard links
9.配置安装xinetd为rsync的启动管理进程
10.分别在每个服务器上的xinetd配置项中允许xinetd(超级守护进程)管理rsync服务
cd /etc/xinetd.d
vi rsync修改内容如下所示:
service rsync
{
disable = yes 修改为disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
……………………………………….
}
11.服务端的详细设置
a)编写服务器端脚本
#add by fengzhanhai
#it used by startup rsync
nohup /root/mon/rsync.sh &
[root@mysql1 mon]# cat rsync.sh
#create by fengzh
#it used by monitor file
#create by fengzh
#!/bin/bash
src=/webapp/tomcat6/webapps/MMS/uploadFile/
des=/webapp/tomcat6/webapps/sdmp/uploadFile/
#des=uploadFile
host="10.0.211.2 10.0.211.3"
#host="ip1 ip2 ip3"
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
-e modify,delete,create,attrib $src | while read file;
do
for ip in $host
do
rsync -vzrtopg --delete --progress $src root@$ip:$des 2>&1>/dev/null
#rsync -aSvH --delete $src root@$ip:$des
done
echo "${file} was rsynced on `date`">>/etc/mon/mon.log
done
b)启动脚本
#add by fengzhanhai
#it used by startup rsync
nohup /root/mon/rsync.sh &
二、客户端参数设置
12.客户端参数设置
a)touch 一个rsyncd.conf文件 在etc目录下
b)添加如下内容:
uid=root
gid=root
use chroot=no
max connections=5
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
[sdtv]
path=/mnt/sdtv/
comment=update
ignore errors
read only=no
list=no
hosts allow=192.168.202.0/255.255.255.0
auth users=root
uid=root
gid=root
13.开机自启动
#echo "rsync --daemon" >> /etc/rc.local #开机自启动
#chkconfig rsync on
14.启动远程镜像 参见13步骤。
三、视野拓展
生产SSH KEY(目的是为了自动实时同步时候不需要输入密码): ssh-keygen -t rsa 这个命令生成一个密钥对:id_rsa(私钥文件)和id_rsa.pub(公钥文件)。默认被保存在/root/.ssh/目录下。注:在生成密钥对会提示输入密码,若什么都不输入直接回车,则表示没有密码,所以我们这里直接回车。
# scp /root/.ssh/id_rsa.pub root@192.168.1.128:/root/.ssh/
# cat /root/.ssh/id_rsa.pub >> authorized_keys
#/etc/init.d/sshd restart 编写脚本 vim /usr/local/inotify/rsync.sh #!/bin/sh srcdir="/home"
# scp /root/.ssh/id_rsa.pub root@192.168.1.128:/root/.ssh/ # cat /root/.ssh/id_rsa.pub >> authorized_keys
#/etc/init.d/sshd restart
编写脚本 vim /usr/local/inotify/rsync.sh
#!/bin/sh
srcdir="/home"
ip="192.168.1.128 10.10.50.141" #多台服务器可以自己添加IP
dstdir="/home" /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${srcdir} \ |
while read file
do
for i in $ip
do
rsync -aqztH --delete --progress ${srcdir} root@${i}:${dstdir}
echo "${src} was rsynced"
#echo "-----------------------------------------------------"
done
done
要排除同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径.
脚本相关注解:
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件~
-e create,move,delete,modify
监听 创建 移动 删除 写入 事件
rsync -aHqzt $SRC $DST
-a 存档模式
-H 保存硬连接
-q 制止非错误信息
-z 压缩文件数据在传输
-t 维护修改时间
-delete 删除于多余文件
.