第36课 rsync全网备份项目实战 2019-05-21

一、 企业案例:rsync上机实战考试题:

web01 10.0.0.7
backup 10.0.0.41
某公司里有一台Web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份。要求如下:
每天晚上12点整在Web服务器A(web01 )上打包备份网站程序目录并通过rsync命令推送到服务器B(backup)上备份保留(备份思路可以是先在本地按日期打包,然后再利用rsync推到备份服务器上)。
rsync守护进程模式
定时任务 (脚本)
具体要求如下:
客户端:
1)Web服务器A和备份服务器B的备份目录必须都为/backup。
2)Web服务器站点目录假定为(/var/www/html)。
3)Web服务器本地仅保留7天内的备份。
服务器端:
4)备份服务器上每周六的数据都保留,其他备份仅保留180天备份。
5)备份服务器上检查备份结果是否正常(备份内容变?),并将每天的备份结果发给管理员信箱。

二、前期基础环境准备思路:

2.1 第一步先要把服务器端的rsync服务和虚拟用户rsync、块目录backup、密码文件/etc/rsync.password等的环境创建好:

2.1.1 客户端想要进行守护进程推文件到服务器,首先需要确保服务器端的rsync服务已经开启;

2.1.1 .1 先配置vim /etc/rsyncd.conf文件

##Rsync server
##created by oldboy 15:01 2009-6-5
##rsyncd.conf start##
fake super = yes
uid = rsync  (uid指定rsync运行的用户,虚拟用户)
gid = rsync  (gid指定rsync运行的用户,虚拟用户)

use chroot = no
max connections = 2000(最大连接数)
timeout = 600 (超时时间)
pid file = /var/run/rsyncd.pid(pid进程号)
lock file = /var/run/rsync.lock(锁文件,两个窗口同时运行yum)
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(deny拒绝)
auth users = rsync_backup(指定认证用户,虚拟不存在)
secrets file = /etc/rsync.password(密码文件)
#####################################
[backup](data模块一般与目录的名字相同)
comment = www by old0boy 14:18 2012-1-13
path = /backup (指定共享目录)

2.1.1.2 配置完 /etc/rsyncd.conf文件后,重启服务

systemctl restart  rsyncd (重启服务)

systemctl  enable rsycd     (开机自启动服务)

2.1.1.3 查看是否启动和开机自启动

[root@backup ~]# systemctl status  rsyncd
● rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-05-21 14:56:27 CST; 4h 36min ago
 Main PID: 8891 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─8891 /usr/bin/rsync --daemon --no-detach

May 21 14:56:27 backup systemd[1]: Stopped fast remote file copy program daemon.
May 21 14:56:27 backup systemd[1]: Started fast remote file copy program daemon.
[root@backup ~]# systemctl is-enabled  rsyncd
enabled

2.1.1.4 查看进程与端口是都开启

root@backup ~]# ps -ef |grep rsync 
root       9749      1  0 16:12 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
root       9751   9490  0 16:13 pts/1    00:00:00 grep --color=auto rsync
[root@backup ~]# ss -lntup|grep rsync 
tcp    LISTEN     0      5         *:873                   *:*                   users:(("rsync",pid=9749,fd=3))
tcp    LISTEN     0      5        :::873                  :::*                   users:(("rsync",pid=9749,fd=5))

2.1.2 需要创建虚拟用户rsync;

[root@backup ~]#    useradd  -M -s /sbin/nologin  rsync

2.1.3 需要给服务器端创建backup块目录,并更改rsync的用户主与用户组;

[root@backup ~]#    mkdir  /backup
[root@backup ~]# chown  rsync.rsync  /backup

2.1.4 创建密码文件/etc/rsync.password,并写入密码,然后授权600的权限

[root@backup ~]# echo "rsync_backup:123456'" >/etc/rsync.password
[root@backup ~]# chmod  600  /etc/password
2.2 给客户端需要配置密码文件/etc/rsync.password并修改600权限和创建/var/www/html
[root@nfs01 ~]# echo "123456" >/etc/rsync.password
[root@nfs01 ~]# chmod  600  /etc/password
[root@nfs01 ~]# mkdir -p  /var/www/html

完成2.1和2.2的操作以后,就对服务器端和客户端最基本的环境创建完成,现在开始做项目!!!

三、项目实战思路:

3.1 在客户端下进行:先给客户端在/backup下创建以ip命名的目录、用时间打包压缩/var/www/html目录、记录指纹md5sum、推送到服务器的块目录backup、然后对客户端本地7天外的文件进行删除:

3.1.1 先在客户端的/backup下用本机ip命名目录:

[root@web01 ~]# IP=$(hostname -I |awk '{print $NF}')
[root@web01 ~]# echo $IP
172.16.1.7
[root@web01 ~]# mkdir -p /backup/$IP

3.1.2 用时间打包/var/www/html 文件:

[root@web01 ~]# tar zcf /backup/$IP/$(date +%F_%w).tar.gz   /var/www/html

3.1.3 记录指纹信息,重定向到/backup/$IP/web01.md5中:

[root@web01 ~]# find /backup/  -type f -name '*.tar.gz' |xargs md5sum  >/backup/$IP/web01.md5

3.1.4 把/backup目录下的内容全部同送到服务器的/backup中:

[root@web01 ~]# rsync -avz /backup/  rsync_backup@10.0.0.41::backup  --password-file=/etc/rsync.password

3.1.5 对/backup目录下的文件,只保留7天内的,其余的删除:

[root@web01 ~]#  find  /backup/ -type f -name '*.tar.gz'  -mtime  +7 |xargs  rm -rf 

3.1.6 以上5步运行没问题后,写入脚本文件/server/scripts/bak.sh(需要自行创建):

[root@web01 ~]# vim    /server/scripts/bak.sh 
#!/bin/bash
.   /etc/profile

IP=$(hostname -I |awk '{print $NF}')
#mkdir dir
mkdir -p /backup/$IP
#tar
tar zcf /backup/$IP/$(date +%F_%w).tar.gz   /etc/  /var/www/html
#make md5
find /backup/  -type f -name '*.tar.gz' |xargs md5sum  >/backup/$IP/web01.md5
#rsync.server 
rsync -avz /backup/  rsync_backup@10.0.0.41::backup  --password-file=/etc/rsync.password
#del 7 day ago  files
find  /backup/ -type f -name '*.tar.gz'  -mtime  +7 |xargs  rm

3.1.7 运行脚本没问题后,写定时任务:

[root@web01 ~]# crontab -e

# * * * * *  /bin/sh /server/scripts/bak.sh   >/dev/null   2>&1
~                                                                   

以上的所有操作就完成了客户端的配置,接下来需要去服务器端收数据、验证指纹信息等

3.2 在服务器下进行:先需要检查服务器下的/backup是否收到客户端推送的数据、验证指纹信息、保留180内的数据和每周六的数据、将备份的结果发送到邮箱:

3.2.1 先检查在/backup下是否收到客户端推送的数据:

[root@backup ~]# ll  /backup
total 8
drwxr-xr-x 2 rsync rsync   50 May 21 17:40 172.16.1.7

3.2.2 进行指纹验证(2种方法均可以实现验证):

[root@backup ~]# md5sum -c  /backup/*/*.md5 >/backup/result.txt
[root@backup ~]# find /backup/  -type  f -name "*.md5"|xargs md5sum -c

3.2.3 删除180前的文件但是要保留每周6的文件:

[root@backup ~]# find  /backup/ -type f  -name "*.tar.gz"  ! -name "*-6.tar.gz"  -mtime +180  |xargs rm

3.2.4 发送邮件:

[root@backup ~]# mail  -s "Backup check result"  lidao996@163.com    </backup/result.txt

3.2.5 验证以上信息可执行后,写入脚本文件/server/scripts/check.sh(需要自行创建):

[root@backup ~]# vim /server/scripts/check.sh
#!/bin/bash
. /etc/profile

#check
md5sum -c  /backup/*/*.md5  >/backup/result.txt
# find /backup/  -type  f -name "*.md5"|xargs md5sum -c

#del 180 ago
find  /backup/ -type f  -name "*.tar.gz"  ! -name "*-6.tar.gz"  -mtime +180  |xargs rm

#send mail 
mail  -s  "Backup check result"  lidao996@163.com    </backup/result.txt

3.2.6 运行脚本没问题后,写定时任务:

[root@backup ~]# crontab -e
# * * * * *  /bin/sh /server/scripts/check.sh   >/dev/null   2>&1
~                                                                   

四、邮件服务启用时候需要进行如下操作:

4.1 检查服务是否正在运行、是否开机自启:
[root@backup ~]# systemctl restart postfix.service 
[root@backup ~]# 
[root@backup ~]# systemctl is-active postfix.service 
active
[root@backup ~]# systemctl is-enabled  postfix.service 
enabled
4.2 进行服务配置如下:
vim /etc/mail.rc 
set from=lidao996@163.com  smtp=smtp.163.com    smtp-auth-user=lidao996    smtp-auth-password=oldboyedu123   smtp-auth=login
4.3 重启服务:
systemctl restart postfix.service
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容