rsync!
1. rsync
可以镜像保存整个目录树和文件系统
可以很容易做到保持原来文件的权限、时间、软硬链接等等
无须特殊权限即可安装
快速:第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件。rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽
安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接
支持匿名传输,以方便进行网站镜像
2. inotify
Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
在前面有讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。
3. 配置服务!!
3.1 配置服务!!!关闭防火墙,安装rsync!!
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux
[root@localhost ~]# yum -y install rsync
上次元数据过期检查:22:12:09 前,执行于 2021年06月06日 星期日 20时55分39秒。
软件包 rsync-3.1.3-11.el8.x86_64 已安装。
依赖关系解决。
==================================================================================
软件包 架构 版本 仓库 大小
==================================================================================
升级:
rsync x86_64 3.1.3-12.el8 baseos 405 k
事务概要
==================================================================================
升级 1 软件包
总下载:405 k
下载软件包:
rsync-3.1.3-12.el8.x86_64.rpm 481 kB/s | 405 kB 00:00
----------------------------------------------------------------------------------
总计 314 kB/s | 405 kB 00:01
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
升级 : rsync-3.1.3-12.el8.x86_64 1/2
清理 : rsync-3.1.3-11.el8.x86_64 2/2
运行脚本: rsync-3.1.3-11.el8.x86_64 2/2
验证 : rsync-3.1.3-12.el8.x86_64 1/2
验证 : rsync-3.1.3-11.el8.x86_64 2/2
Installed products updated.
已升级:
rsync-3.1.3-12.el8.x86_64
完毕!
[root@localhost ~]#
3.2 创建文件夹和用户!!!
[root@localhost ~]# useradd liuzezheng
[root@localhost ~]# id liuzezheng
uid=1001(liuzezheng) gid=1001(liuzezheng) 组=1001(liuzezheng)
[root@localhost ~]# cd /home
[root@localhost home]# chmod 777 liuzezheng/
[root@localhost home]# ll
总用量 0
drwxrwxrwx. 3 liuzezheng liuzezheng 78 6月 7 19:11 liuzezheng
3.3 设置/etc/rsync.com配置文件!
[root@localhost ~]# cd /etc
[root@localhost etc]# touch rsyncd.conf
[root@localhost etc]# vim rsyncd.conf
[root@localhost etc]# cat rsyncd.conf
log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.pass
[runtime]
path = /home/liuzezheng
uid = root
gid = root
port = 873
ignore errors
use chroot = no
read only = no
list = no
max connections = 200
timeout = 600
auth users = admin
hosts allow = 192.168.170.128
3.4 创建用户证文并设置权限!!
[root@localhost ~]# echo 'admin:123456' > /etc/rsync.pass
[root@localhost ~]# chmod 600 /etc/rsync*
[root@localhost ~]# ll /etc/rsync*
-rw-------. 1 root root 332 6月 7 19:21 /etc/rsyncd.conf
-rw-------. 1 root root 13 6月 7 19:23 /etc/rsync.pass
3.5 编写.service文件!!!
[root@localhost ~]# echo 'OPTIONS=""' > /etc/sysconfig/rsyncd
[root@localhost ~]# touch /lib/systemd/system/rsyncd.service
[root@localhost ~]# vim /lib/systemd/system/rsyncd.service
[root@localhost ~]# cat /lib/systemd/system/rsyncd.service
[Unit]
Description=fast remote file copy program daemon
[Service]
User=root
Group=root
EnvironmentFile=/etc/sysconfig/rsyncd
ExecStart=/usr/bin/rsync --daemon --config=/etc/rsyncd.conf --no-detach
ExecReload=/bin/kill -HUP
KillMode=process
Restart=on-failure
RestartSec=30s
[Install]
WantedBy=multi-user.target
3.6 设置开启自启!!
[root@localhost ~]# systemctl start rsyncd.service
[root@localhost ~]# systemctl enable rsyncd.service
Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service.
[root@localhost ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset>
Active: active (running) since Mon 2021-06-07 19:29:24 EDT; 33s ago
Main PID: 88213 (rsync)
Tasks: 1 (limit: 11070)
Memory: 324.0K
CGroup: /system.slice/rsyncd.service
└─88213 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf --no-detach
6月 07 19:29:24 localhost.localdomain systemd[1]: Started fast remote file copy p>
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 5 0.0.0.0:873 0.0.0.0:*
LISTEN 0 128 0.0.0.0:111 0.0.0.0:*
LISTEN 0 32 192.168.122.1:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
LISTEN 0 5 [::]:873 [::]:*
LISTEN 0 128 [::]:111 [::]:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 5
4 源服务器!!!
4.1 关闭防火墙,安装rsync和inotify-tools!!!
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux[root@localhost ~]# yum -y install epel-release rsync
上次元数据过期检查:0:15:31 前,执行于 2021年06月07日 星期一 19时17分52秒。
软件包 rsync-3.1.3-11.el8.x86_64 已安装。
依赖关系解决。
==================================================================================
软件包 架构 版本 仓库 大小
==================================================================================
安装:
epel-release noarch 8-8.el8 extras 23 k
升级:
rsync x86_64 3.1.3-12.el8 baseos 405 k
事务概要
==================================================================================
安装 1 软件包
升级 1 软件包
总下载:428 k
下载软件包:
(1/2): epel-release-8-8.el8.noarch.rpm 46 kB/s | 23 kB 00:00
(2/2): rsync-3.1.3-12.el8.x86_64.rpm 26 kB/s | 405 kB 00:15
----------------------------------------------------------------------------------
总计 25 kB/s | 428 kB 00:16
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
升级 : rsync-3.1.3-12.el8.x86_64 1/3
安装 : epel-release-8-8.el8.noarch 2/3
清理 : rsync-3.1.3-11.el8.x86_64 3/3
运行脚本: rsync-3.1.3-11.el8.x86_64 3/3
验证 : epel-release-8-8.el8.noarch 1/3
验证 : rsync-3.1.3-12.el8.x86_64 2/3
验证 : rsync-3.1.3-11.el8.x86_64 3/3
Installed products updated.
已升级:
rsync-3.1.3-12.el8.x86_64
已安装:
epel-release-8-8.el8.noarch
完毕!
[root@localhost ~]# yum -y install inotify-tools
Extra Packages for Enterprise Linux Modular 8 - x 186 kB/s | 610 kB 00:03
Extra Packages for Enterprise Linux 8 - x86_64 1.3 MB/s | 9.5 MB 00:07
依赖关系解决。
==================================================================================
软件包 架构 版本 仓库 大小
==================================================================================
安装:
inotify-tools x86_64 3.14-19.el8 epel 57 k
事务概要
==================================================================================
安装 1 软件包
总下载:57 k
安装大小:120 k
下载软件包:
inotify-tools-3.14-19.el8.x86_64.rpm 28 kB/s | 57 kB 00:02
----------------------------------------------------------------------------------
总计 18 kB/s | 57 kB 00:03
警告:/var/cache/dnf/epel-6519ee669354a484/packages/inotify-tools-3.14-19.el8.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 2f86d6a1: NOKEY
Extra Packages for Enterprise Linux 8 - x86_64 1.4 MB/s | 1.6 kB 00:00
导入 GPG 公钥 0x2F86D6A1:
Userid: "Fedora EPEL (8) <epel@fedoraproject.org>"
指纹: 94E2 79EB 8D8F 25B2 1810 ADF1 21EA 45AB 2F86 D6A1
来自: /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
导入公钥成功
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
安装 : inotify-tools-3.14-19.el8.x86_64 1/1
运行脚本: inotify-tools-3.14-19.el8.x86_64 1/1
验证 : inotify-tools-3.14-19.el8.x86_64 1/1
Installed products updated.
已安装:
inotify-tools-3.14-19.el8.x86_64
完毕!
4.2 创建认证密码文件,设置权限!!
[root@localhost ~]# echo '123456' > /etc/rsync.pass
[root@localhost ~]# chmod 600 /etc/rsync.pass
[root@localhost ~]# ll /etc/rsync.pass
-rw-------. 1 root root 7 6月 7 19:36 /etc/rsync.pass
4.3 编写runtime目录,在发生改变的时候执行rsync脚本!!
[root@localhost ~]# mkdir /scripts/
[root@localhost ~]# cd /scripts/
[root@localhost scripts]# vim inotify.sh
[root@localhost scripts]# cat inotify.sh
#!/bin/bsah
host=192.168.170.100
src=/runtime/
des=runtime
password=/etc/rsync.pass
user=admin
inotifywait=/usr/bin/inotifywait
$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files;do
rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
[root@localhost scripts]#
4.4 使用nohup执行脚本!!!
[root@localhost ~]# nohup bash /scripts/inotify.sh &
[1] 88273
[root@localhost ~]# nohup: 忽略输入并把输出追加到'nohup.out'
4.5 设置监控开机自启!!!
[root@localhost scripts]# chmod +x /etc/rc.d/rc.local
[root@localhost scripts]# cd
[root@localhost ~]# echo 'nohup /bin/bash /scripts/inotify.sh' >> /etc/rc.d/rc.local
[root@localhost ~]# cat /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
nohup /bin/bash /scripts/inotify.sh
5. 测试!!!
[root@localhost ~]# ll /home/hanao/
total 0
[root@localhost ~]# touch /runtime/lzzz
[root@localhost ~]# ll /home/hanao/
total 0
-rw-r--r--. 1 root root 0 Jun 7 19:36 lzzz