java Python shell Firefox 编程 php 微软 开源 Android Ubuntu apache linux nginx google wordpress centos Windows 程序员 云计算 mysql

配置rsync实时备份Linux文件

即使是Linux,运行关键应用也应该做好故障容灾。最简单的故障容灾就是备份系统。然而如果是文件服务器,保持主服务器和备服务器的文件一致性就变得非常重要。使用手动复制来做这项工作肯定是不行的,scp最然能实现,但是未免太浪费带宽了。毕竟有修改的文件还是少数。rsync远程同步软件,很好的帮我们解决了文件一致性和带宽最优化利用的矛盾。文档面向CentOS 6.3 x64版本。

rsync是典型的C/S架构的软件套件。rsync在客户端用来从服务器拉取变更列表。rsyncd则在服务端提供文件变更列表,提供文件传输。rsync以模块的形式发布待同步的目录。服务器端rsyncd可以发布多个模块,客户端rsync一次只能拉取一个模块的变更。

安装rsync

rsync服务器端和客户端是一个软件包。执行如下命令安装rsync

yum install rsync xinetd -y

配置rsyncd

须配置/etc/rsyncd.conf、/etc/rsyncd.motd、/etc/rsyncd.secrets三个文件,如果不存在就创建。这里作者给出自己编写的配置文件,并作解释。更多请参阅man手册。

motd file = /etc/rsyncd.motd
#欢迎文件,客户端拉取变更列表前,会显示这个文件中的内容。
read only = yes
#客户端只读服务器文件,客户端只能从服务器中拉取文件。
hosts allow = 10.186.154.116/32
#那些主机允许连接服务器
hosts deny = 192.168.0.0/24
#那些主机明确拒绝链接。
max connections = 5
#最大连接数
use chroot = yes
#是否使用chroot功能。
log file = /var/log/rsyncd.log
#日志路径
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
#进程号和锁文件路径
[rsyncuserhome]
#一个名为rsyncuserhome的模块。模块名不允许有空格
comment = "rsyncuser's home in 10.186.154.6"
#注释
path = /home/rsyncuser/
#模块的列表
uid = rsyncuser
#目录所属主和属组
gid = rsyncgroup
list = no
#是否允许客户端请求列出全部文件列表
auth users = rsync-backup
#这个访问这个模块需要的授权用户名
secrets file = /etc/rsyncd.secrets
#密码文件路径,密码以明文存储,注意安全。
[WebsitesA]
comment = WebsitesA of 10.186.154.6
path = /var/www/WebsitesA
uid = root
gid = root
auth users = rsync-backup
secrets file = /etc/rsyncd.secrets
/etc/rsyncd.motd
rsync master server
/etc/rsyncd.secrets
rsync-backup:PASSW0D

xinetd配置

rsyncd不用一直运行,可以由xinetd监管。配置文件/etc/xinetd.d/rsync内容如下:

# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
disable = no
#flags          = IPv6
socket_type     = stream
wait            = no
user            = root
server          = /usr/bin/rsync
server_args     = --daemon --config=/etc/rsyncd.conf
log_on_failure  += USERID
}

防火墙配置

防火墙需开启端口873,添加下面文本到iptables配置文件。重启IPtables防火墙。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j accept

客户端配置

客户端只需设置定时从服务器端拉取文件即可。作者crontab设置如下:

0,30 * * * * /usr/bin/rsync -aqz --delete --password-file=/root/.rsync-backup.key rsync-backup@filestore.xiyang-liu.com::rsyncuserhome /home/rsyncuserhome/
##每半个小时同步一次home。
###创建文件.rsync-backup.key存放明文密钥,设置权限为600
30 1 * * * /usr/bin/rsync -aqz --delete --password-file=/root/.rsync-backup.key rsync-backup@filestore.xiyang-liu.com::WebsitesA /var/www/WebsitesA
##每天同步一次www服务器文件。

结语

本文介绍了如何安装配置rsyncd来在Linux服务器间同步文件。作者为了方便用root用户,实际应用时最好不用。作者使用主机名讲解,并设置了hosts文件,以辅助DNS解析。

延伸阅读

评论