rsyncd服务免密及inotify监控下的rsync同步

第二周 周四

ssh回顾

1.安装

openssh 开源

openssh-serve 、openssh-client

启动 systemctl start ssh

设置开机自启 systemctl enable ssh

由于需要修改sshd端口,停用seline服务

setenforce 0

关闭防火墙 firewall-cmd --zone=public --add-port=9999/tcp

systemctl stop firewalld

systemctl disable fireallds 设置开机不自启

对称和非对称加密

des 信息传输的双方是用一个密钥

rsa 公钥和私钥两套加密算法

使用ssh远程管理

​ 1.账号密码方式

​ ssh -l用户名 -p端口号 域名/ip

​ ssh -p端口 用户@ip

​ 如果端口默认22,不需要添加p选项

​ ssh 用户@ip

​ 修改ssh服务端口,不允许root远程登录

​ vim /etc/ssh/sshd_conf

​ //38 root

​ // 17 端口

​ root无法远程登录,需要其他的用户和权限

​ useradd zhansan

​ passwd zhansan

​ useradd lisi

​ passwd lisi

​ zhansan、lisi都可以w 目录code

​ mkdir /code

​ groupadd code

​ chgrp -R code /code. //修改目录code的所属的组为code组

​ 为用户添加w权限

​ chmod -R g+w /code

​ 2.密钥对

​ 1.选择一个账户 zhansan、 su zhansan

​ 2.生成公钥和私钥 ssh-keygen

​ 3.~/.ssh/

​ id_rsa 私钥

​ id_rsa.pub 公钥

​ 将公钥中字符串追加到对应主机的对应用户的家目录的~/.ssh/authorized_key

​ 公钥可以复制字符串,私钥绑定

3.ssh-copy-id -p9999 用户@ip

早:

rsync

​ sync同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级快

​ async异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘

​ rsync远程同步:==remote synchronous==

数据同步过程

sync数据同步 ==> 保存文件(目标)==> 强制把缓存中的数据写入磁盘(立即保存),实时性要求较高的场景

async数据异步 ==> 保存文件(目标)==> 将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘,适合大批量数据同步的场景

2.rsync特点

1.可以镜像保存整个目录树和文件系统。

2.可以保留原有的权限(permission,mode)owner,group,时间(修改时

​ 间,modify time)软硬链接,文件acl,文件属性(attributes)信息等。

  1. 传输==效率高== ,使用同步算法,只比较变化的(增量备份)

rsync的使用

1.基本语法

rsync [选项] 数据源位置 目标位置

在家目录创建文件去同步到opt

[root@q1 ~]# cd
[root@q1 ~]# mkdir folder
[root@q1 ~]# mkdir folder/f{1..3}
[root@q1 ~]# ls
[root@q1 ~]# ls folder/
f1  f2  f3

将folder目录下的文件传到opt

[root@localhost ~]# rsync -av folder/ /opt/
sending incremental file list
./
f1/
f2/
f3/
​
sent 107 bytes  received 31 bytes  276.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost ~]# tree /opt/
/opt/
├── f1
├── f2
└── f3
​
3 directories, 0 files
[root@localhost ~]# 

加R选项递归效果

[root@localhost ~]# rm -rf /opt/*
[root@localhost ~]# rsync -avR folder/ /opt/
sending incremental file list
folder/
folder/f1/
folder/f2/
folder/f3/
​
sent 118 bytes  received 32 bytes  300.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost ~]# tree /opt/
/opt/
└── folder
    ├── f1
    ├── f2
    └── f3
​
4 directories, 0 files
[root@localhost ~]# 

将f1目录传到f2后,在f1创建文件,发现未同步。

[root@localhost ~]# touch folder/f1/file{1..4}
[root@localhost ~]# tree folder/
folder/
├── f1
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
└── f3
[root@localhost ~]# rsync -av folder/f1/ folder/f2/
sending incremental file list
./
file1
file2
file3
file4
​
sent 261 bytes  received 95 bytes  712.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost ~]# touch folder/f1/file5
[root@localhost ~]# tree folder/
folder/
├── f1
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file1
│   ├── file2
│   ├── file3
│   └── file4
└── f3
​
3 directories, 9 files
[root@localhost ~]# 
​

在f1删除一个文件,再次同步到f2,效果

