1)拷贝本地文件当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式如:rsync -a /data /backup
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器当DST路径地址包含单个冒号":"分隔符时启动该模式如:rsync -avz c foo:src
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器当SRC地址路径包含单个冒号":"分隔符时启动该模式如:rsync -avz foo:src/bar /data
4)从远程rsync服务器中拷贝文件到本地机当SRC路径信息包含"::"分隔符时启动该模式
5)从本地机器拷贝文件到远程rsync服务器中当DST路径信息包含"::"分隔符时启动该模式
6)列远程机的文件列表这类似于rsync传输,不过只要在命令中省略掉本地机信息即可如:rsync -v rsync://1721678192/test
rsync参数:
-n,--dry-run现实哪些文件将被传输rsync 同步
# 执行“推”复制同步
#这是指将本地 *** 作将本地的文件 复制到 IP的/home 位置下
rsync -avz --delete /home/testtxt root@需要同步的IP:/home
# 执行“拉”复制同步
# 这是指在备份的主机上 *** 作的 在备份的主机上 将需要的备份的主机的文件复制到(拉到)备份的主机上
rsync -avz --delete root@IP:/home/testtxt /homersync的命令格式可以为:
1 rsync [OPTION] SRC [SRC] [USER@]HOST:DEST
2 rsync [OPTION] [USER@]HOST:SRC DEST
3 rsync [OPTION] SRC [SRC] DEST
4 rsync [OPTION] [USER@]HOST::SRC [DEST]
5 rsync [OPTION] SRC [SRC] [USER@]HOST::DEST
6 rsync [OPTION] rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync有六种不同的工作模式:
1 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
2使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
3使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
4 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
5 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
6 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
-a 以archive模式 *** 作、复制目录、符号连接 相当于-rlptgoD
rsync中的参数
-r 是递归
-l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
-e ssh的参数建立起加密的连接。
-u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
--progress是指显示出详细的进度情况
--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
--password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。
B、一些实例
B1、列出rsync 服务器上的所提供的同步内容;
首先:我们看看rsync服务器上提供了哪些可用的数据源
# rsync --list-only root@1921681455::
++++++++++++++++++++++++++++++++++++++++++++++
Welcome to use the mikeorgcn rsync services!
2002------2009
++++++++++++++++++++++++++++++++++++++++++++++
rhel4home This is RHEL 4 data
注:前面是rsync所提供的数据源,也就是我们在rsyncdconf中所写的[rhel4home]模块。而“This is RHEL 4 data”是由[rhel4home]模块中的 comment = This is RHEL 4 data 提供的;为什么没有把rhel4opt数据源列出来呢?因为我们在[rhel4opt]中已经把list=no了。
$ rsync --list-only root@1921681455::::rhel4home
++++++++++++++++++++++++++++++++++++++++++++++
Welcome to use the mikeorgcn rsync services!
2002------2009
++++++++++++++++++++++++++++++++++++++++++++++
Password:
drwxr-xr-x 4096 2009/03/15 21:33:13
-rw-r--r-- 1018 2009/03/02 02:33:41 kscfg
-rwxr-xr-x 21288 2009/03/15 21:33:13 wgetpaste
drwxrwxr-x 4096 2008/10/28 21:04:05 cvsroot
drwx------ 4096 2008/11/30 16:30:58 easylife
drwsr-sr-x 4096 2008/09/20 22:18:05 giddir
drwx------ 4096 2008/09/29 14:18:46 quser1
drwx------ 4096 2008/09/27 14:38:12 quser2
drwx------ 4096 2008/11/14 06:10:19 test
drwx------ 4096 2008/09/22 16:50:37 vbird1
drwx------ 4096 2008/09/19 15:28:45 vbird2
后面的root@ip中,root是指定密码文件中的用户名,之后的::rhel4home这是rhel4home模块名
B2、rsync客户端同步数据;
#rsync -avzP root@1921681455::rhel4home rhel4home
Password: 这里要输入root的密码,是服务器端rsyncdsecrets提供的。在前面的例子中我们用的是mike,输入的密码并不回显,输好就回车。
注: 这个命令的意思就是说,用root用户登录到服务器上,把rhel4home数据,同步到本地当前目录rhel4home上。当然本地的目录是可以你自己 定义的。如果当你在客户端上当前 *** 作的目录下没有rhel4home这个目录时,系统会自动为你创建一个;当存在rhel4home这个目录中,你要注意 它的写权限。
#rsync -avzP --delete linuxsir@linuxsirorg::rhel4home rhel4home
这回我们引入一个--delete 选项,表示客户端上的数据要与服务器端完全一致,如果 linuxsirhome目录中有服务器上不存在的文件,则删除。最终目的是让linuxsirhome目录上的数据完全与服务器上保持一致;用的时候要 小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除;
设定 rsync client
设定密码文件
#rsync -avzP --delete --password-file=rsyncdsecrets root@1921681455::rhel4home rhel4home
这次我们加了一个选项 --password-file=rsyncdsecrets,这是当我们以root用户登录rsync服务器同步数据时,密码将读取rsyncdsecrets这个文件。这个文件内容只是root用户的密码。我们要如下做;
# touch rsyncdsecrets
# chmod 600 rsyncdsecrets
# echo "mike"> rsyncdsecrets
# rsync -avzP --delete --password-file=rsyncdsecrets root@1921681455::rhel4home rhel4home
注:这里需要注意的是这份密码文件权限属性要设得只有属主可读。
这样就不需要密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的;
B3、让rsync客户端自动与服务器同步数据
服务器是重量级应用,所以数据的网络备份还是极为重要的。我们可以在生产型服务器上配置好rsync 服务器。我们可以把一台装有rysnc机器当做是备份服务器。让这台备份服务器,每天在早上4点开始同步服务器上的数据;并且每个备份都是完整备份。有时 硬盘坏掉,或者服务器数据被删除,完整备份还是相当重要的。这种备份相当于每天为服务器的数据做一个镜像,当生产型服务器发生事故时,我们可以轻松恢复数 据,能把数据损失降到最低;是不是这么回事??
step1:创建同步脚本和密码文件
#mkdir /etc/crondailyrsync
#cd /etc/crondailyrsync
#touch rhel4homesh rhel4optsh
#chmod 755 /etc/crondailyrsync/sh
#mkdir /etc/rsyncd/
#touch /etc/rsyncd/rsyncrhel4rootsecrets
#touch /etc/rsyncd/rsyncrhel4easylifesecrets
#chmod 600 /etc/rsyncd/rsync
注: 我们在 /etc/crondaily/中创建了两个文件rhel4homesh和rhel4optsh ,并且是权限是755的。创建了两个密码文件root用户用的是rsyncrhel4rootsecrets ,easylife用户用的是 rsyncrhel4easylifesecrets,权限是600;
我们编辑rhel4homesh,内容是如下的:
#!/bin/sh
#backup 1921681455:/home
/usr/bin/rsync -avzP --password-file=/etc/rsyncd/rsyncrhel4rootpassword root@1921681455::rhel4home /home/rhel4homebak/$(date +'%m-%d-%y')
我们编辑 rhel4optsh ,内容是:
#!/bin/sh
#backup 1921681455:/opt
/usr/bin/rsync -avzP --password-file=/etc/rsyncd/rsyncrhel4easylifesecrets easylife@1921681455::rhel4opt /home/rhel4hoptbak/$(date +'%m-%d-%y')
注:你可以把rhel4homesh和rhel4optsh的内容合并到一个文件中,比如都写到rhel4baksh中;
接着我们修改 /etc/rsyncd/rsyncrhel4rootsecrets和rsyncrhel4easylifesecrets的内容;
# echo "mike" > /etc/rsyncd/rsyncrhel4rootsecrets
# echo "keer"> /etc/rsyncd/rsyncrhel4easylifesecrets
然后我们再/home目录下创建rhel4homebak 和rhel4optbak两个目录,意思是服务器端的rhel4home数据同步到备份服务器上的/home/rhel4homebak 下,rhel4opt数据同步到 /home/rhel4optbak/目录下。并按年月日归档创建目录;每天备份都存档;
#mkdir /home/rhel4homebak
#mkdir /home/rhel4optbak
step2:修改crond服务器的配置文件 加入到计划任务
#crontab -e
加入下面的内容:
# Run daily cron jobs at 4:10 every day backup rhel4 data:
10 4 /usr/bin/run-parts /etc/crondailyrsync 1> /dev/null
注:第一行是注释,是说明内容,这样能自己记住。
第二行表示在每天早上4点10分的时候,运行 /etc/crondailyrsync 下的可执行脚本任务;
配置好后,要重启crond 服务器;
# killall crond 注:杀死crond 服务器的进程;
# ps aux |grep crond 注:查看一下是否被杀死;
# /usr/sbin/crond 注:启动 crond 服务器;
# ps aux |grep crond 注:查看一下是否启动了?
root 3815 00 00 1860 664 S 14:44 0:00 /usr/sbin/crond
root 3819 00 00 2188 808 pts/1 S+ 14:45 0:00 grep crond科技时代,任何行业都离不开数据的分析以及统筹,如果掌握了最关键的数据及技术,那成功就指日可待,所以数据对于一个企业来说,就是最无形的财富,而一个企业的数据基本都有服务器保存及管理着,如何保证数据安全,实现数据同步及备份?诚恺科技小编就同大家一起来看看在Linux服务器中利用rsync配合inotify实现数据实时同步及备份的方法。
rsync:可以镜像保存整个目录树和文件系统。可以很容易做到保持原来文件的权限、时间、软硬链接等等。第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。
方案:起初用rsync进行数据备份是利用计划任务,定时执行一下命令实现rsync的同步,但最近开发这边修改比较频繁,看来需要实时同步备份来完善备份机制!所以需要利用inotify触发器来改善!达到一旦指定的位置有了新的变动就将其同步!
环境:
CentOS 64 64位
rsync-309
inotify-tools-314
说明:
101016 (rsync+inotify)----------网站程序(/data0/htdocs/)
101019 (rsync)------------------网站程序备份(/data0/htdocs/)
目的:
实现101016的/data0/htdocs/目录下发生任何变动都将实时同步到101019的/data0/htdocs/上(另,这两台都跑有keepalived+nginx,来实现出现故障自动切换的容灾,详细配置会在后面补上)
一、web服务器101016 (rsync+inotify)
1、准备软件包
2、安装Rsync
1)、1234 tar-zxvf rsync-309targz
2)、cdrsync-309
3)、/configure--prefix=/usr/local/rsync
4)、make;makeinstall
建立密码认证文件
[root@ftp ~]# echo "111111">/etc/rsyncd/rsyncdsecrets建立密码认证文件
其中111111可以自己设置密码,rsyncdsecrets名字也可以自己设置;
权限:要将/etc/rsyncd/rsyncdsecrets设置为root拥有, 且权限为600。
# chmod 600 /etc/rsyncd/rsyncdsecrets
3、安装inotify
1)、1234 tar-zxvf inotify-tools-314targz
2)、cdinotify-tools-314
3)、/configure--prefix=/usr/local/inotify
4)、make;makeinstall
4、创建rsync复制脚本
此项功能主要是将ftp端的目录/data0/htdocs/里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给101019的/data0/htdocs里,下面是通过shell脚本实现的。
[root@web ~]# vim /root/shell/rsyncsh
[root@web ~]# chmod u+x /root/shell/rsyncsh
[root@web ~]# setsid /root/shell/rsyncsh &
#后台运行脚本,关闭shell终端继续后台运行
rsyncsh脚本加入开机启动项
# echo "/root/shell/rsyncsh" >> /etc/rclocal
防火墙开启rsync端口:873
添加:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -jACCEPT
重启:
# /etc/initd/iptables restart
二、备份服务器101019(rsync)
1、准备工作
创建备份目录:
# mkdir /data0/htdocs
2、安装rsync(备份主机只安装rsync)
1)、1234 tar-zxvf rsync-309targz
2)、cdrsync-309
3)、/configure--prefix=/usr/local/rsync
4)、make;makeinstall
3、建立用户与密码认证文件
[root@backup ~]# echo "root:111111" > /etc/ rsyncd/rsyncdsecrets
[root@backup ~]# less /etc/rsyncd/rsyncdsecrets
root:111111
注意:
请记住,在101016端建立的密码文件,只有密码,没有用户名;而在101019里建立的密码文件,用户名与密码都有。
权限:要将/etc/rsyncd/rsyncdsecrets设置为root拥有, 且权限为600。
#chmod 600 /etc/rsyncd/rsyncdsecrets
4、建立rsync配置文件
[root@backup ~]# vim /etc/rsyncd/rsyncdconf
启动rsync服务
# /usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncdconf
# ps -ef |grep rsync
Rsync服务加入开机启动项
# echo "/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncdconf" >> /etc/rclocal
防火墙开启rsync端口:873
添加:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -jACCEPT
重启:
# /etc/initd/iptables restart
完成,其实这个时候数据已经同步了!
测试一下:
由于/data0/htdocs/下涉及到一些公司信息,所以就以/data0/htdocs/tmp/为例
主机名可以区别是两台机器,里面的内容完全一直,连文件的属性都一样
再对里面修改一下试试,创建一个文件,然后删除user目录试试
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)