rsync 文件同步

阿里云负载均衡的监听配置.例如这里选择HTTP协议 ,前端端口80 ,后端端口10101 ,实质上得到的效果就是访问阿里云的负载均衡IP : 80 ,得到的结果来自后端服务器的10101端口 .
其实简单说就是阿里云在nginx建立了一个虚拟主机 ,把这个虚拟主机80端口的所有请求都根据一定的算法转发到了后端服务器的10101端口 . 处理完成之后返回回来 .

阿里云负载均衡的原理大概就是如此 ,配置也很简单 ,还有相应的文档可以查阅 ,就不再详细说了.

rsync

rsync 是linux中的一个文件同步工具 ,可以从远端同步文件到本地 ,并且已经被linux发行版仓库收录 ,也在已经内置在了大部分的linux 发行版中 . 其易于部署且方便使用 ,基本没有使用任何成本 ,同步文件与git一样都是增量而非全量同步 ,而

1
yum -y install rsync

创建配置文件 和 密码认证文件

1
2
3
touch /etc/rsyncd.conf         # 创建rsync服务器的配置文件。
touch /etc/rsyncd.secrets # 创建用户密码文件。
chmod 600 /etc/rsyncd.secrets # 将权限设为600, 否则无法备份成功!

修改配置文件

该文件修改即时生效 ,无需重启rsync

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
; /etc/rsync.conf 
uid = root # 运行rsync的用户ID或用户名
gid = root # 运行rsync的组ID或组名
use chroot = yes #是否在客户端链接时chroot进共享目录 ,
#可保证客户端链接时目录和ftp一样 / 是ftp指定的目录
hosts allow = 60.205.170.56, #允许访问的IP ,多个IP逗号链接
hosts deny = * # 不允许访问的IP ,规则与上一行一致 ,且不会覆盖上一行
max connections = 4 # 最大的客户端连接数
pid file = /var/run/rsyncd.pid # 声明Pid文件位置
exclude = lost+found/ # 忽略哪那些文件夹
transfer logging = yes # 记录移动日志
timeout = 900 # 链接超时
ignore nonreadable = yes # 忽略IO错误
dont compress = *.gz *.tgz # 哪些文件压缩传输 ,多个用空格分割

[api_a8aa] # 共享模块名
path = /path # 共享路径 ,即chroot的/
comment = api project # 注释
[origin_api]
path = /path
auth users = root # 可以访问的用户 ,必须时
comment = origin 90

启动rsync

1
$ rsync --daemon --config=/etc/rsyncd.conf

rsync服务器端到此时就已经搭建完毕了 .

客户端配置 :

其实主要的工作在服务端都已经做完了 ,客户端就是测试同步 ,配置计划同步 ,测试计划同步

仅仅列出服务器提供的资源

1
2
3
4
5
rsync  --list-only  root@host::module

# 把服务端的资源同步到本地的某个位置
rsync -avzP --delete root@192.168.0.100::home /var/www/statics
# 如果有密码文件 ,则需要加上 --password-file=rsyncd.secrets

rsync参数说明 :
-r 递归
-l 链接文件,拷贝链接文件;
-p 表示保持文件原有权限;
-t 保持文件原有时间;
-g 保持文件原有用户组;
-o 保持文件原有属主;
-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和 -P有点关系
-e ssh的参数建立起加密的连接。
-u 只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
–progress 是指显示出详细的进度情况
–delete 如果服务器端删除了文件,客户端也相应删除,保持真正一致
–password-file=/password/path/file指定密码文件,使脚本无需交互式输入密码,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

同步脚本

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

if [ ! -f "/etc/pass" ]
then
touch /etc/pass
echo pass > /etc/pass
fi

/usr/bin/rsync -avzP --password-file=/path root@47.94.56.90::origin_api /path

echo $(date) >> /opt/log

crontab

linux自带的计划任务工具 , 具体的使用方法在我的另一篇文章里有详解 ,其具有相当强大的功能 ,可以实现 分 时 天 周 月 的计划任务 ,并且任务可以高度自定义 ,实在是计划任务中的不二之选.

安装crontab

yum -y install crontab

1
2
3
4

```shell
crontab -e
*/15 * * * * /opt/sync.sh # 这里配置每隔15分钟同步一次

启动crontab的服务

1
service crond start

监控计划同步

1
tailf /opt/log

最后可以看到 ,每隔15分钟指定目录的文件就会发生变化 ,同时log增加一行 ,说明计划任务配置与文件同步是成功的

参考资料 : https://my.oschina.net/congqian/blog/137847