[root@localhost ~]# rm -rf folder/f1/file1
[root@localhost ~]# tree folder/
folder/
├── f1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file1
│   ├── file2
│   ├── file3
│   └── file4
└── f3
​
3 directories, 8 files
[root@localhost ~]# rsync -av folder/f1/ folder/f2/
sending incremental file list
./
file5
​
sent 150 bytes  received 38 bytes  376.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost ~]# tree folder/
folder/
├── f1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── f3
​
3 directories, 9 files
[root@localhost ~]# 

发现未同步,f2的file1文件仍存在

解决方法

[root@localhost ~]# rsync -av --delete folder/f1/ folder/f2/
sending incremental file list
./
file1
​
sent 199 bytes  received 38 bytes  474.00 bytes/sec
total size is 28  speedup is 0.12
[root@localhost ~]# tree folder/
folder/
├── f1
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── f3
​
3 directories, 10 files

为文件写内容,再次同步

[root@localhost ~]# vi folder/f1/file1
[root@localhost ~]# cat folder/f1/file1
大家哈,我是光固化
[root@localhost ~]# cat folder/f2/file1
​
[root@localhost ~]# rsync -av --delete folder/f1/ folder/f2/
sending incremental file list
./
file1
​
sent 199 bytes  received 38 bytes  474.00 bytes/sec
total size is 28  speedup is 0.12
[root@localhost ~]# tree folder/
folder/
├── f1
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
├── f2
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── f3
​
3 directories, 10 files
[root@localhost ~]# cat folder/f2/file1
大家哈,我是光固化

即rsync可同步文件的创建、删除、内容的修改、以及文件的属性

从21主机传从到22主机,rsync需要两台机器都安装

[root@q1 ~]# history > history.txt
  //scp 方式
[root@q1 ~]# scp -r ./history.txt root@192.168.1.22:/tmp
The authenticity of host '192.168.1.22 (192.168.1.22)' can't be established.
ECDSA key fingerprint is SHA256:BL6/9GQ5XSRRaU7Oo9RL2rnPC/hIU3ZehVq0Ct+W1ng.
ECDSA key fingerprint is MD5:aa:15:ff:52:1f:ee:8e:5d:c4:d5:b6:c9:4c:c7:db:5c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.22' (ECDSA) to the list of known hosts.
root@192.168.1.22's password: 
history.txt                                   100%   23KB   8.0MB/s   00:00  
rsync同步方式
[root@q1 ~]# rsync -av folder/ root@192.168.1.22:/tmp
root@192.168.1.22's password: 
sending incremental file list
./
f1/
f2/
f3/
​
sent 107 bytes  received 31 bytes  10.22 bytes/sec
total size is 0  speedup is 0.00
[root@localhost ~]# tree /tmp/
/tmp/
├── f1
├── f2
├── f3
├── history.txt
├── ks-script-yu7dKc
├── systemd-private-be89b29ef4a74570a97a71ebd8e7d1bb-chronyd.service-nz3Q3W
│   └── tmp
├── vmware-root
├── yum.log
├── yum_save_tx.2024-07-17.19-57.T984Oj.yumtx
├── yum_save_tx.2024-07-18.10-17.rV1WAH.yumtx
├── yum_save_tx.2024-07-18.10-18.NNnHct.yumtx
└── yum_save_tx.2024-07-18.10-19.PAvOjx.yumtx
​
6 directories, 7 files
[root@localhost ~]# 

[root@localhost ~]# touch /tmp/lj
[root@localhost ~]# dd of=/dev/zero if=/tmp/lj bs=300M count=1
记录了0+0 的读入
记录了0+0 的写出
0字节(0 B)已复制,0.00165945 秒,0.0 kB/秒
[root@localhost ~]# rsync -av /tmp/lj root@192.168.1.23:/tmp
The authenticity of host '192.168.1.23 (192.168.1.23)' can't be established.
ECDSA key fingerprint is SHA256:BL6/9GQ5XSRRaU7Oo9RL2rnPC/hIU3ZehVq0Ct+W1ng.
ECDSA key fingerprint is MD5:aa:15:ff:52:1f:ee:8e:5d:c4:d5:b6:c9:4c:c7:db:5c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.23' (ECDSA) to the list of known hosts.
root@192.168.1.23's password: 
sending incremental file list
lj
​
sent 84 bytes  received 35 bytes  26.44 bytes/sec
total size is 0  speedup is 0.00
​
[root@localhost ~]# ls -l /tmp/lj 
-rw-r--r--. 1 root root 0 7月  18 11:06 /tmp/lj
[root@localhost ~]# 

