Rsync使用的Rsync算法来使本地和远程主机的文件达到同步,这个算法只传送两个文件的不同部分,从而实现增量备份
特点:
能同步整个目录、树和文件系统
有选择性的保持符号链接、硬连接、文件属主、权限、设备以及时间等
能用rsh、ssh或端口作为传输端口,支持匿名同步
安装:
yum install -y rsync
rsync命令参数:
-v表示verbose详细显示
-z表示压缩
-r表示recursive递归
-t表示保持原文件创建时间
-o表示保持原文件属主
-p表示保持原文件的参数
-g表示保持原文件的所属组
-a存档模式
-P表示代替-partial和-progress两者的选项功能
-e ssh建立起加密的连接。
--progress是指显示出详细的进度情况
--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。
[email protected]::share1 user123是server端指定认证用户,::share1是模块名,也就是在/etc/rsyncd.conf中自定义的名称。
--exclude="*.sh" 不包含某些文件
基于SSH的同步源
从远程服务器备份到本机
rsync -avz [email protected]:/var/www/html/* /backup/ssh/
从本机上传到远程服务器
rsync -avz /backup/ssh/* [email protected]:/var/www/html/
基于rsync的同步源
vim /etc/rsyncd.conf
address=192.168.200.102 #监听地址
port=873 #监听端口
use chroot=yes #是否锁定path目录
uid=nobody
gid=nobody
log file=/var/log/rsyncd.log #日志位置
hosts allow=192.168.200.0/255.255.255.0
hosts deny=0.0.0.0/0.0.0.0
[backup]
comment=backup_server #说明
path=/var/www/html #共享目录
read only=false #权限为读写,true为只读
list=false #不允许列出文件
dont compress=*.gz *.bz2 *.zip #传输时那些文件不压缩
auth users=user123 #虚拟用户用户名
secrets file=/etc/rsyncd_users.db #虚拟用户密码配置文件位置
vim /etc/rsyncd_users.db
user123:1234
设置密码文件权限为600(必须,否则提示认证失败)
chmod 600 /etc/rsyncd_users.db
设置目录权限
setfacl -m user:nobody:rwx /var/www/html/
启动rsync
rsync --daemon
centos7启动
systemctl start rsyncd
客户端测试
从远程服务器备份到本机
rsync -avz [email protected]::backup /backup/rsync/
从本机上传到远程服务器
rsync -avz /backup/rsync/* [email protected]::backup
rsync -avz /backup/rsync/* rsync://[email protected]/backup#与上述命令结果相同
免密码验证
1. 可以通过ssh密钥登陆实现
2.通过变量RSYNC_PASSWORD实现自动登陆
export RSYNC_PASSWORD=1234
3. 用--password-file=/password/path/file指定密码文件(权限要为700)
实时同步工具:inotify(需要备份的服务器安装)
https://sourceforge.net/projects/inotify-tools/
tar -xzvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13/
./configure
make && make install
vim rsync.sh
#!/bin/bash
a="/usr/local/bin/inotifywait -mrq -e create /var/www/html/"
b="/usr/bin/rsync -avz /var/www/html/* [email protected]:/root"
$a | while read directory event file
do
$b
done
chmod 750 rsync.sh
./rsync.sh &
export RSYNC_PASSWORD=1234 #实现免密码验证
cd /var/www/html/
[[email protected] html]# touch 123
[[email protected] html]# sending incremental file list
123
sent 102 bytes received 31 bytes 266.00 bytes/sec
total size is 0 speedup is 0.00
inotify+unsion双向实时同步
环境配置:
两台机器能通过密钥对互相访问
http://liang-yao.cnblogs.com/p/8448224.html
2. 安装unison的编译工具ocaml
wget https://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.1.tar.gz
tar xzvf ocaml-3.10.1.tar.gz
cd ocaml-3.10.1/
./configure
make world opt
make install
3. 安装unison
wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.32.52/unison-2.32.52.tar.gz
tar xvf unison-2.32.52.tar.gz
cd unison-2.32.52
make UISTYLE=text THREADS=true STATIC=true
#当前工作模式:文本 多进程工作模式
cp unison /usr/local/bin
4. 安装inotify
https://sourceforge.net/projects/inotify-tools/
tar -xzvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13/
./configure
make && make install
server2和server1步骤相同
server1创建server1目录
mkdir /server1
server2创建server2目录
mkdir /server2
5. 脚本:vim 3.sh
#!/bin/bash
#server1和server2的netip和localfile、netfile不同
netip=192.168.200.101
localfile=/server2
netfile=/server1
a="/usr/local/bin/inotifywait -mrq -e create,delete,modify $localfile"
b="/usr/local/bin/unison -batch $localfile/ ssh://$netip/$netfile"
$a | while read directory event file
do
$b
done
chmod +x 3.sh
./3.sh & #把脚本放入后台执行,查看效果
!!!主机名不能相同