Rsync是一款开源的快速备份工具,可以在不同的主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,适用于异地备份,镜像服务器等应用。
--------为提高系统的安全性可以为备份建立专门用户----
rpm -q rsync
useradd rget
passwd rget
useradd rput
passwd rput
----调整被备份目录的恰当权限-----
chown -R rput:rput /var/www/html/
setfacl -R -m user:apache:rwx html/upload
getfacl html/upload/
setfacl -m default:user:apache:rwx html/upload
setfacl -R -b /var/www/html
setfacl -R -x user:apache /var/www/html/upload
-------新建并配置rsync程序使其可以工作------
vi /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
address = 192.168.80.33 监听地址
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.80.0/24 允许访问的客户机地址
[wwwroot]
path = /opt/test/
comment = Document Root of www1.benet.com
read only = no
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = back
secrets file = /etc/rsyncd_users.db
----建立虚拟用户配置文件并设置恰当的权限-----
vi /etc/rsyncd_users.db
back:abc123
chmod 600 /etc/rsyncd_users.db
----启动、关闭rsync程序---
rsync --daemon
netstat -anpt | grep rsync
killall -3 rsync
---使用xinetd管理rsync程序----
yum -y install xinetd
vi /etc/xinetd.d/rsync
service rsync
{
disable = no
----使用rsync备份时不需要交互----
export RSYNC_PASSWORD=abc123
---使用ssh备份时不需要交互---
ssh-keygen -t rsa 创建密钥对
ssh-copy-id root@192.168.80.33 将公钥分发给服务器
ssh root@192.168.80.33 无密码自动登录
----使用rsync下载、上传-----
rsync -avz --delete back@192.168.80.33::wwwroot /media //下载
rsync -rlvz --delete /media/ back@192.168.80.33::wwwroot //上传
-----使用SSH下载、上传-----
rsync -avz root@192.168.80.33:/tmp/ /opt
rsync -rlvz /opt/ root@192.168.80.33:/tmp/
-------配合inotify触发备份、调整内核参数----
vi /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
----编译安装inotify----
./configure
make && make install
-----测试监控效果------
inotifywait -mrq -e modify,create,move,delete /opt/test/
---通过角本完成触发备份任务-----
vi /opt/inotify_rsync.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /opt/test/"
RSYNC_CMD="rsync -azH --delete /opt/test/ root@192.168.80.33:/opt/back/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 5 ] ; then
$RSYNC_CMD
fi
done