本地同步

1.安装rsync

2.rsync -av ~/abc/ /opt/

3.能够同步文件的内容,文件的属性,新增 修改 删除(--delete)

4.rsync -av /目录/ /tmp/ 同步目录下的内容

5.rsync -av /目录 /tmp/ 同步目录

6.rsync -avR 保存相对路径,其实也就是同步了目录

远程同步

1.2台主机都支持rsync的服务

2.rsync -ac 源 用户@ip

3.获取数据pull拉取,push推送

rsync -av root@192.168.1.23:/opt /tmp/

rsync -av /tmp/ root@192.168.1.22:/opt

[root@localhost ~]# vi /etc/rsyncd.conf 
[root@localhost ~]# mkdir -p /app/studentweb
[root@localhost ~]# cd /app/studentweb/
[root@localhost studentweb]# systemctl restart rsyncd
[app]
path=/app/studentweb/
log file=/var/log/rsync.log

同步服务器的设置

启动服务

systemctl strat rsyncd

修改配置文件

vim /etc/rsyncd.conf

[abc]

path=/app/javajproject/

Log file=/var/rsync.log

重启服务

systemctl restart rsyncd

在另一台主机上拉取rsync服务中的项目

测试是否能够检测到项目 检测到配置的abc

rsync -a root@192.168.1.23::

abc

rsync -av 源 目标位置

[root@localhost ~]# rm -rf /tmp/*
[root@localhost ~]# ls /tmp
[root@localhost ~]# rsync -a root@192.168.1.22::
app           

//备份服务器不需要启动rsyncd服务

备份服务器通过rsync同步22主机的源文件

[root@localhost ~]# rsync -av root@192.168.1.22::efg /tmp/
receiving incremental file list
rsync: opendir "/." (in efg) failed: Permission denied (13)
./
​
sent 27 bytes  received 113 bytes  13.33 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1658) [generator=3.1.2]

设置每30秒推送一次代码

编辑计划任务

找到rsync的which地址

[root@localhost ~]# systemctl restart rsyncd 
[root@localhost ~]# which rsync
/usr/bin/rsync
[root@localhost ~]# crontab -e
*/1 * * * * /usr/bin/rsync -av /app/studentweb/ root@192.168.1.23:/tmp/
​
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# ls /app/studentweb/
d1  d2  d3
​
[root@localhost ~]# ls /tmp/
d1  d2  d3
//同步成功

使用计划任务每30秒推送一次代码

如果文件没有修改,就没必要推送

自动监听文件被修改的行为,再推送

给rsyncd服务添加密码

1.编辑/etc/rsyncd.conf

添加两行账户和密码文件的路径

auth users=zhansan,lisisecrets file=/etc/rsync.secrets

[efg]
path=/app/studentweb/
log file=/var/log/rsync.log
auth users=zhansan,lisi     //用户名
secrets file=/etc/rsync.secrets     //密码文件

2.vim /etc/rsync.secrets //创建编辑密码

格式 账号:密码

[root@localhost ~]# vi /etc/rsync.secrets
zhansan:zhansan
lisi:lisi

以上是编辑rsync的密码

3.为/etc/rsync.secrets密码文件添加权限600

//必须为此文件设置一次权限

4.重启rsyncd服务

inotify 监听

inotifywait -mr /app/

[root@localhost ~]# yum -y install inotify-tools
[root@localhost ~]# inotifywait -mr /app/
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
​
[root@localhost ~]# vim inotify.sh
#!/bin/bash
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /app/studentweb|while read events
do
        rsync -av /app/studentweb/ root@192.168.1.23:/tmp/
        echo "'date +%F\%T'出现事件¥events" >> /var/log/rsync.log 2>&1
done
​
[root@localhost ~]# chmod 700 inotify.sh    //添加权限
[root@localhost ~]# ./inotify.sh 
[root@localhost ~]# touch /app/studentweb/c{1..2}.txt //创建文件测试
[root@localhost ~]# ls /tmp
b1.txt  b2.txt  b3.txt  c1.txt  c2.txt  d1  d2  d3    //文件已同步
[root@localhost ~]# 
//配置完成

脚本文件监控项注释,如图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值