rsync!

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
上一篇:tomcat


下一篇:【图像隐写】基于matlab GUI LSB匹配图像隐写【含Matlab源码 812期】