rsync实现Linux服务器数据同步

     在日常工作经常需要对服务器的数据进行备份,如异地备,必须通过网络将数据传输到远程服务器端做备份。对于这类事务,如果单纯通过手工去操作的话,不仅效率低,而且会很烦锁。虽然很多商业类备份软件可以提供解决方法,但是它们高昂的价格却不是每个企业都可以承受的。幸好,Linux本身就有很多优秀的开源方案,rsync就是在这方面很出色的开源软件,它的功能强大,能很好的处理这类需求。

     rysnc是一款数据文件同步工具,在文件传输方面,它有着很多优点。它能够对整个目录树和文件系统进行更新,它使用“rsync算法”来检测文件之间所做的更改,采取增量方式同步文件,从而提高了文件传输的效率。同时,在传输中还可以保持原有文件的权限、属主和时间等属性不变。在安全方面,rsync可使用ssh方式来传输,从而保证了传输过程数据的安全。
    下面介绍一下rsync的安装使用,操作环境如下:服务器A为rsync服务器,服务器B配置为rsync客户端,我们通过rsync使A的文件同步到B服务器上做为备份。            

 服务器A设置:

1. 安装rsync。rsync主页为http://rsync.samba.org ,可在这里下载最新源码包进行安装,目前的版本为rsync-3.0.9.tar.gz。 

tar -zxvf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure
make
make instal

2.创建rsync 同步目录/data,此目录里面的内容将同步到远程服务器上。 
mkdir /data

3.创建密码文件,此文件用于存放rsync同步时使用的帐号密码,格式为“用户名:密码”,该用户是与操作系统分离的,系统上不需要创建此用户。rsync的密码文件可使用任意名称。
vi /etc/rsyncd.pass  
alex:123456

密码文件权限需修改为600,
chmod 600 /etc/rsyncd.pass


4.创建 rsync 配置文件/etc/rsync.conf,默认是没有这个文件的,需要手工创建。rsync的配置文件使用模块化结构,包含全局参数和模块参数,全局参数是通用的配置。每个模块代表着一个目录树的同步,模块定义从[]中的模块名开始,到下一个模块定义开始。
rsync.conf配置如下:
--------------------------------------------------------------------------------------
 uid=root      #该选项指定当该模块传输文件时守护进程应该具有的uid,
              配合gid选项使用可以确定rsync具有访问那些文件夹的              
              权限,默认值是"nobody",我们可以根据相应的需要进行配置。
gid=root     #该选项指定当该模块传输文件时守护进程应该具有的gid,
              默认值是”nobody”。
use chroot=no                     #不使用chroot
max connections=20                #设置最大连接数,默认为0,即无限制。这里设置为20.
strict mode =yes                  #设置是否检查口令文件的权限
pid file=/var/run/rsyncd.pid      #指定rysnc进程的pid文件位置 
lock file=/var/lock/rsync.lock    #指定支持max connections的锁文件
log file=/var/log/rsyncd.log      #指定 rsync日志输出路径

[model1]                            #模块名,可使用任意名称
path=/data/                        #源目录路径
comment=Test rsync                 #模块描述
ignore errors                      #出现I/O错误时可忽略。
read only=no                       #是否只读,设置为no时客户端可上传文件。
write only=no                      #设置为no 时客户端可下载文件。
hosts allow=192.168.0.20           #允许访问主机
hosts deny=*                       #拒绝访问的主机,*表示所有主机。
list=false                         #设置客户端请求时是否列出该模块,false为隐藏。                 
auth users=alex                    #设置连接时使用的用户,即密码文件里面定义的用户名。
secrets file=/etc/rsyncd.pass      #指定密码文件位置 
----------------------------------------------------

5.启动rsync守护进程
/usr/local/bin/rsync --daemon

rsync的默认端口为873,通过命令netstat –lnpt可以查看是否已正常启动。 

到这一步rysnc服务器上的配置就已经完成了,我们在目录/data中创建两个文件 123.txt和 abc.log,用来做同步的测试,下面我们可以到服务器B上去验证一下。

服务器B 配置
1. 安装rsync。
2. 配置密码文件,里面写入与服务器A上相同的密码,但不需要再写帐号名。
vi /etc/rsyncd.pass
123456
3. 创建备份的文件夹
mkdir /backup

4. 同步操作,使用如下命令从服务器A下载文件。
/usr/local/bin/rsync –vzrtopg –delete --progress --exclude “*.log”  [email protected]::model1 /backup  --password-file=/etc/rsyncd.pass

该命令的解释如下:
-v即--verbose   显示传输的详细信息
-z 即--compress 传输时对文件进行压缩
-r 即—recursive 对子目录进行递归处理
-t 即—times    保持文件的时间信息
-o即—owner  用来保持文件的属主信息
-p 即 --perms 保持文件权限
g 即 –group 保持文件属组信息
--delete  以rsync服务器为基准保持数据同步,如果服务器删除了某一文件,客户端也会删掉。
--progress 显示出详细的进度情况。
--exclude 用于排除不需要的文件类型。
[email protected]::model1   指定备份的服务器和相关的模块, alex 为服务器A上面设置的
                            rsync同步帐号,得注意服务器IP与模块名之间为双冒号“::”。  

/backup 指定备份的文件在客户端上的存放位置 。
--password-file=/etc/rsyncd.pass 指定客户端存放密码文件的位置。

现在,我们可以查看备份目录/backup,看到已经与A服务器上的/date完成了同步,同时排除了我们不想要同步的文件。

5.如果我们需要定时同步,如一小时同步一次,只需把该命令加到计划任务即可。

* 1 * * *  /usr/local/bin/rsync –vzrtopg –delete --progress --exclude “*.log”  [email protected]::model1 /backup  --password-file=/etc/rsyncd.pass

 至此,rsync的同步设置完成。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章