Linux备份服务及rsync企业备份架构(应用场景)

备份服务概述

备份服务:需要使用到脚本,打包备份,定时任务.

备份服务:rsyncd服务,不同主机之间数据传输.

  • 特点:
  1. rsync是个服务也是命令
  2. 使用方便,具有多种模式
  3. 传输数据的时候是增量传输

增量与全量:

全量 :无论多少数据全部推送走(scp)

增量:只会把修改新建了的文件传输走(rsync)

把/etc/目录传输到另外一台机器的/tmp/下面

scp -r /etc/sysconfig/ root@192。168.28.131:/tmp/

rsync -avz /etc/sysconfig/ [email protected]:/mnt/

rsync企业应用场景:

应用场景(业务场景) 应用建议

rsync作为命令使用 临时拉取,推送数据.未来这个需求可以通过scp命令实现.

定时备份:rsync服务+定时任务 定时备份,定期备份案例.(定时任务进行备份+通过rsync传输备份)

实时同步:rsync服务+sersync/lsyncd实现实时同步 解决存储服务单点问题

rsync服务与异地容灾找一个异地的服务器存放备份

注意:单点问题:同一个功能/同一个服务,只有1台节点.

rsync不同的模式

1.1rsync本地模式

rsync -a /etc/ /tmp/

rsync -a /etc /opt/

在rsync对于目录 /etc/ /etc是有区别的

/etc /etc目录+目录的内容

/etc/ /etc/目录下面的内容

1.2远程模式

格式

rsync -a 源文件 目标

推送:rsync /etc/hostname [email protected]:/tmp

拉取:rsync [email protected]:/etc/hosts /opt/

#推送/etc/hostname到192.168.28.131的/tmp/目录

rsync -a /etc/hostname [email protected]:/tmp

#推送/etc目录及目录内容到131的/tmp下面

##推送第1次 全量

rsync -av /etc [email protected]:/tmp

##推送第2次 发现没有推送

rsync -av /etc [email protected]:/tmp

##创建文件再次推送

touch /etc/wulin.txt

rsync -av /etc [email protected]:/tmp

#通过scp推送 /etc目录及目录内容到131的 /opt下面

scp -r /etc/ [email protected]:/opt/

-r递归传输

1.3守护进程模式

服务使用流程

部署

配置

启动,使用

优化

故障

自动化

(监控,日志,安全,自动部署,容器)

1.3.1检查是否安装

检查安装 更新

yum install -y rsync

检查软件包内容

/etc/rsyncd.conf #配置文件

/usr/bin/rsync #命令

/usr/lib/systemd/system/rsyncd.service #systemctl对应的配置文件

1.3.2进行配置

root@backup /wulin\]# cat/etc/rsyncd.conf #created by wulin 2024-5-12 ##rsyncd.conf start## fake super =yes uid = rsync gid = rsync use chroot = no max connections = 2000 timeout = 600 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false #hosts allow = 10.0.0.0/24 #hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.password ##################################### \[data

comment = www by wulin 2024-5-12

path = data

#启动服务

systemctl enable rsyncd

systemctl start rsyncd

#检查进程

ps -ef |grep rsync

#检查端口

ss -lntup |grep rsync

1.3.2后续配置

go 复制代码
 #1.添加虚拟用户
useradd  -s /sbin/nologin -M   rsync

#2.创建密码文件
密码文件格式:用户名:密码
echo 'rsync_backup:123 ' >/etc/rsync.password
chmod 600 /etc/rsync.password

#3.共享目录与权限
mkdir /data/

#启动服务
systemctl start rsyncd
systemctl enable rsyncd

#访问测试:

rsync -avz /etc/hosts [email protected]::data

rsync_backup是服务端配置文件中的认证用户

data表示模块名字

go 复制代码
本地测试:
[root@backup ~]# rsync -av /etc/hostname  
[email protected]::data
Password:
sending incremental file list
hostname
sent 102 bytes
received 43 bytes  41.43 bytes/sec
total size is 7
speedup is 0.05

[root@backup ~]# ll /data/
total 4
-rw-r--r-- 1 rsync rsync  17:02 hostname

