在日常工作经常需要对服务器的数据进行备份,如异地备,必须通过网络将数据传输到远程服务器端做备份。对于这类事务,如果单纯通过手工去操作的话,不仅效率低,而且会很烦锁。虽然很多商业类备份软件可以提供解决方法,但是它们高昂的价格却不是每个企业都可以承受的。幸好,Linux本身就有很多优秀的开源方案,rsync就是在这方面很出色的开源软件,它的功能强大,能很好的处理这类需求。
服务器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 �Clnpt可以查看是否已正常启动。
到这一步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 �Cvzrtopg �Cdelete --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 即 �Cgroup 保持文件属组信息
--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 �Cvzrtopg �Cdelete --progress --exclude “*.log” [email protected]::model1 /backup --password-file=/etc/rsyncd.pass
至此,rsync的同步设置完成。