linux下数据实时同步的软件公认用rsync工具来实现,虽然目前维护的服务器还没达到必须要配置rsync软件去实现,但有必要整理这篇网络转载的文章,供大家参考和学习。
对于选择Linux 作为应用平台的的中小型企业或网站来说,往往面临如何实现数据远程备份或者网站镜象的问题,虽然有商业化的备份和镜象产品可供选择,但这些产品的价格往往过于昂贵。因此如何利用自由软件高效实现远程备份和网站镜象就成为一个值得讨论的话题。
通过网络进行远程数据备份或者网站镜象的最简单的方法就是使用wget,但是这种方式每次都需要将所有数据都重新在网络上传输一遍,而不考虑哪些文件是经过更新的,因此效率非常低下。尤其在需要备份的数据量很大的时候,往往需要花费数个小时来在网络上进行数据传输。
因此这里就介绍一种高效的网络远程备份和镜象工具-rsync,它可以满足绝大多数要求不是特别严格的备份需求。
rsync的备份:
特点: 可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
无须特殊权限即可安装。
优化的流程,文件传输效率高。
可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜象
需求:用rsync完成异地文件的同步
难点:如何建立异地信任关系
实现功能:当用户在本地客户端某目录内建立、修改、删除目录或文件、修改目录或文件的属性,只要执行相同的shell脚本,
rsync就会自动找出有改动或删除的数据,将其传送到服务器上,使服务器端某目录内的数据跟本地客户端某目录内的数据保持一致.
必须在服务器A和B上都安装rsync, 其中A服务器上是以服务器模式运行rsync, 而B上则以客户端方式运行rsync.
这样在web服务器A上运行rsync守护进程, 在B上定时运行客户程序来备份web服务器A上需要备份的内容.
# 实例分析
假设有两台服务器:A和B
A是主web服务器 www.ritto.cn (192.168.4.24)
B服务器是备份机 backup.ritto.cn (192.168.4.41)
其中A的web内容存放在以下几个地方:
/data/web/
/home/web_user1/
/home/web_user2/
我们需要在备份机B上建立对这几个目录内容的备份.
# 服务器端配置 (192.168.4.41_backupserver)
# rsync安装.
- yum install rsync
- groupadd www
- useradd -g www www
- mkdir -p /data/backup/rsync/web/
- mkdir -p /data/backup/rsync/web_user1/
- mkdir -p /data/backup/rsync/web_user2/
- chmod -R +w /data/backup/rsync/
- chown -R www:www /data/backup/rsync/
# 编辑rsync的配置文件.
vim /etc/rsyncd.conf
- uid = www
- gid = www
- max connections = 5
- use chroot = no
- log file = /var/log/rsyncd.log
- pid file = /var/run/rsyncd.pid
- lock file = /var/run/rsyncd.lock
- [web]
- path = /data/backup/rsync/web/
- comment = website web
- ignore errors
- read only = no
- list = false
- [web_user1]
- path = /data/backup/rsync/web_user1/
- ignore errors
- read only = no
- list = false
- [web_user2]
- path = /data/backup/rsync/web_user2/
- ignore errors
- read only = true
- list = false
- # hosts allow = 192.168.4.0/24
- # hosts allow=192.168.4.41 10.0.0.22
- # hosts deny = 0.0.0.0/32
- # auth users = www
- # secrets file = /etc/rsync.pass
# 更改密码文件
# vim /etc/rsync.pass
# www:www //用户名和密码
# chmod 600 /etc/rsync.pass
# 启动rsync服务器端, 在web服务器A上运行(rsync默认服务端口873):
vim /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 873 -j ACCEPT
/usr/bin/rsync –daemon
# 查看rsync是否启动
ps -ef | grep rsync
lsof -i:873
# 如果要在启动时把服务起来:
echo “/usr/bin/rsync –daemon” >> /etc/rc.local
# 客户端配置 (192.168.4.24_web服务器)
- vim push.sh
- #!/bin/sh
- /usr/bin/rsync -vzrtopg –delete /data/web/ 192.168.4.41::web/ > /dev/null 2>&1
- /usr/bin/rsync -vzrtopg –delete /home/web_user1/ 192.168.4.41::web_user1/ > /dev/null 2>&1
- /usr/bin/rsync -vzrtopg –delete /home/web_user2/ 192.168.4.41::web_user2/ > /dev/null 2>&1
//前面蓝色部分为本要要推送的目录,红色部分为服务端rsyncd.conf中配置的模块名.
//-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数.
// –progress是指显示出详细的进度情况,–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致.
chmod +x ./push.sh
./push.sh //如果更改的文件较大,可以在后面加一个&;