#客户端测试:

##基本测试

root@nfs01 \~\]# rsync -avz /etc/hosts [email protected]::data Password: sending incremental file list hosts sent 214 bytes received 43 bytes 73.43 bytes/sec total size is 329 speedup is 1.28 ##免密码传输数据到服务器 \[root@nfs01 \~\]#echo '123' \>/etc/rsync.passwords \[root@nfs01 \~\]#chmod 600 /etc/rsync.passwords \[root@nfs01 \~\]# \[root@nfs01 \~\]#rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.passwords sending incremental file list sent 47 bytes received 20 bytes 134.00 bytes/sec total size is 333 speedup is 4.97 传到客户端 \[root@nfs01 \~\]#rsync -avz /tmp/etc.tar.gz [email protected]::data --password-file=/etc/rsync.passwords sending incremental file list etc.tar.gz![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/02b8abb8b46f93148ba07b2339609212.webp) ### 1.4守护进程补充 ##### uid,gid与auth user 1.用户执行命令:rsync -avz /tmp/etc.tar.gz rsync_backup@backup::data --passwordfile=/etc/rsync.password 2.服务端收到数据:判断rsync_backup用户,然后等待输入密码 3.把用户名和密码与配置文件里面对比auth user和secretsfile 4.通过后,传输数据 5.数据到达服务器所有者被修改为uid和gid指定的(rsync) 6.数据写入data模块(/data/)目录下面. #### 免密的方式连接服务端(命令行指定客户端密码文件) 客户端密码文件只存储密码即可 echo 123 \>/etc/client.rsync chmod 600 /etc/client.rsync rsync -avz /etc/hosts [email protected]::data --password- file=/etc/client.rsync #### 访问控制-安全措施 hosts allow只准许指定的ip或网段访问 hosts deny拒绝. 配置只准许172.16.1.0/24网段访问 ### 2.1rsync选项 -a 1. -rlptgoD 2. -r递归复制 3. -l复制软连接 4. -p保持权限不变 5. -m保持修改时间不变 6. -o所有者不变 7. -g用户组不变 8. -D --devices --specials设备与特殊文件 -v 显示过程 -z 传输数据时候进行压缩(公网) -p 显示每rsync -av . [email protected]:/tmp/ --exclude=04rsync -av . [email protected]:/mnt --exclude={04,05}个文件传输过程(进度条)断点续传--partial --progress --bwlimit 限速注意不要与-z一起使用 --exclude、--exclude-from排除 --delete目标目录与源目录保持一致的传输 ```go 限速并传输 rsync -aP --bwlimit=500kb /tmp/1g 192.168.28.131:/mnt/ 传输并排除 rsync -av . [email protected]:/tmp/ --exclude=04 rsync -av . [email protected]:/mnt --exclude= {04,05} 通过文件内容进行排除 [root@backup /wulin]# cat /tmp/paichu.txt 03 05 10 [root@backup /wulin]# rsync -av . [email protected]:~ --exclude-from=/tmp/paichu.txt 保持源与目标数据一致 rsync -avP --delete . [email protected]:/tmp/ ``` ### 故障总结 password mismatch backup rsyncd\[3177\]: authfailed on module data from UNKNOWN(10.0.0.41) for rsync_backup: no secretsfile ```go no secrets file ``` selinux和防火墙 ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/04a757235a77e005742003410c96a052.webp) ## 项目案例 可能来自于老大的一句话:网站数据需要备份,你操作一下 接下来的内容需要你自己规划,备份什么内容?如何备份?如何收集备份(统一存放备份)?保留时间?都是什么系统?什么系统的版本? * 备份什么? 1. 数据(用户数据库)数据库 存储 2. 配置文件 3. 脚本和代码 4. 网站代码 日志收集 * 如何备份? * 如何收集? rsync服务收集备份(rsync客户端推送备份到rsync服务器) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/65daba029337ac3164c9f46c3c1aa218.webp) ### 2.2项目流程: 1)环境准备 ##### 1)环境准备 | 角色 主机 运行服务 | | | |-------------|---------------|---| | 存放备份 backup | rsync服务端 | | | 生成备份 nfs01 | rsync客户端,其他服务 | | | 生产备份 web01 | rsync客户端,其他服务 | | 2. 项目步骤 这里为操作步骤,未来的工作还会有沟通(与其他部门进行商讨)定期汇报 \| 步骤说明 详细内容 \| \| \| ------------------------------------------------------------ \| ---- \| \| rsync服务端并调试 服务端配置 、back目录 \| \| \| rsync客户端节点配置脚本(备份) 备份 推送 清理 \| \| \| 其他节点匹配定时任务 定时运行脚本 \| \| \| 在备份服务器上检查并发送邮件 在rsync服务端检查备份并发送邮件 \| \| 3. 配置与检查rsync服务端与客户端 vim/etc/rsyncd.conf ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/04bb156ee960bb6dd49db35cde3d0c10.webp) ```go [root@backup ~]#mkdir -p /backup/ #创键目录 chown -R rsync.rsync /backup/ ll -d /backup/检查 ``` ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/527e08fdeac731d326c857a87b061778.webp) 改完了配置文件进行重启 systemctl restart rsyncd(端口号为873) ch在客户端测试 ```go rsync -av /etc/hostname [email protected]::backup --password-file=/etc/rsync.passwords sending incremental file list hostname ``` 在备份服务器看是否传输过来 ll /backup/ cat /backup/hostname 4)书写备份脚本 书写脚根据企业,任务需求合理高效进行书写脚本,写脚本在多窗口化进行编写边测试(整理这个的需要命令,写成脚本(引用变量名实现脚本万能功能--在相同类型机器上省时间省力气--当然注意整体磁盘空间内存信息,在架构搭建初期各部门进行会议交流)) ```go 在nf01这个客户端上 vim /server/scripts/bak_conf.sh (写脚本编写脚本边进行测试) [root@nfs01 ~]#hostname -I [root@nfs01 ~]#hostname -I |awk '{print $2}' ``` ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/3515d3c7430a40fe594ba795b4c1733e.webp) 在存储服务器上对推送脚本进行测试 mkdir -p /backup/172.16.1.131 tar zcf /backup/172.16.1.131/etc.tar.gz /etc /var/spool/cron/ ll /backup/172.16.1.131/ tree /backup/(企业数量文件内容特别多的时候,可以采用树状结构) rsync -a /backup/ [email protected]::backup --password-file=/etc/rsync.passwords 检查服务端是否推送过来 tree /backup/ ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/ddb70d984df319b877af05fbfd5ea574.webp) 测试成功,将脚本写入脚本 继续在客户端测试删除旧的客户端备份命令 ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/faef8a67ce51656dd90be9041919596a.webp) \[root@nfs01 \~\]#find /backup/ -type f -name "\*.tar.gz" \[root@nfs01 \~\]#find /backup/ -type f -name "\*.tar.gz" -mtime +7 \|xargs rm -f (这里xargs后不支持别名 ,rm删文件会接提示) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/f1c24de59efd7951a702bb8e3336d3cb.webp) 测试成功写入脚本! 整个备份服务器脚本配置文件: ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/a1a4d8ad0a714b0673e366594ba46ca0.webp) 脚本运行完进行测试 rm -fr /backup/ 把服务端的ip可以进行删掉,这里如果删除了backup目录,备份服务器会报错 ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/650d33fc97190d474bb040f0647457ee.webp) 删掉客户端目录并tree ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/9f5025dadd23c92830e4d197f06d99c9.webp) 运行脚本并检查服务端是存在backup ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/e6db16acce343b05eb61f5f631dd2ebd.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/0e9f3835a2f9568ee7984cb943f5f133.webp) 未来我们只需要调整脚本备份内容(目录)ip即可 写定时任务: ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/dc145762ab0ad79f3bbc35300460b57c.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/46e2d6f8737eafc4d63f99d0f06317af.webp) crontab -e ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/747f3a15968b9dff2953c5250479dffb.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/b97d3e40cf6b2100e6114c4a12c6e47d.webp) 查看日志tail -f /var/log/cron date 查看结果(每2秒进行执行) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/a8f5a241345e5a73cc7d2098666edd96.webp) 查看服务端: ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/fbef9ef7f85805c884ac6adc3e0964e4.webp) (说明测试没有问题,可以在定时任务按照企业时间需求及追加目录进行配置 5)服务端备份脚本调试 检查备份并清除旧的备份脚本 vim /server/scripts/check.sh ```go find /backup/ -type f -name "*.tar.gz" |xargs ls -lhd find /backup/ -type f -name "*.tar.gz" |awk '{print $NF,$5}' find /backup/ -type f -name "*.tar.gz" |awk -F '[ /]+' '{print $(NF-1),NF,$5}' ``` ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/21e980bc63e29aee5bbee66c8cc59bad.webp) 让内容多一点将nfs01客户端脚本文件传入到web01服务器上 \[root@nfs01\~\]#scp/server/scripts/bak_conf.sh 192.168.28.7:/server/scripts/ ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/1ae2160552471f5d7242b3df1d2a9e61.webp) \[root@nfs01 \~\]#scp /etc/rsync.password 192.168.28.7:/etc \[root@nfs01 \~\]#scp /var/spool/cron/root 192.168.28.7:/var/spoo l/cron/ 检查传输到web01服务器内容 \[root@web01 \~\]#ll /etc/rsync.password \[root@web01\~\]#ll/etc/rsync.password /server/scripts/bak_conf.sh \[root@web01 \~\]#ll /etc/rsync.password /var/spool/cron/root \[root@web01\~\]#head-30/etc/rsync.password /server/scripts/bak_conf.sh /var/spool/cron/root ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/f61067193783b4998bc64d0b05a3f619.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/ed2b6ab67e007de0d7f1da3d9dd5a37e.webp) 在web01服务器运行bak_conf.sh脚本 ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/59d644f2ef4a9f12bf689ffdf9ca0e36.webp) 在备份服务器进行检查如果成功会有172.16.1.7这一行 \[root@backup \~\]#find /backup/ -type f -name "\*.tar.gz" \|awk -F '\[ /\]+' '{print $(NF-1),NF,$5}' ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/33ac0d6703e88f140183ab9c0a4e9453.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/4dfeaab027343b9f601a30fdbd3e85ef.webp) 测试统计结果命令并写入脚本: \[root@backup \~\]#awk -F: 'BEGIN{print "用户名","UID"}{print 1 , 1, 1,​3}' /etc/passwd ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/07220ba7aac936a88f73a1a8a38bb379.webp) 完成脚本(清除旧的脚本统计结果并将结果发送到邮件) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/dd3e01b75900caf8a66eb4fd99c8eb90.webp) \[root@backup /backup\]#sh /server/scripts/check.sh 如果在邮箱中没有见到信息,在垃圾邮箱查找(被邮箱系统屏蔽掉了) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/a590a6f9607efdd85408022108fc5239.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/59af8fe23afabf069538288396392c56.webp) 配置定时任务: crontab -e ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/60c17bb611e98e69364b9d7e383c9351.webp) 然后观察日志文件及邮箱信息 \[root@backup /backup\]#tail -f /var/log/cron 最后将结果追加到result.txt ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/774007b5579f93d6ba2b9192696020a4.webp) ##### 6)增加校验功能 简单理解校验测试(知识理解): * 检查传输中是否有变化及检查的那个文件md5: ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/42e1904a9728b8d43167fdc4fcbfa582.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/824d479f5afd7a7a5b3c262ec6d3d69b.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/2c39968ed8f2f60a0d5a05ab091714fa.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/edcb47c45451e313dbb84d39c4a6957e.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/f17abb93183a62141c51a469d49cbca2.webp) 检查多个检验文件(find+md5) ```go #给/etc/下面所有的文件创建MD5保存到指定文件中 find /etc/ -type f | md5sum >etc-all.md5 #进行校验 md5sum -c etc-all.md5 #修改/etc/下某个文件比如增加个"#" vim /etc/rsyncd.conf #进行校验 md5sum -c etc-all.md5 #只显示md5 异常的文件 md5sum --quiet -c etc-all.md5 ``` ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/c11175f3addab0930a9ddcd3585ba84a.webp) 具体应用: * 客户端备份的时候生成备份,创建指纹信息 安全防护措施: 给命令和较为固定的配置设置md5,定期校验 作图为清理旧的备份服务端脚本 ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/3de7e40f90e6af48b979fa2460039c55.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/5a0ecd99243815d62db502a5dbeae603.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/e023a2fccbfd5bd3ccd37b8383f242dc.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/54f95d1df56c0ab9a25263e6168108b2.webp) ### rsync2022年漏洞 影响的版本:3.2.5版本验证不足情况 检查rsync版本: ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/a9f7021fbc1d41681b6def7ebdc7951f.webp) 检查yum源是否有新的rsync版本,在装yum最新版本之前,我们自己的rsync比它最新的版本很低: ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/f30f3a7e154919399ee04db962b2e099.webp) 去官网找rsync包:[下载 Samba](https://www.samba.org/samba/download/) [下载 Samba](https://www.samba.org/samba/download/)[rsync (samba.org)](https://rsync.samba.org/) https://rsync.samba.org/ ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/13792e30202a98ed3d970c3f501226c1.webp) 二进制别人已经弄好了,我们只需要进行解压使用,但是不一定能打开 [添加链接描述](https://download.samba.org/pub/rsync/binaries/) https://download.samba.org/pub/rsync/binaries/ ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/dc73c2d4c6b22dcbd6cee77199645b76.webp) 这里的版本还不能进行满足,下载这里最 新的rsync包,看是否还能进行满足: ##下载最新的rsync包 wget https://download.samba.org/pub/rsync/binaries/centos-7.9-x86_64/latest.tar.gz \[root@backup \~\]#tar tf latest.tar.gz \[root@backup \~\]#tree -F usr/ usr/ └── local/ ├── bin/ │ ├── rsync\* │ └── rsync-ssl\* └── share/ ├── doc/ │ ├── COPYING │ ├── NEWS.md │ └── README.md └── man/ ├── man1/ │ ├── rsync.1 │ ├── rsyncd.conf.5 │ └── rsync-ssl.1 └── man5/ ![在这里插入图片描述](https://file.jishuzhan.net/article/1793991556546433026/63a0ec9f6c77fda28c53f33c77f87988.webp) 会发现还是满足不了 * yum源不行 * 软件包不行 * 官网二进制也不行 * 我们使用最本制的方式:编译安装(这里有3.2.7的版本) 通过yum update rsync升级,查到的版本还是低,但是升级说不定修复了补丁(说不来)厂商已经发布升级补丁修复漏洞方式(不方便升级版本的时候使用补丁) 还是要进行改源代码--》回到本质还是编译 还可以通过漏洞扫描工具,针对具体漏洞具体处理

相关推荐
邪恶的贝利亚1 小时前
FFMEPG常见命令查询
linux·运维·网络·ffmpeg
搜搜秀1 小时前
find指令中使用正则表达式
linux·运维·服务器·正则表达式·bash
弧襪2 小时前
Ubuntu vs CentOS:Shell 环境加载机制差异分析
linux·ubuntu·centos
拉不动的猪2 小时前
设计模式之--------工厂模式
前端·javascript·架构
只会写Bug的程序员2 小时前
面试之《websocket》
网络·websocket·网络协议
christine-rr3 小时前
【25软考网工笔记】第二章 数据通信基础(1)信道特性 奈奎斯特 香农定理
网络·信息与通信·信号处理·软考
挣扎的蓝藻3 小时前
使用 Python 扫描 Windows 下的 Wi-Fi 网络实例演示
网络·windows·python
行思理3 小时前
centos crontab 设置定时任务访问链接
linux·运维·centos
阳光明媚大男孩3 小时前
24.0.2 双系统ubuntu 安装显卡驱动黑屏,系统启动界面键盘失灵
linux·ubuntu·计算机外设
无名之逆3 小时前
[特殊字符] Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案
服务器·开发语言·前端·网络·后端·http·rust