共计 4600 个字符,预计需要花费 12 分钟才能阅读完成。
背景:
两台亚马逊服务器之间需要数据同步,只要传一台机器上,就可以自动同步到其他机器上。
安装 Rsync:
CentOS 6.7 自动就带有 Rsync,不需要安装。
## 实例分析
这里假设有两台服务器:A 和 B。其中 A 是主 web 服务器(155.28.81.0),B 服务器是从服务器(155.28.82.0)。我们要将 A 服务器的 /home/test/ 备份到 B 服务器的 /home/test/ 目录下。
## 服务器 A 配置
#### 服务器 A 编译安装
rsync 的编译安装非常简单,只需要以下简单的几步:
[root@www ~]# cd /usr/local/src/
[root@www src]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
[root@www src]# tar zxvf rsync-3.0.9.tar.gz
[root@www src]# cd rsync-3.0.9
[root@www rsync-3.0.9]# ./configure –prefix=/usr/local/rsync/
[root@www rsync-3.0.9]# make
[root@www rsync-3.0.9]# make install 但是需要注意的是必须在服务器 A 和 B 上都安装 rsync,其中 A 服务器上是以服务端模式 (被动) 运行 rsync,而 B 上则以客户端模式 (主动) 运行 rsync。这样在 web 服务器 A 上运行 rsync 守护进程,在 B 上定时运行客户程序来备份 web 服务器 A 上需要备份的内容。
#### 建立用户与密码认证文件
[root@www rsync-3.0.9]# echo “backup:bk_passwd” > /usr/local/rsync/rsyncd.passwd 请记住,在 server 端建立的密码文件,包含用户名与密码,而在 client 端建立的密码文件只有密码,没有用户名。
#### 设置权限为只读
[root@www rsync-3.0.9]# cd /usr/local/rsync
[root@www rsync]# chmod 600 rsyncd.passwd 否则可能会报错:
@ERROR: auth failed on module ***
rsync error: error starting client-server protocol (code 5) at main.c(1503)
#### 建立 rsync 配置文件
[root@www rsync]# vi /usr/local/rsync/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 4
strict modes = yes
hosts allow = 121.42.46.213 #可以空格,允许多个
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[test]
path = /home/test
ignore errors
read only = true
list = false
auth users = backup
secrets file = /usr/local/rsync/rsyncd.passwd#### 以守护进程方式启动 rsync 服务器
[root@www rsync]# rsync –daemon –config=/usr/local/rsync/rsyncd.confrsync 默认服务端口为 873,服务器在该端口接收客户的匿名或者认证方式的备份请求。
#### 如果要让服务设置为自启动,可以加入 rc.local
编辑 /etc/rc.d/rc.local,在最后添加:
/usr/local/rsync/bin/rsync –daemon –config=/etc/rsyncd.conf
## 客户端 B 配置
编译安装同上, 一般错误都会发生在服务器 B
#### 建立访问服务端 A 的密码认证文件
[root@www rsync]# echo “bk_passwd” > /usr/local/rsync/rsync.passwd#### 设置权限为只读
[root@www rsync]# chmod 0600 rsync.passwd#### 在 rsync 安装之后,运行以下指令同步备份
[root@www rsync]# rsync -vzrtopg –delete –progress –password-file=/usr/local/rsync/rsync.passwd backup@115.28.81.0::test /home/test 其中地址 backup@115.28.81.0::test,backup 为服务器 A 用户,115.28.81.0 为服务器 A IP 地址或者域名,test 为服务器 A 配置模块。
上面这个命令行中 -vzrtopg 里的 v 是 verbose,z 是压缩,r 是 recursive,topg 都是保持文件原有属性如属主、时间的参数,–progress 是指显示出详细的进度情况,–delete 是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。–password-file=/usr/local/rsync/rsync.passwd 来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有 root 可读。
这里将备份的内容存放在备份机的 /home/test/ 目录下。
#### 安装 inotify
[root@www rsync]# cd /usr/local/src/
[root@www src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[root@www src]# tar zxvf inotify-tools-3.14.tar.gz
[root@www src]# cd inotify-tools-3.14
[root@www inotify-tools-3.14]# ./configure –prefix=/usr/local/inotify
[root@www inotify-tools-3.14]# make
[root@www inotify-tools-3.14]# make install
Rsync 同步脚本:
#!/bin/bash
#variables
current_date=$(date +%Y%m%d_%H%M%S)
source_path=/home/www/
log_file=/usr/local/rsync/rsync_client.log
#rsync configuration
rsync_server=115.28.81.0
rsync_module=www
rsync_user=backup
rsync_pwd=/usr/local/rsync/rsync.passwd
INOTIFY_EXCLUDE='(.*/*\.log|.*/*\.swp)$’
INOTIFY_EXCLUDE_LIST=’/usr/local/inotify/inotify_exclude.lst’
RSYNC_EXCLUDE=’/etc/rsync_exclude.list’
#rsync client pwd check
if [! -e ${rsync_pwd} ];then
echo -e “rsync client passwod file ${rsync_pwd} does not exist!”
exit 0
fi
#inotify_function
#This function is used to monitor folder(/home/www) files, but exclude subfolders(storage,bootstrape/cache).
inotify_fun(){
/usr/local/inotify/bin/inotifywait -mrq –timefmt ‘%Y/%m/%d-%H:%M:%S’ –format ‘%T %w %f’ \
–exclude ${INOTIFY_EXCLUDE} –fromfile ${INOTIFY_EXCLUDE_LIST} -e modify,delete,create,move,attrib ${source_path} \
| while read file
do
/usr/bin/rsync -auvrtzopgP –exclude-from=${RSYNC_EXCLUDE} –progress –bwlimit=500 –password-file=${rsync_pwd} ${source_path} ${rsync_user}@${rsync_server}::${rsync_module}
done
}
#inotify log
inotify_fun >> ${log_file} 2>&1
其中 INOTIFY_EXCLUDE_LIST=’/usr/local/inotify/inotify_exclude.lst’ 如下:
[ec2-user@ip-172-31-7-248 rsync]$ cat /usr/local/inotify/inotify_exclude.lst
/home/www
@/home/www/www.xxx.com/storage
@/home/www/www.xxx.com/bootstrap/cache
@/home/www/xxx.com/storage
RSYNC_EXCLUDE=’/etc/rsync_exclude.list’
[ec2-user@ip-172-31-7-248 rsync]$ cat /etc/rsync_exclude.list
www.xxx.com/storage
www.xxx.com/bootstrap/cache
xxx.com/storage
RSync 实现文件备份同步详解 http://www.linuxidc.com/Linux/2014-09/106967.htm
利用 inotifywait 监控主机文件和目录 http://www.linuxidc.com/Linux/2013-03/81075.htm
利用 inotify+rsync 实现 Linux 文件批量更新 http://www.linuxidc.com/Linux/2012-01/52132.htm
inotify-tools+rsync 实时同步文件安装和配置 http://www.linuxidc.com/Linux/2012-06/63624.htm
rsync 同步完整配置 http://www.linuxidc.com/Linux/2013-06/85781.htm
CentOS 6.5 下 Rsync 远程同步 http://www.linuxidc.com/Linux/2014-05/101084.htm
Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-01/127800.htm