亚马逊EC2服务器使用Rsync+Inotify实时同步

简介:

背景:


两台亚马逊服务器之间需要数据同步,只要传一台机器上,就可以自动同步到其他机器上。


安装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.conf

rsync默认服务端口为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同步脚本:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/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'如下:

1
2
3
4
5
[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'

1
2
3
4
[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


参考:

http://fanrong33.com/archives/89.html










本文转自 安安安安森  51CTO博客,原文链接:http://blog.51cto.com/smallc/1736902,如需转载请自行联系原作者
目录
相关文章
|
30天前
|
存储 网络协议 Linux
AWS实操-EC2-创建购买linux(centos)EC2服务器
AWS实操-EC2-创建购买linux(centos)EC2服务器
|
6月前
|
JSON NoSQL 网络安全
业务服务器免装插件,使用rsync+nxlog同步+采集应用日志并接入到GrayLog5.1
业务服务器免装插件,使用rsync+nxlog同步+采集应用日志并接入到GrayLog5.1
96 0
|
6月前
|
存储 Java 关系型数据库
亚马逊 EC2 服务器搭建 Linux 系统宝塔环境
亚马逊 EC2 服务器搭建 Linux 系统宝塔环境
|
6月前
|
监控 网络安全 开发工具
Linxu服务器文件双向同步-rsync+sersync
Linxu服务器文件双向同步-rsync+sersync
121 0
|
6月前
|
存储 网络协议 网络安全
【免费外国云服务器】亚马逊AWS创建EC2实例搭建个人服务器
【免费外国云服务器】亚马逊AWS创建EC2实例搭建个人服务器
220 0
|
存储 网络安全 定位技术
探秘亚马逊云科技海外服务器 | 解析跨境云计算的前沿技术与应用
海外服务器也称境外服务器。主要是指除中国大陆以外的其他国家和地区的服务器,海外服务器 其实是一个统称,包括了全球各地的服务器 例如:日本服务器,韩国服务器、美国服务器、德国服务器。
498 0
|
算法 安全 Ubuntu
Linux教程丨使用rsync在服务器中高效传输文件,断点续传快速上传下载数据
Linux教程丨使用rsync在服务器中高效传输文件,断点续传快速上传下载数据
|
存储 弹性计算 Ubuntu
AWS虚拟服务器EC2实战
AWS虚拟服务器EC2实战
282 0
|
5天前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
|
7天前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。