本例:
192.168.80.81 rsync同步源(被备份)备份源服务器
192.168.80.82 rsync客户机(目标主机)发起端
1.备份源服务器80.81配置:
yum install -y rsync //7.4系统默认已安装,不需要额外安装
vi /etc/rsyncd.conf //以下配置rsync,原配置文件全删除,添加以下
uid = nobody //rsync默认使用nobody用户
gid = nobody
use chroot = yes //禁锢在源目录/var/www/html里(查看下面path配置)
address = 192.168.80.81 //自己的地址
port 873 //默认端口
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.80.0/24 //允许的客户机网段
[wwwroot] //共享模块名称
path = /var/www/html //源目录实际路径
comment = Document Root of www.aa.com //描述备注信息
read only = yes //只读 no 可读可写则是yes
dont compress = .gz .bz2 .tgz .zip .rar .z //排除的压缩类型
auth users = backuper //授权登陆rsync的账户(不是系统用户)
secrets file = /etc/rsyncd_users.db //存放账户的文件
根据上面配置文件里建立虚拟用户配置文件并设置恰当的权限
vi /etc/rsyncd_users.db
backuper:abc123
chmod 600 /etc/rsyncd_users.db
启动、关闭rsync程序---
rsync --daemon
netstat -anpt | grep rsync
killall -3 rsync
2.192.168.80.82客户机(发起端)的同步测试:
这里分为两种模式:ssh源和rsync源
①客户机使用rsync源同步:
下行同步:(本机和80.81保持一致)
rsync -avz backuper@192.168.80.81::wwwroot /aaa
//把同步源服务器80.81分享的目录wwwroot下载到本机/aaa 提示输入backuper密码abc123
还可逆向(反向,上行)同步:(80.81和本机保持一致)
rsync -avz /aaa backuper@192.168.80.81::wwwroot
//把本机文件/aaa同步到同步源服务器80.81wwwroot目录下
(需要注意:在80.81配置里开启read only=no ,还有系统中wwwroot本身的写入权限:chown -R nobody /var/www/html)
把下面的命令加到/etc/profile里可以不交互
export RSYNC_PASSWORD=abc123
下面举几个备份同步的例子:
A例:
80.81里有a b c d e
80.82里空 执行rsync -avz backuper@192.168.80.81::wwwroot /aaa后
80.82里有a b c d e
B例:
80.81里有a b c d e f
80.82里有a b c d e g
执行rsync -avz backuper@192.168.80.81::wwwroot /aaa
80.82里有a b c d e f g (把本地没有的f同步过来了)
执行rsync -avz --delete backuper@192.168.80.81::wwwroot /aaa
80.82里有a b c d e f (delete参数是删除本地有但同步源没有的文件g)
这条命令就是将同步源和客户机文件完全保持一致了
rsync -avz --delete A B
将B完全同步和A一致 不管正向还是反向同步 和A一致
rsync -avz A B
把A同步到B里,A里有的全部同步到B
②客户机使用ssh源同步:
原理基本和rsync一致,但使用ssh源,同步源服务器80.81就不要配置配置文件了,直接启动rsync服务即可
下行同步:rsync -avz root@192.168.80.81:/bin/ /aaa
//把同步源服务器80.81分享的目录下载到本地/aaa,全部使用绝对路径,和scp命令相似
(注意使用的是root用户)
逆向同步:rsync -avz /aaa/ root@192.168.80.81:/opt/
//把本机文件/aaa同步到同步源服务器80.81/opt/目录下
(需要在80.81系统中/opt/开启写入权限)
如果避免交互的话需要配置公钥验证:
ssh-keygen -t rsa 本机80.82生成密钥
ssh-copy-id root@192.168.80.81 把私钥传给80.81服务器
举例同上rsync源
两种不同源的格式比较:
rsync -avz root@192.168.80.81:/bin/ /aaa ssh源
rsync -avz backuper@192.168.80.81::wwwroot /aaa rsync源
3.如何实现源80.81上面分享的文件wwwroot(/var/www/html/)里文件一有变动就实时同步到本机80.82的/aaa呢?
使用触发备份可解决这一需求:
在源80.81上:
①调整内核参数:
vi /etc/sysctl.d/te.conf //自己创建的te.conf文件
fs.inotify.max_queued_events = 16384 //监控队列大小
fs.inotify.max_user_instances = 1024 //最多监控实例数
fs.inotify.max_user_watches = 1048576 //每个实例最多监控文件数
sysctl -p
②编译安装inotify
tar xf inotify-tools-3.14 //需要自行下载
cd /opt/inotify-tools-3.14/
./configure
make && make install
③测试监控效果
inotifywait -mrq -e modify,create,move,delete /var/www/html/
//被监控目录/var/www/html/ 出现修改创建重命名删除等动作 会有输出显示
(这条命令是前台运行的,需要复制putty会话,来测试查看)
m(持续监控)r(递规整个目录)q(简化输入信息) -e(指定监控的事件)
④可通过脚本来自动触发备份
vi a.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /opt/"
RSYNC_CMD="rsync -azH --delete backuper@192.168.80.81::wwwroot /aaa/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 5 ] ; then
$RSYNC_CMD
fi
done
sh a.sh & //默认前台运行,需要挂在后台运行
⑤测试触发备份:
在80.81的/var/www/html里创建或者删除文件,
到80.82上的/aaa/里查看相应变化,会实时同步
原文地址:http://blog.51cto.com/13469709/2092117