第九天笔记

上午
[root@1 ~]# firewalld-cmd --zone=public --add-port=9999/tcp
[root@1 ~]# chmod -R g+w /code //-R 递归赋予权限
[root@1 ~]# ssh-copy-id -p9999 用户 @IP 地址
[root@1 ~]# scp -P9999 文件 用户 @IP 地址:详细地址
firewall-cmd --zone=public --add-port=9999/tcp 这条命令的作用是在防火墙的 public
域中添加一个允许 TCP 协议、端口号为 9999 的访问规则。
这意味着网络流量可以通过端口 9999 并使用 TCP 协议与您的系统进行通信。
比如说,如果您在系统上运行了一个特定的服务,该服务使用 TCP 协议并监听在端口 9999 上,那
么执行此命令后,外部网络可以访问到这个服务。
再比如,您搭建了一个基于 TCP 协议、端口 9999 Web 应用,在执行此命令之前,外部请求可能
会被防火墙阻挡,执行之后,外部用户就能够正常访问该应用。但需要注意的是,添加此规则后,也会
增加一定的安全风险,因为它打开了一个新的网络访问通道。所以在添加端口开放规则时,应确保您确
切知道自己的需求和潜在的安全影响。
chmod -R g+w /code 这条命令的作用是递归地为 /code 目录及其内部的所有文件和子目录赋予
所属组的写权限。
这意味着该目录所属组的用户可以对其中的内容进行修改和写入操作。
例如,如果您有一个开发团队,团队成员都属于同一个组,通过执行此命令,组内的成员就能够对
/code 目录下的文件和子目录进行修改和保存新的内容。
再比如,如果 /code 目录下包含了多个项目文件夹,执行该命令后,组内成员可以在这些项目中添
加、修改或删除文件,方便团队成员之间的协作和数据共享。
但需要注意的是,过度赋予权限可能会导致安全风险,如果不小心,可能会造成重要文件被误修改
或删除。
1 RSYNC 介绍
rsync 是一个强大的文件同步工具,常用于在不同的系统之间高效地复制和同步文件及目录。
它具有以下一些显著的特点和优势:
1 、增量备份: rsync 只会传输源目录和目标目录之间有差异的部分,这大大减少了数据传输量,
提高了同步效率。
例如,如果您有一个大型的文件库,并且只对其中的几个文件进行了修改, rsync 只会传输这
些修改过的文件,而不是整个文件库。
2 、数据完整性:它能够确保数据在传输过程中的完整性,通过校验和来验证文件是否正确传输。
3 、多种传输方式:支持通过本地连接(如本地磁盘)、 SSH 等方式进行文件同步。
4 、保留权限和属性:可以保留文件和目录的权限、所有者、组、时间戳等属性。
5 、排除特定文件或目录:通过配置,可以指定排除某些不需要同步的文件或目录。
[root@1 ~]# firewalld-cmd --zone=public --add-port=9999/tcp
[root@1 ~]# chmod -R g+w /code //-R 递归赋予权限
[root@1 ~]# ssh-copy-id -p9999 用户 @IP 地址
[root@1 ~]# scp -P9999 文件 用户 @IP 地址:详细地址
1
2
3
4 在实际应用中, rsync 常用于服务器之间的数据备份、文件同步、版本控制等场景。以下是一个基
本的 rsync 命令示例:
rsync -avz source_directory destination_directory
其中:
-a 表示归档模式,保留权限、属性等。
-v 表示详细模式,显示更多信息。
-z 表示在传输过程中进行压缩,以减少网络带宽使用。
1 rsync 的好姐妹
sync 同步:刷新⽂件系统缓存,强制将修改过的数据块写⼊磁盘,并且更新超级块。
async 异步:将数据先放到缓冲区,再周期性(⼀般是 30s )的去同步到磁盘。
rsync 远程同步: == remote synchronous ==
数据同步过程
sync 数据同步 => 保存⽂件(⽬标) => 强制把缓存中的数据写⼊磁盘(⽴即保存),实时性 要求⽐
较⾼的场景
asyn 数据异步 => 保存⽂件(⽬标) => 将数据先放到缓冲区,再周期性(⼀般是 30s )的去同 步到
磁盘,适合⼤批量数据同步的场景
2 rsync 特点
可以镜像保存整个⽬录树和⽂件系统
可以保留原有的权限 (permission,mode) owner,group, 时间 ( 修改时间 ,modify time) ,软硬 链接,
⽂件 acl ,⽂件属性 (attributes) 信息等
传输 == 效率⾼ == ,使⽤同步算法,只⽐较变化的(增量备份)
file1.txt file2.txt file3.txt(A 服务器 )
rsync 实现数据同步 => 只同步 file3.txt => 增量备份 file1.txt file2.txt(B 服务器 )
⽀持匿名传输,⽅便⽹站镜像;也可以做验证,加强安全
3 rsync scp 的区别
两者都可以实现远程同步,但是相对⽐⽽⾔, rsync 能⼒更强
① ⽀持增量备份 ② 数据同步时保持⽂件的原有属性
2 ups 中继器介绍
UPS 中继器是在不间断电源( UPS )系统中起到信号增强和扩展覆盖范围作用的设备。
它的主要作用包括:
1. 信号增强: UPS 系统中的某些信号可能会随着传输距离的增加而减弱,中继器可以接收并重新
放大这些信号,确保信号的强度和质量,以实现稳定的通信和控制。
例如,在一个大型的数据中心, UPS 与监控系统之间的距离较远,信号可能会衰减,
使用中继器可以保证监控信息的准确传输。
rsync -avz source_directory destination_directory
1 2. 扩展覆盖范围:使 UPS 系统能够覆盖更广的区域,超出原本的有效范围。
比如在多层建筑中, UPS 主机位于一层,而需要为高层的设备提供稳定的电源管理和
监控,中继器可以帮助实现这一需求。
3. 改善信号稳定性:减少信号干扰和失真,提高系统的可靠性。
4. 兼容不同的拓扑结构:可以适应不同的网络拓扑结构,如星型、总线型等,以满足复杂的布线
需求。
在选择 UPS 中继器时,需要考虑以下因素:
1. 信号放大能力:确保其能够满足您系统中信号强度的要求。
2. 兼容性:与您所使用的 UPS 系统和其他相关设备兼容。
3. 可靠性:具备良好的稳定性和耐用性。
4. 安装和维护的便捷性:易于安装和后续的维护操作。
总之, UPS 中继器在优化 UPS 系统的性能和覆盖范围方面发挥着重要的作用,有助于提高整个电源
保障系统的可靠性和稳定性。
3 、安装 rsync
[root@1 ~]# rpm -aq |grep rsync // 查看是否已经安装 rsync
[root@1 ~]# yum list installed | grep rsync // 查看是否已经安装 rsync
[root@1 ~]# yum -y install rsync // 默认没有安装,通过 yum 进行安装 rsync 软件
[root@1 ~]# which rsync // 查看 rsync 的所在位置
/usr/bin/rsync
[root@1 ~]# find / -name "rsync*" // 查找 rsync 相关文件
4 rsync 基本语法使用
push :推,相当于上传; pull :拉,相当于下载
rsync [ 选项 ] 原数据位置 目标位置
文件的增加、修改、删除、属性修改,会被 rsync 同步
-v 详细模式输出
-a 归档模式,递归的 式传输 件,并保持 件的属性, equals -rlptgoD
-r 递归拷 ⻉⽬
-l 保留软链接
-p 保留原有权限
-t 保留原有时间(修改)
-g 保留属组权限
-o 保留属主权限
-D 等于 --devices --specials 表示 b,c,s,p 类型的
-R 保留相对路径
-H 保留硬链接
-A 保留 ACL 策略
-e 指定要执 的远程 shell 命令, ssh 更改端 选项
-E 保留可执 权限
-X 保留扩展属性信息 a 属性
(1)在家目录中创建一些文件
[root@1 ~]# mkdir folder
[root@1 ~]# mkdir folder/f{1..3}
[root@1 ~]# ls folder/
f1 f2 f3
[root@1 ~]# touch folder/f1/file{0..4}
[root@1 ~]# tree folder/
folder/
├── f1
│ ├── file0
│ ├── file1
│ ├── file2
│ ├── file3
│ └── file4
├── f2
└── f3
3 directories, 5 files
2 )使用 rsync 进行测试(文件增加)(同步文件或同步目录)
[root@1 ~]# rsync -av folder/* /opt // folder 目录下的文件同步到 opt 目录下
sending incremental file list
f1/
f1/file0
f1/file1
f1/file2
f1/file3
f1/file4
f2/
f3/
sent 378 bytes received 123 bytes 1,002.00 bytes/sec
total size is 0 speedup is 0.00
[root@1 ~]# tree /opt // 查看是否同步成功
/opt
├── f1
│ ├── file0
│ ├── file1
│ ├── file2
│ ├── file3
│ └── file4
├── f2
└── f3
3 directories, 5 files
[root@1 ~]# rm -rf /opt/*
[root@1 ~]# rsync -av folder /opt // folder 目录同步过去
sending incremental file list
folder/
folder/f1/
folder/f1/file0
folder/f1/file1
folder/f1/file2
folder/f1/file3
folder/f1/file4
folder/f2/
folder/f3/
sent 412 bytes received 131 bytes 1,086.00 bytes/sec
total size is 0 speedup is 0.00
[root@1 ~]# tree /opt // 查看同步效果
/opt
└── folder
├── f1
│ ├── file0
│ ├── file1
│ ├── file2
│ ├── file3
│ └── file4
├── f2
└── f3
4 directories, 5 files
[root@1 ~]# rm -rf /opt/*
[root@1 ~]# rsync -avR folder/ /opt // folder 目录同步过去 -R 表示保留相对路径
[root@1 ~]# tree /opt // 查看同步效果
/opt
└── folder
├── f1
│ ├── file0
│ ├── file1
│ ├── file2
│ ├── file3
│ └── file4
├── f2
└── f3
4 directories, 5 files
[root@1 ~]# touch folder/f1/file5
[root@1 ~]# rsync -av folder/f1/ folder/f2/
[root@1 ~]# tree folder/
3 )使用 rsync 进行测试(文件删除)
[root@1 ~]# rm -rf folder/f1/file0
[root@1 ~]# rsync -av --delete folder/f1/ folder/f2/
[root@1 ~]# tree folder/
4 )使用 rsync 进行测试(文件修改)
[root@1 ~]# vim folder/f1/file1
哈哈
[root@1 ~]# cat folder/f1/file1
哈哈
[root@1 ~]# rsync -av folder/f1/ folder/f2/
[root@1 ~]# cat folder/f2/file1
哈哈
5 )使用 rsync 进行测试(文件属性改变)
[root@1 ~]# touch folder/f1/file1 -m -d "2024-7-14 00:00"
[root@1 ~]# rsync -av folder/f1/ folder/f2/
[root@1 ~]# ls -l folder/f2/file1
[root@1 ~]# chmod g+w folder/f1/file1
[root@1 ~]# rsync -av folder/f1/ folder/f2/
[root@1 ~]# ls -l folder/f2/
6 )远程传输文件
要实现远程同步,要求两台主机都应该安装 rsync
[root@1 ~]# dd if=/dev/zero of=/tmp/lajiwenjian bs=300M count=1
[root@2 ~]# yum -y install rsync
[root@1 ~]# rsync -av /tmp/lajiwenjian root@10.0.0.20:/tmp/
[root@2 ~]# ls -lh /tmp/lajiwenjian
-rw-r--r--. 1 root root 300M 7 18 11:05 /tmp/lajiwenjian
5 、使用 rsync 同步一个项目
1 )查看 rsyncd 服务状态并执行服务
[root@1 ~]# systemctl status rsyncd
rsyncd.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor
preset: disabled)
Active: inactive (dead)
[root@1 ~]# systemctl start rsyncd
[root@1 ~]# netstat -lntup | grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
10086/rsync
tcp6 0 0 :::873 :::* LISTEN
10086/rsync
2 )找出服务的配置文件
[root@1 ~]# find / -name "rsync*conf"
/etc/rsyncd.conf
3 )创建一个项目
[root@1 ~]# mkdir -p /app/studentweb/src/main/java/co/goho/yuanyu.studentweb/
//-p 创建多级目录
[root@1 ~]# tree /app/
/app/
└── studentweb
└── src
└── main
└── java
└── co
└── goho
└── yuanyu.studentweb
7 directories, 0 files
[root@1 ~]# touch
/app/studentweb/src/main/java/co/goho/yuanyu.studentweb/File{0..9}.java
[root@1 ~]# tree /app/
/app/
└── studentweb
└── src
└── main
└── java
└── co
└── goho
└── yuanyu.studentweb
├── File0.java
├── File1.java
├── File2.java
├── File3.java
├── File4.java
├── File5.java
├── File6.java
├── File7.java
├── File8.java
└── File9.java
7 directories, 10 files
[root@1 ~]# systemctl stop firewalld // 关闭防火墙
[root@1 ~]# setenforce 0 // 设置 selinux 模式为宽松模式
[root@1 ~]# getenforce
Permissive
[root@1 ~]# vim /etc/rsync.conf // 修改 rsync 配置文件
[app]
path=/app/studentweb/ // 项目路径
log file=/var/log/rsync.log // 项目日志文件路径
[root@1 ~]# systemctl restart rsyncd // 重启 rsyncd 服务
(在 1 主机中提供了一个针对 app/ 下的项目 rsync 服务,下次访问直接找服务)
4 )测试(使用 rsync 服务同步项目)
[root@2 ~]# rsync -a root@10.0.0.11:: // 查找 10.0.0.11 主机的项目
app
[root@2 ~]# rsync -av root@10.0.0.11::app /tmp/ // app 项目同步到 2 主机的 tmp
录下
[root@2 ~]# ls -l /tmp/
drwxr-xr-x. 3 root root 18 7 18 11:28 src
[root@2 ~]# tree /tmp/src/
6 、总结
1 )本地同步
1 、安装 rsync
2 rsync -av 源地址 目标地址
3 、同步的内容:文件的新增、修改、删除( --delete )、属性(时间、权限)
4 rsync -av / 目录 / /tmp 同步目录下的文件
rsync -av / 目录 /tmp/ 同步目录
如果源目录不以 / 结尾,整个目录同步包含目录文件,带 / ,只同步目录下的文件
5 rsync -avR 保存相对路径 ,其实也就是同步了目录
-R 保留目录的相对路径,也会携带目录
2 )远程同步
1 、要求两台主机要应该安装 rsync 服务
2 、用法和本地同步相同
rsync -av root@10.0.0.11:/opt/ /tmp 拉取 pull
rsync -av 用户 @ 主机地址:目的地址 源地址
rsync -av /tmp/ root@10.0.0.11 /tmp 推送 push
rsync -av 源地址 用户 @ 主机地址:目的地址
需要输入密码,需要免密,这个需要的密码也是使用 ssh 服务验证,所以,直接免密设置好了之
后就直接支持 rsync
3 )同步服务器的设置
1 、修改配置文件
vim /etc/rsyncd.conf
[abc]
path=/app/javaproject/
log file=/var/log/rsyncd.log
2 、重启 rsync 服务
systemctl restart rsyncd
[root@2 ~]# rsync -a root@10.0.0.11:: // 查找 10.0.0.11 主机的项目
app
[root@2 ~]# rsync -av root@10.0.0.11::app /tmp/ // app 项目同步到 2 主机的 tmp
录下
[root@2 ~]# ls -l /tmp/
drwxr-xr-x. 3 root root 18 7 18 11:28 src
[root@2 ~]# tree /tmp/src/
3 、在另一台主机上拉取 rsync 服务中的项目
测试是否能够检测到项目 检测到配置的 abc
rsync -a root@10.0.0.11 ::
abc
rsync -av root@10.0.0.11 :: /tmp
下午
1 、修改项目名称进行拉取
[root@1 ~]# systemctl start rsyncd // 启动 rsync 服务
[root@1 ~]# systemctl status rsyncd
[root@1 ~]# vim /etc/rsyncd.conf // 查看项目
[root@2 ~]# rm -rf /tmp/* // 清空 tmp 目录
[root@2 ~]# ls /tmp
[root@2 ~]# rsync -a root@10.0.0.11:: // 查看服务器项目
app
[root@2 ~]# rsync -av root@10.0.0.11::app /tmp/ // 拉取服务器项目
[root@1 ~]# vim /etc/rsyncd.conf // 修改配置文件
[efg]
path=/app/studentweb/
log file=/var/log/rsync.log
[root@1 ~]# systemctl restart rsyncd // 重启服务
[root@2 ~]# rsync -av root@10.0.0.11::efg /tmp/ // 需要修改名字
[root@1 ~]# systemctl restart rsyncd // 重启服务
2 、自动化推送拉取文件
2 分钟自动推送一次代码(使用计划任务每 2 分钟推送一次任务)
[root@1 ~]# which rsync // 找到 rsync which 地址
/usr/bin/rsync
[root@1 ~]# crontab -e // 编辑计划任务
*/2 * * * * /usr/bin/rsync -av /app/studentweb/ root@10.0.0.20:/tmp/
[root@2 ~]# rm -rf /tmp/* // 删除 tmp 目录下的文件
[root@2 ~]# ls /tmp/ // 查看是否自动推送成功
src
如果文件根本没有修改,就没有必要推送
自动监听文件被修改的行为,再自动推送
编辑计划任务,删除计划任务
[root@1 ~]# crontab -e
3 、为 rsyncd 服务添加密码
编辑配置文件 /etc/rsyncd.conf
添加两个属性
auth users=user0 user1
secrets file=/etc/rsync.secrets
[root@1 ~]# vim /etc/rsyncd.conf // 配置文件添加两行内容(账号和密码文件的路径)
[efg]
path=/app/studentweb/
log file=/var/log/rsync.log
auth users=tom,jarry
secrets file=/etc/rsync.secrets
[root@1 ~]# vim /etc/rsync.secrets // 创建密码文件编辑 rsync 密码
tom:tom
jarry:jarry
[root@1 ~]# chmod 600 /etc/rsync.secrets // /etc/rsync.secrets 添加权限
[root@2 ~]# rsync -av tom@10.0.0.11::efg /tmp/
Password:
receiving incremental file list
./
src/
src/main/
src/main/java/
src/main/java/co/
src/main/java/co/goho/
src/main/java/co/goho/yuanyu.studentweb/
src/main/java/co/goho/yuanyu.studentweb/File0.java
src/main/java/co/goho/yuanyu.studentweb/File1.java
src/main/java/co/goho/yuanyu.studentweb/File2.java
src/main/java/co/goho/yuanyu.studentweb/File3.java
src/main/java/co/goho/yuanyu.studentweb/File4.java
src/main/java/co/goho/yuanyu.studentweb/File5.java
src/main/java/co/goho/yuanyu.studentweb/File6.java
src/main/java/co/goho/yuanyu.studentweb/File7.java
src/main/java/co/goho/yuanyu.studentweb/File8.java
src/main/java/co/goho/yuanyu.studentweb/File9.java
sent 245 bytes received 784 bytes 158.31 bytes/sec
total size is 0 speedup is 0.00
4 、实现代码实时同步
1 inotify 介绍
inotify 是一个 Linux 内核提供的用于监控文件系统事件的机制。
它允许应用程序监控文件或目录的各种操作,例如创建、修改、删除、移动等。
以下是 inotify 的一些关键特点和用途:
特点:
1. 实时性:能够实时地通知应用程序文件系统的变化。
[root@1 ~]# vim /etc/rsyncd.conf // 配置文件添加两行内容(账号和密码文件的路径)
[efg]
path=/app/studentweb/
log file=/var/log/rsync.log
auth users=tom,jarry
secrets file=/etc/rsync.secrets
[root@1 ~]# vim /etc/rsync.secrets // 创建密码文件编辑 rsync 密码
tom:tom
jarry:jarry
[root@1 ~]# chmod 600 /etc/rsync.secrets // /etc/rsync.secrets 添加权限
[root@2 ~]# rsync -av tom@10.0.0.11::efg /tmp/
Password:
receiving incremental file list
./
src/
src/main/
src/main/java/
src/main/java/co/
src/main/java/co/goho/
src/main/java/co/goho/yuanyu.studentweb/
src/main/java/co/goho/yuanyu.studentweb/File0.java
src/main/java/co/goho/yuanyu.studentweb/File1.java
src/main/java/co/goho/yuanyu.studentweb/File2.java
src/main/java/co/goho/yuanyu.studentweb/File3.java
src/main/java/co/goho/yuanyu.studentweb/File4.java
src/main/java/co/goho/yuanyu.studentweb/File5.java
src/main/java/co/goho/yuanyu.studentweb/File6.java
src/main/java/co/goho/yuanyu.studentweb/File7.java
src/main/java/co/goho/yuanyu.studentweb/File8.java
src/main/java/co/goho/yuanyu.studentweb/File9.java
sent 245 bytes received 784 bytes 158.31 bytes/sec
total size is 0 speedup is 0.00
2. 细粒度监控:可以精确到单个文件或目录的操作级别。
用途:
1. 文件同步工具:比如在多个服务器之间保持文件同步,当源端文件发生变化时,及时同步到目
标端。
2. 日志监控:监控日志文件的更新,以便及时处理新的日志内容。
例如,在一个自动化部署系统中,使用 inotify 来监测代码目录的变化,一旦有新的代码提交,自
动触发部署流程。又或者在一个文件备份系统中,通过 inotify 来察觉文件的修改,然后及时进行备份
操作。
2 )直接安装 inotify-tools
监听指定目录,一旦目录发上修改,就执行指定的指令
[root@1 ~]# yum -y install inotify-tools
inotify 监听
安装后会有两条指令
inotifywait 等待 inotifywatch 一直监视(在 /usr/bin 下)
[root@1 ~]# inotifywait -mr /app/
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
|
新开一个窗口
[root@1 ~]# touch /app/studentweb/nihao.txt
查看原先窗口
[root@1 ~]# vim /app/studentweb/nihao.txt
一旦 inotifywait 监听到目录中的改变,就直接推送
2 )编写 inotify.sh 脚本
[root@1 ~]# which inotifywait
/usr/bin/inotifywait
[root@1 ~]# vim inotify.sh
#!/bin/bash // 指定编译工具
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move
/app/studentweb | while read events
do
rsync -av --delete /app/studentweb/ root@10.0.0.20:/tmp/
done
[root@1 ~]# chmod +x inotify.sh
[root@1 ~]# ./inotify.sh
|
新开一终端执行下面命令
[root@1 ~]# touch /app/studentweb/tiantian.txt
[root@2 ~]# ls /tmp/
nihao.txt src tiantian.txt
[root@1 ~]# touch /app/studentweb/fuwocheng.txt
[root@2 ~]# ls /tmp/
fuwocheng.txt nihao.txt src tiantian.txt
5 、让 .sh 文件一直执行下去
[root@1 ~]# nohup ./inotify.sh & // 放入后台一直运行
练习

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)信息等。

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

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拉取,


[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 ~]#
//配置完成

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值