rsync数据镜像同步工具

Posted on Posted in linux
Tips: 本文创建于2015年11月2日,已超过 2 年,内容或图片可能已经失效!

数据同步 rsync

1、shell模式,本地模式

[root@localhost /]# rsync -av tongbu001 /tongbu002  
sending incremental file list  
tongbu001/  
tongbu001/1  
tongbu001/2  
tongbu001/3  
tongbu001/4  
tongbu001/5  
tongbu001/6  
  
sent 326 bytes  received 130 bytes  912.00 bytes/sec  
total size is 0  speedup is 0.00  
  
  
[root@localhost /]# ls tongbu002/  
tongbu001  
  
#两种方法有差异,就差了一个 / ,差好多  
  
[root@localhost /]# rsync -av tongbu001/ tongbu002/  
sending incremental file list  
./  
1  
2  
3  
4  
5  
6  
  
sent 303 bytes  received 129 bytes  864.00 bytes/sec  
total size is 0  speedup is 0.00  
[root@localhost /]# ls tongbu002/  
1  2  3  4  5  6  

2、远程shell模式

[root@localhost /]# rsync -av tongbu001/ root@10.0.0.153:/tongbu001/  
The authenticity of host '10.0.0.153 (10.0.0.153)' can't be established.  
RSA key fingerprint is 4b:08:ea:0a:cc:93:11:05:7c:ae:22:d3:81:3f:1a:f2.  
Are you sure you want to continue connecting (yes/no)? yes  
Warning: Permanently added '10.0.0.153' (RSA) to the list of known hosts.  
root@10.0.0.153's password:   
sending incremental file list  
./  
1  
2  
3  
4  
5  
6  
  
sent 303 bytes  received 129 bytes  78.55 bytes/sec  
total size is 0  speedup is 0.00

ansible synchronize 模块 rsync 提取

  • --delay-updates 将正在更新的文件先保存到一个临时目录(默认为 “.~tmp~”),待传输完毕再更新目标文件
  • --compress 启用压缩
  • --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性
  • --rsh 指定替代 rsh 的 shell 程序
  • --rsync-path 指定远程服务器上的 rsync 命令所在路径
  • -F 没看懂解释
# 把 /home/liuhonghe/tmp 文件夹 拷贝到远程 /tmp/下面
/bin/rsync --delay-updates -F --compress --archive --rsh 'ssh  -S none -o StrictHostKeyChecking=no -o Port=22' --rsync-path="sudo rsync"  "/home/liuhonghe/tmp" "user@10.13.0.8:/tmp/"

3、查询模式

以root用户身份查看远程主机的目录

[root@localhsot /]# rsync -a root@10.0.0.153:/tongbu001/  
root@10.0.0.153's password:   
drwxr-xr-x        4096 2015/10/28 00:22:11 .  
-rw-r--r--           0 2015/10/28 00:22:11 1  
-rw-r--r--           0 2015/10/28 00:22:11 2  
-rw-r--r--           0 2015/10/28 00:22:11 3  
-rw-r--r--           0 2015/10/28 00:22:11 4  
-rw-r--r--           0 2015/10/28 00:22:11 5  
-rw-r--r--           0 2015/10/28 00:22:11 6  

查看本地目录

[root@localhost /]# rsync -a /tongbu001/  
drwxr-xr-x        4096 2015/10/28 00:22:11 .  
-rw-r--r--           0 2015/10/28 00:22:11 1  
-rw-r--r--           0 2015/10/28 00:22:11 2  
-rw-r--r--           0 2015/10/28 00:22:11 3  
-rw-r--r--           0 2015/10/28 00:22:11 4  
-rw-r--r--           0 2015/10/28 00:22:11 5  
-rw-r--r--           0 2015/10/28 00:22:11 6  

4、服务器模式(rsync服务器)

服务器A

[root@localhost /]# echo "backup:password" > /etc/server.pass  
[root@localhost /]# chmod 600 /etc/server.pass   
[root@localhost /]# cat /etc/rsyncd.conf   
uid = nobody    #制定当该模块传输文件时守护进程应该具有的用户ID  
gid = nobody    #制定当该模块传输文件时守护进程应该具有的用户组ID  
use chroot = no  
max connections = 10    #最大并发连接数量  
strict modes = yes      #检查口令文件的权限,如果为yes,则密码文件的权限必须为root  
port = 873  
pid file = /var/run/rsyncd.pid  
lock file = /var/run/rsync.lock  
log file = /var/log/rsyncd.log  
  
[tonbu001]  #定义一个模块的开始,tongbu001就是对应的模块名称  
path = /tongbu  #制定需要备份的文件或目录  
comment = tongbu file     
ignore errors   #忽略一些无关的I/O错误  
read only = no  #设置为no表示客户端可上传文件,yes为不能上传  
write only = no #设置为no表示客户端可下载文件,yes为不能下载  
hosts allow = *  
hosts deny = 192.168.12.131  
list = false    #设定当客户请求可以使用的模块列表时,该模块是否被列出。默认值是true  
uid = root  
gid = root  
auth users = backup  
secrets file = /etc/server.pass #制定用户名和密码  
  
