标签:rsync + inotify rsync + ssh
知识点:
实战1: 备份/var/www/html 目录
实战2: 使用ssh密钥实现无交互备份
实战3: 配置rsync 服务器及需要备份的目录,不使用系统用户
实战4: rsync + inotify实现实时同步
简述
rsync (remote synchronize) 是一个远程数据同步工具,可通过网络快速同步多台主机间的文件。 基于 rsync算法
rsync的基本特点:
1,可以镜像保存整个目录树和文件系统;
2,较高的数据传输效率;
3,可以很容易做保持原来文件的属性、权限、时间、软硬符号链接等;
4,可以使用rcp, ssh,sftp等方式来传输文件;
5,支持匿名传输;
rsync 命令的工作模式:
1,shell模式,也称作本地模式;
2,远程shell模式,可以利用ssh协议承载其远程传输过程;
3,列表模式,仅列源中的内容,-nv式,可以利用ssh协议承载其远程传输过程;
3,列表模式,仅列源中的内容,-nv
4, 服务模式,此时rsync,此时rsync工作为守护进程,能接收客户端的数据同步请求
推: 一台主机负责把数据传给其它主机(服务器开销大,适合后端服务器比较少)
拉:所有主机定时去找一主机拉数据(可能会导致数据同步缓慢)
端口:tcp/873
模式: C/S
备份方式:
设计数据同步模式:
实验环境:
OS: RHEL6
服务端:xuegod63.cn IP:192.168.1.63
客户端:xuegod64.cn IP:192.168.1.64
安装rsync
方法1: # yum install rsync -y 方法2: # rpm -ivh /path/to/rsync-3.0.6-5.el6_0.1.x86_64.rpm
安装xinetd服务来管理rsync服务
# yum install xinetd -y 或者 # rpm -ivh /path/to/xinetd-version.rpm
xinetd管现rsycn服务,工作原理:
开启rsync服务
# vim /etc/xinetd.d/rsync # 把disable=yes 改成 disable=no # /etc/init.d/xinetd start # 启动 # netstat -natp | grep 873 # 查看监听端口873 tcp 0 0 :::873 :::* LISTEN 59038/xinetd
rsync命令基本用法:
格式:rsync [选项]... 源文件 目标文件 常用选项: -n: 同步测试,不执行真正的同步过程 -q: 静默模式 -c: checksum,开启校验功能 -a,--archive: (存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD -r,–recursive: 对子目录以递归模式处理 注意: rsync命令中,如果源路径是目录,且给复制路径时末尾有/,则会复制目录中的内容,而晨目录本身;如果末尾没有/,则会同步目录本身及目录中的所有文件;目标路径末尾是否有/无关紧要; -l,--links: 表示拷贝链接文件 -p , --perms: 表示保持文件原有权限 -t , --times: 表示保持文件原有时间 -g , --group: 表示保持文件原有属用户组 -o , --owner: 表示保持文件原有属主 -D , --devices: 表示块设备文件信息 -v: 显示同步过程的详细信息 -z , --compress: 表示压缩传输 -e ssh : 使用ssh作为传输承载 -H: 表示硬连接文件 -A: 保留ACL属性信息 -P: 显示传输进度 -u, --update: 仅仅进行更新,也就是跳过所有已经存在于目标位置,并且文件时间晚于要备份的文件。(不覆盖更新的文件) --port=PORT: 指定其他的rsync服务端口 873 --delete: 删除那些目标位置有而原始位置没有的文件 --password-file=FILE: 从FILE中得到密码 --bwlimit=KBPS: 限制I/O带宽,Kbytes /second --filter: “- 文件名”需要过滤的文件 --exclude= :需要过滤的文件 --stats: 显示如何执行压缩和传输
例如:把xuegod63.cn上的/etc/pam.d目录同步到xuegod64.cn上的/tmp下
# rsync -rpogtDl --stats -e ssh -P /etc/pam.d root@192.168.1.64:/tmp
实战1: 备份/var/www/html 目录
1,备份xuegod63的/var/www/html 目录到xuegod64的/web-back
2,创建用户rget1用于下载,读;创建用户rput1 用于上传,写
创建用户
[root@xuegod63 Desktop]# useradd rget1 [root@xuegod63 Desktop]# useradd rput1 [root@xuegod63 Desktop]# echo ‘123456‘ | passwd --stdin rget1 [root@xuegod63 Desktop]# echo ‘123456‘ | passwd --stdin rput1
设置权限rput1
[root@xuegod63 Desktop]# setfacl -R -muser:rput1:rwx /var/www/html/ #指定rput1用户可以对目录/var/www/html/拥有读写权限 [root@xuegod63 Desktop]# setfacl -R -mdefault:user:rput1:rwx /var/www/html/ #设置默认情况下rput1用户可以对/var/www/html/下,所有文件拥有可读写权限
设置rget1权限:
[root@xuegod63 ~]# setfacl -R -m user:rget1:rwx/var/www/html/ [root@xuegod63 ~]# setfacl -R -m default:rget1:rwx/var/www/html/
开始备份:
xuegod63: 创建用于测试的数据
[root@xuegod63 ~]# cp -r /boot/grub/ /var/www/html/ [root@xuegod63 html]# chmod744 /var/www/html/grub/grub.conf #修改一下权限
xegod64:同步数据
[root@xuegod64 ~]# mkdir /web-back/ [root@xuegod64 ~]# rsync -azP --delete rget1@192.168.1.63:/var/www/html/ /web-back/
xuegod64:
[root@xuegod64 ~]# rsync -azP --delete rget1@192.168.1.63:/var/www/html/ /web-bac rget1@192.168.1.63‘s password:(123456)
实战2: 使用ssh密钥实现无交互备份。做成脚本,将xuegod63上的数据,定期备份到xuegod64上。
1,在xuegod64上成生密钥
[root@xuegod64 ~]#ssh-keygen #输入命令后敲三次回车,成生密钥对
2,再把公钥复制到xuegod63上面
[root@xuegod64 ~]# ssh-copy-idrget1@192.168.1.63 rget1@192.168.1.63‘s password: Now try logging into the machine, with "ssh‘rget1@192.168.1.63‘", and check in: .ssh/authorized_keys to make sure we haven‘t added extra keys that youweren‘t expecting.
3,测试,不输密码直接登录和备份:
[root@xuegod64 ~]# ssh rget1@192.168.1.63 [rget1@xuegod63 ~]$ exit logout Connection to 192.168.1.63 closed.
[root@xuegod64 ~]# rm -rf /web-back/* [root@xuegod64 ~]# rsync -azP --deleterget1@192.168.1.63:/var/www/html/ /web-back
4,编写备份脚本:
[root@xuegod64 ~]# vim/root/rsync-ssh-get-wwwroot.sh #!/bin/bash rsync -az --deleterget1@192.168.1.63:/var/www/html/ /web-back/ #注在这里,就把P参数去掉了,因为是后期执行备份,看不进度。
5,测试脚本:
[root@xuegod64 ~]# chmod +x/root/rsync-ssh-get-wwwroot.sh [root@xuegod64 ~]# rm -rf /web-back/* [root@xuegod64 ~]# /root/rsync-ssh-get-wwwroot.sh [root@xuegod64 ~]# ls /web-back/grub/ device.map grub.conf minix_stage1_5 stage2 e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage
6,定期增量备份:
[root@xuegod64 ~]# crontab -e 01 3 * * * /root/rsync-ssh-get-wwwroot.sh &
7,备份完后,再在xuegod64上打包
[root@xuegod64 ~]# tar cvzf aaa.tar.gz /web-back/
实战3: 配置rsync 服务器及需要备份的目录,不使用系统用户进行备份。
1,需要自己创建自己的配置文件:/etc/rsyncd.conf
配置文件整体分两部分:
全局参数 :对于rsync服务器生效。如果模块参数和全局参数冲突,
针对冲突模块的参数生效
模块参数:定义rsync 输出的目录的参数。
2,创建备份帐户,最后把rsync 以daemon方式运行。
(1)创建配置文件:
[root@xuegod63 Desktop]# vim /etc/rsyncd.conf #这个文件不存在,需要自己创建 uid=nobody gid=nobody address = 192.168.1.63 port=873 hosts allow= 192.168.1.64 #hosts deny=0.0.0.0/32 use chroot=yes max connections=5 pid file=/var/run/rsyncd.pid lock file=/var/run/rsync.lock log file=/var/log/rsyncd.log motd file=/etc/rsyncd.motd [wwwroot] path=/var/www/html comment=rsync wwwroot of www.xuegod.cn read only=yes list=yes auth users=backuper secrets file=/etc/rsync.passwd
(2)此配置文件参数说明:
全局参数 uid=nobody # 运行进程的身份 gid=nobody # 运行进程的组 address = 192.168.1.63 # 监听IP地址 port=873 # 端口 hosts allow= 192.168.1.64 192.168.0.25 # 允许同步的客户端IP地址 单个IP地址,例如:192.167.0.1,多个IP或网段需要用空格隔开, 整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0 “*”则表示所有,默认是允许所有主机连接。 #hosts deny=0.0.0.0/32 use chroot=yes #锁定家目录。 rsync被黑了,黑客无法在rsync运行的家目录之外创建文件,该选项设置为yes。 max connections=5 # 最大链接数 pid file=/var/run/rsyncd.pid # pid文件。存放进程ID。自动生成 lock file=/var/run/rsync.lock # 指定支持max connections参数的锁文件 log file=/var/log/rsyncd.log # 日志 motd file=/etc/rsyncd.motd # 客户端登录后的弹出的信息,需要创建
模块参数: [wwwroot] # 共享模块名 path=/var/www/html # 供备份的路径 comment=rsync wwwroot of www.xuegod.cn # 描述, read only=yes # 以只读的方式 提供备份 list=yes # 允许查看模块信息 auth users=backuper # 指定备份的用户,和系统用户无关 secrets file=/etc/rsync.passwd # 指点存放用户和密码文件。 格式: 用户名:密码
(3)创建提示信息文件,写入以下内容
[root@xuegod63 ~]# grep motd /etc/rsyncd.conf motd file=/etc/rsyncd.motd [root@xuegod63 ~]# echo "welcome to backupserver" > /etc/rsyncd.motd
(4)创建密码文件,写入以下内容
[root@xuegod63 ~]# grep passwd /etc/rsyncd.conf secrets file=/etc/rsync.passwd [root@xuegod63 ~]# vim /etc/rsync.passwd [root@xuegod63 ~]# cat !$ cat /etc/rsync.passwd backuper:pwd123
(5)修改密码文件权限
[root@xuegod63 ~]# chmod 600/etc/rsync.passwd #设置rsyncd_users.db文件的权限为700或600,权限设置不对的话身份验证会失败 会弹以下出错信息,当然,输错密码后,也会弹这个信息: [root@xuegod64 ~]# rsync -avzbackuper@192.168.1.63::wwwroot /web-back/ welcome to backup server
Password: @ERROR: auth failed on module wwwroot rsync error: error starting client-server protocol(code 5) at main.c(1503) [receiver=3.0.6]
(6)启动服务:
[root@xuegod63 etc]# vim /etc/xinetd.d/rsync # default: off # description: The rsync server is a good additionto an ftp server, as it # allowscrc checksumming etc. service rsync { disable = no # 把yes 改为no flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } [root@xuegod63 etc]# /etc/init.d/xinetd restart # 启动服务
(7)测试备份:
语法:
rsync 选项 用户名@备份源服务器IP::共享模块名 目标目录
[root@xuegod64 ~]# rm -rf /web-back/grub/ [root@xuegod64 ~]# rsync -azPbackuper@192.168.1.63::wwwroot /web-back/ welcome to backup server Password: pwd123
实现无交互脚本,备份数据。
修改环境变量: RSYNC_PAASSWORD
(8) 实现无交互脚本,备份数据:
修改变量: RSYNC_PAASSWORD
[root@xuegod64 ~]# exportRSYNC_PASSWORD=pwd123 [root@xuegod64 ~]# rsync -avzbackuper@192.168.1.63::wwwroot /web-back/
应用场景:
多台服务器同步
脚本:
[root@xuegod64 ~]# vim backup.sh [root@xuegod64 ~]# cat !$ cat backup.sh #!/bin/bash export RSYNC_PASSWORD=pwd123 rsync -avz backuper@192.168.1.63::wwwroot/web-back/
[root@xuegod64 ~]# chmod +x backup.sh [root@xuegod64 ~]# rm -rf /web-back/* [root@xuegod64 ~]# ./backup.sh
创建计划任务:
[root@xuegod64 ~]# crontab -e 01 3 * * * /root/backup.sh&
添加防火墙规则:
[root@xuegod63 ~]# iptables -AINPUT -p tcp --dport 873 -j ACCEPT [root@xuegod63 ~]#/etc/init.d/iptables save iptables: Saving firewallrules to /etc/sysconfig/iptables:[ OK ]
rsync + inotify实现实时同步
Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。
下载地址:http://sourceforge.net/projects/inotify-tools/
软件包名: inotify-tools-3.13.tar
常见的开源软件下载网址:
SourceForge.net,又称SF.net,是开源软件开发者进行开发管理的集中式场所。
SourceForge 是全球最大开源软件开发平台和仓库,网站建立的宗旨,就是为开源软件提供一个存储、协作和发布的平台。SourceForge 上拥有大量非常优秀的开源软件,事实上,这些软件完全可以代替一些商业软件。
实战4: 把xuegod63.cn服务器上的/var/www/html目录时实同步到xuegod64.cn主机上的/web-back目录中
环境:
inotify-tools服务端:xuegod63.cn IP:192.168.1.63
客户端:xuegod64.cn IP:192.168.1.64
查看是否支持inotify,从kernel 2.6.13开始正式并入内核。
[root@xuegod63 ~]# uname -r 2.6.32-220.el6.x86_64 [root@xuegod63 ~]# ll /proc/sys/fs/inotify/ root@xuegod63 ~]# ll /proc/sys/fs/inotify/ total 0 -rw-r--r-- 1 root root 0 Apr 10 09:09max_queued_events -rw-r--r-- 1 root root 0 Apr 10 09:09max_user_instances -rw-r--r-- 1 root root 0 Apr 10 09:09 max_user_watches
注意: 在linux内核中,默认的inotify机制提供了三个调控参数:
max_queued_events #表示监控事件队列
max_user_instances #表示最多监控实例数
max_user_watches #表示每个实例最多监控文件数
查看具体参数值:
[root@xuegod63 ~]# cat /proc/sys/fs/inotify/max_queued_events 16384 [root@xuegod63 ~]# cat /proc/sys/fs/inotify/max_user_instances 128 [root@xuegod63 ~]# cat /proc/sys/fs/inotify/max_user_watches 8192
注:当要监控的目录、文件数量较多或者变化较频繁时,要加大这三个参数的值。
例如:可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为9000000(建议大于监控目标的总文件数)
[root@xuegod63 ~]# vim /etc/sysctl.conf # 以文件最后,添加以下内容 fs.inotify.max_queued_events= 32768 fs.inotify.max_user_instances= 1024 fs.inotify.max_user_watches= 90000000 [root@xuegod63 ~]#sysctl -p # 使修改后的sysctl.conf文件生效
查看是否修改成功:
[root@xuegod63 ~]#cat /proc/sys/fs/inotify/max_user_watches 90000000
安装inotify-tools-3.13.tar:
安装inotify-tools后,将拥有inotifywait、inotifywatch辅助工具程序,从而来监控、汇总文件系统改动情况。
[root@xuegod63 ~]# tar-zxvf inotify-tools-3.13.tar.gz [root@xuegod63 ~]# cdinotify-tools-3.13 [root@xuegod63inotify-tools-3.13]# ./configure [root@xuegod63inotify-tools-3.13]# make -j 4 # 使用4个CPU一起编译。 [root@xuegod63inotify-tools-3.13]# make install
测试:
使用inotifywait命令监控网站目录/var/www/html发生的变化。然后在另一个终端向/var/www/html目录下添加文件、移动文件,查看屏幕输出结果。
# inotifywait -h
常用参数:
-e 用来指定要监控哪些事件。 这些事件包括: create创建,move移动,delete删除,modify修改文件内容,attrib属性更改。 -m 表示持续监控 -r 表示递归整个目录 -q 表示简化输出信息。
[root@xuegod63 ~]#inotifywait -mrq -e create,move,delete,modify /var/www/html/
在另一个终端登录,在/var/www/html目录进行相关的操作,然后,回到原来的终端查看监控变化情况。
[root@xuegod63 ~]# echoaaa > /var/www/html/a.html [root@xuegod63 ~]#mkdir /var/www/html/test [root@xuegod63 ~]# cp/etc/passwd /var/www/html/test/ [root@xuegod63 ~]# rm-rf /var/www/html/test/passwd
查看变化:
[root@xuegod63 ~]#inotifywait -mrq -e create,move,delete,modify /var/www/html/ /var/www/html/ CREATEa.html /var/www/html/ MODIFYa.html /var/www/html/CREATE,ISDIR test /var/www/html/test/CREATE passwd /var/www/html/test/MODIFY passwd /var/www/html/test/DELETE passwd
使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。据此可以识别变动情况。
编写触发式同步脚本:
第一步,同步时不需要输入密码:
xuegod63发生变化后,直接将发生变化的数据同步到xuegod64,同步时不需要输入密码
[root@xuegod63 ~]#ssh-keygen [root@xuegod63 ~]#ssh-copy-id root@192.168.1.64 [root@xuegod63 ~]# ssh192.168.1.64 Last login: Wed Nov 1217:51:35 2014
第二步:编写触发式同步脚本
参考以下脚本:
[root@xuegod63~]# cat a.sh #!/bin/bash echo aaa bbb ccc | while read a b c do echo $a echo $b echo $c done
思路: 只要检测到变动或事件时,执行rsync上行同步操作即可。
[root@xuegod63 ~]#inotifywait -mrq -e create,move,delete,modify /var/www/html/ /var/www/html/ CREATE a.html [root@xuegod63~]# cat a.sh #!/bin/bash inotifywait-mrq -e create,move,delete,modify /var/www/html/ | while read a b c do rsync -azP --delete /var/www/html/root@192.168.1.64:/web-back done
优化此脚本:
[root@xuegod63~]# cat a.sh #!/bin/sh SRC=/var/www/html DST=root@192.168.1.64:/web-back inotifywait-mrq -e modify,delete,create,attrib ${SRC} | while read D E F do /usr/bin/rsync -ahqzt --delete$SRC $DST done [root@xuegod63~]# cp /root/a.sh /opt/inotify_rsync.sh [root@xuegod63~]# echo ‘/opt/inotify_rsync.sh &‘ >> /etc/rc.local
再次优化:
注意,当更新较频繁时,应避免并发执行rsync备份(当rsync进程已经存在,则忽略本次同步,或根据rsync进程数量来决定是否同步)
[root@xuegod63 ~]# vim/opt/inotify_rsync.sh #!/bin/sh SRC=/var/www/html DST=root@192.168.1.64:/web-back inotifywait -mrq -emodify,delete,create,attrib ${SRC} | while read D E F do a=`pgrep rsync | wc -l` if [ $a -le 3 ]; then /usr/bin/rsync -ahqzt --delete$SRC $DST fi done
注:进程数保留3个就可以了。
本文出自 “学神IT-Linux讲师-MK” 博客,请务必保留此出处http://xuegod.blog.51cto.com/9708186/1633669
标签:rsync + inotify rsync + ssh
原文地址:http://xuegod.blog.51cto.com/9708186/1633669