一、 企业案例: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