#在A服务器上启动守护进程  
[root@localhost /]# /usr/bin/rsync --daemon   
[root@localhost /]# ps -ef | grep rsync  
root      3263     1  0 01:32 ?        00:00:00 /usr/bin/rsync --daemon  
root      3265  1612  0 01:33 pts/1    00:00:00 grep rsync  

B服务器

[root@localhost ~]# echo "password" > /etc/server.pass  
[root@localhost ~]# chmod 600 /etc/server.pass  
[root@localhost /]# /usr/bin/rsync -vzrtopg --delete --progress --exclude "*access" --exclude "debug*" backup@192.168.1.143::tongbu /tongbu --password-file=/etc/server.pass  

命令解释

  • -v : --verbose 详细模式输出
  • -z : --compress 在传输时对备份的文件进行压缩处理
  • -r : --recursive 对子目录以递归模式处理
  • -t : --times 用来保持文件时间信息
  • -o : --owner 保持文件的属主信息
  • -p : --perms 用来保持文件的权限
  • -g : --group 保持文件的组信息
  • --delete : 以rsync服务器的信息为基准同步
  • --progress : 显示数据镜像同步的过程
  • --exclude : 排除不需要的传输文本类型

5、rsync+inotify 实时同步

inotify主页

查看是否支持inotify

[root@localhost /]# ll /proc/sys/fs/inotify/  
total 0  
-rw-r--r-- 1 root root 0 Oct 27 22:52 max_queued_events  
-rw-r--r-- 1 root root 0 Oct 27 22:52 max_user_instances  
-rw-r--r-- 1 root root 0 Oct 27 22:52 max_user_watches  

有上面3个文件,表示系统默认支持inotify

安装

[root@localhost src]# tar zxf inotify-tools-3.14.tar.gz   
[root@localhost src]# cd inotify-tools-3.14  
[root@localhost inotify-tools-3.14]# ./configure && make && make install  
[root@local-centos01 inotify-tools-3.14]# ll /usr/local/bin/inotifywa*  
-rwxr-xr-x. 1 root root 44287 Oct 27 23:08 /usr/local/bin/inotifywait  
-rwxr-xr-x. 1 root root 41377 Oct 27 23:08 /usr/local/bin/inotifywatch  
  
inotifywait # 用户等待文件或文件集上的一个特定事件,可以监控任何文件和目录设置,并且可以递归监控整个目录树  
inotifywatch # 手机监控文件系统统计数据,包括每个inotify事件发生多少次信息  

inotify相关参数

/proc/sys/fs/inotify/max_queued_events : 表示调用inotify_init 时分配到inotify instance中可排队的event数的最大值,超出这个值得事件被丢弃,但会触发IN_Q_OVERFLOW事件  
/proc/sys/fs/inotify/max_user_instances : 表示每一个real user ID可创建的inotify instatnces数量的上限  
/proc/sys/fs/inotify/max_user_watches : 表示每个inotify实例相关联的watches的上限,也就是每个inotify实例可监控的最大目录数量。如果监控的文件书目录巨大,需要根据情况适当增加此值的大小。例如  
echo "30000000" > /proc/sys/fs/inotify/max_user_watches  

inotifywait 相关参数

  • -m : --monitor 表示始终保持事件监听状态
  • -r : --recursive 表示递归查询目录
  • -q : --quiet 表示打印出监控事件
  • -e : --event 可以指定要监控的事件,常见的有modify、delete

web1

[root@localhost /]# vim /etc/rsyncd.conf  
uid = nobody  
gid = nobody  
use chroot = no  
max connections = 10  
strict modes = yes  
pid file = /var/run/rsyncd.pid  
lock file = /var/run/rsync.lock  
log file = /var/log/rsyncd.log  
  
[web1]  
path = /web1/wwwroot/  
comment = web1 file  
ignore errors  
read only = no  
write only = no  
hosts allow = 192.168.1.143  
hosts deny = *  
list = false  
uid = root  
gid = root  
auth users = web1user  
secrets file = /etc/web1.pass  

server 端

[root@localhost ~]# ./inotify.sh &  
[root@localhost ~]# cat inotify.sh   
#!/bin/sh  
  
# get the current path  
CURPATH=`pwd`  
  
src=/web/wwwroot/  
host1=192.168.1.153  
dst1=web1  
user1=web1user  
  
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' \  
-e close_write,modify,delete,create,attrib $src | while read files; do  
  
    /usr/bin/rsync -vzrtog --delete --progress --password-file=/etc/server.pass $src $user1@$host1::$dst1  
    echo "${files} was rsynced" >> /tmp/rsync.log 2>&1  
done  
» 转载请注明来源:呢喃 » rsync数据镜像同步工具

Leave a Reply

Your email address will not be published. Required fields are marked *

nineteen − 19 =