返回列表 发帖

CentOS8_rsync远程同步目录树

rsync是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份、保持链接和权限,且采用优化的同步算法,在传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。

在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为备份源。在下行同步(下载)中,备份源负责提供文档的原始位置,发起端应对该位置具应有读取权限;在上行同步(上传)中,备份源负责提供文档的目标位置,发起端应对该位置应具有写入权限。

在Linux系统中,正常创建的目录权限为755,文件权限为644

要求:
Web1:192.168.168.154    Apache存放网页文件的文件夹:/var/www/html/
Web2:192.168.168.155    备份文件夹:/www/

让Web2可以自动同步Web1(即让Web1自动上传数据到Web2)





Web2:(进行同步的服务器都必须要安装rsync服务)
dnf -y install rsync

查看rsync的版本:
rsync --version
图片1.png
2020-5-8 13:00



允许别的服务器通过用户root上传数据到本服务器:(Web1会通过此用户远程进行上传数据)
echo "UseDNS no" >> /etc/ssh/sshd_config
echo "AllowUsers root" >> /etc/ssh/sshd_config
systemctl restart sshd

创建备份文件夹:
mkdir -p /www/
chmod 777 /www


## 设置ACL:
setfacl -R -m user:root:rwx /www/

## 清除ACL:(看情况用)
setfacl -R -b /www/

## 查看ACL:
[root@python ~]# getfacl /www/
getfacl: Removing leading '/' from absolute path names
# file: www/
# owner: root
# group: root
user::rwx
user:root:rwx
group::r-x
mask::rwx
other::r-x





Web1:(进行同步的服务器都必须要安装rsync服务)
dnf -y install rsync


Web1上传/var/www/html/里面所有的数据到到Web2的/www/里面
### 上行同步:(这时需要输入root@192.168.168.155的密码)
[root@centos8 ~]# rsync -ravzH --delete /var/www/html/ root@192.168.168.155:/www/
root@192.168.168.155's password:
图片2.png
2020-5-8 13:01

笺注:这是一种完全的覆盖,还会删除Web2原来有、但Web1没有的东西。



Web2自动同步的目录:
图片3.png
2020-5-8 13:02







Web1建密钥对:(免去密码验证)
ssh-keygen -t rsa
## 接着连续按3次回车键即可
图片4.png
2020-5-8 13:02

注释:这是使用用户root创建密钥对。


Web1将公钥分发给root@192.168.168.155
ssh-copy-id root@192.168.168.155
图片5.png
2020-5-8 13:02



至此,Web1可以通过root@192.168.168.155无密码登录Web2了:
ssh root@192.168.168.155
图片6.png
2020-5-8 13:03



Web1从Web2退出:
图片7.png
2020-5-8 13:03



Web1上行同步:(上传,不需要密码验证了)
rsync -ravzH --delete /var/www/html/ root@192.168.168.155:/www/
图片8.png
2020-5-8 13:03














######

配置rsync+inotify实时同步:(在Web1上安装)
使用rsync工具和inotify机制相结合,可以实现触发式备份(实时同步)——只要原始位置的文档发生变化,则立即启用增量备份操作,否则处于静默等待状态。这样一来,就避免了按固定周期备份时存在的延迟性、周期过密等问题。

下载inotify:  https://pan.baidu.com/s/1p1DTPF-V0T0KpU9sf2F1VA

安装inotify:

yum -y install gcc-c++
tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure && make && make install

echo "fs.inotify.max_queued_events = 16384" >>/etc/sysctl.conf
echo "fs.inotify.max_user_instances = 1024" >>/etc/sysctl.conf
echo "fs.inotify.max_user_watches = 1048576" >>/etc/sysctl.conf

sysctl -p


### 编写触发式同步脚本:
[root@centos8 ~]# vi /usr/local/sbin/inotify_rsync.sh
#!/bin/bash
### 监控本地的 /var/www/html/
inotify_cmd='/usr/local/bin/inotifywait -mrq -e modify,create,move,delete,attrib /var/www/html/'

### 上传同步
rsync_cmd='/usr/bin/rsync -ravzH --delete /var/www/html/ root@192.168.168.155:/www/'

$inotify_cmd | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ]
then
$rsync_cmd
fi
done



[root@centos8 ~]# chmod 777 /usr/local/sbin/inotify_rsync.sh


在后台运行脚本:(使用这种方法可以保证终端退出后,脚本还继续运行)
nohup bash /usr/local/sbin/inotify_rsync.sh &
图片9.png
2020-5-8 13:04

笺注:试验过,把脚本写在/etc/rc.local,会使系统重启后,无法进入系统。


查看脚本的进程号:
ps aux | grep "rsync.sh"
图片10.png
2020-5-8 13:05





相关文章:
rsync远程同步目录树

返回列表