备份服务

一、备份服务概述

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

通过rsyncd服务,不同主机之间进行数据传输

rsyncd特点:

  • rsync是个服务,也是命令
  • 使用方便,有多种模式
  • 传输数据的时候是增量传输

增量与全量:

全量:无论数据多少,全部进行传输(scp)

增量:只会把修改,新建的文件进行传输(rsync)

  1. #使用方法:
  2. #全量
  3. [root@backup /data]# scp -r /etc/sysconfig/ root@10.0.0.31:/tmp/
  4. #注:-r表示递归传输
  5. #增量
  6. [root@backup /data]# rsync -avz /etc/sysconfig/ root@10.0.0.31:/opt/

二、Rsync应用场景

应用场景(业务场景) 应用建议
rsync作为命令使用 临时拉取,推送数据
定时任务:rsync服务+定时任务 定时备份(定时任务进行备份+通过rsync传输备份)
实时同步:rsync服务+sersync/lsyncd实现实时同步 解决存储服务单点问题
rsync服务与异地容灾 找一个异地的服务器存放备份

三、Rsync使用模式

模式 应用场景
本地模式(了解) 不推荐使用
远程模式 传输数据(临时使用可以使用scp替代)
rsync守护进程模式(daemon) 传输数据(不需要密码),用于定时备份,定时同步

四、rsync不同模式

1.rsync本地模式

  1. [root@backup ~]# rsync -a /etc/ /tmp/
  2. [root@backup ~]# ll /tmp/
  3. total 1092
  4. drwxr-xr-x 3 root root 101 Jan 9 09:05 abrt
  5. -rw-r--r-- 1 root root 16 Jan 9 09:09 adjtime
  6. -rw-r--r-- 1 root root 1529 Apr 1 2020 aliases
  7. -rw-r--r-- 1 root root 12288 Jan 9 09:12 aliases.db
  8. drwxr-xr-x 2 root root 261 Jan 9 10:15 alternatives
  9. -rw------- 1 root root 541 Aug 9 2019 anacrontab
  10. -rw-r--r-- 1 root root 55 Aug 8 2019 asound.conf
  11. [root@backup /tmp]# rsync -a /etc /tmp/
  12. [root@backup /tmp]# ll
  13. total 12
  14. drwxr-xr-x 81 root root 8192 Jan 10 16:29 etc

注意事项:

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

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

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

2.远程模式

1对于1远程传输数据

格式
rsync -a 源文件 目标
推送:rsync /etc/hostname root@10.0.0.31:/tmp
拉取:rsync root@10.0.0.31:/etc/hosts /tmp/
  1. #推送/etc/hostname 到10.0.0.31的/tmp/目录
  2. [root@backup ~]# rsync -a /etc/hostname root@10.0.0.31:/tmp
  3. The authenticity of host '10.0.0.31 (10.0.0.31)' can't be established.
  4. ECDSA key fingerprint is SHA256:fVjvhVF2qU+PCOqsrVTrbxa/aNB4dzNmGRJTw1iIZ1s.
  5. ECDSA key fingerprint is MD5:0f:00:32:1c:41:31:af:a2:f5:e8:64:40:2c:cf:98:98.
  6. Are you sure you want to continue connecting (yes/no)? yes
  7. Warning: Permanently added '10.0.0.31' (ECDSA) to the list of known hosts.
  8. root@10.0.0.31's password:
  9. [root@nfs ~]# ll /tmp/
  10. total 8
  11. -rw-r--r-- 1 root root 7 Jan 9 11:04 hostname

3.守护进程模式

3.1 服务使用流程

  1. 部署
  2. 配置
  3. 启动,使用
  4. 优化
  5. 故障
  6. 自动化(监控,日志,安全,自动部署,容器)

3.2检查是否安装

  1. #安装或更新
  2. [root@nfs ~]# yum -y install rsync
  3. #检查
  4. [root@nfs ~]# rpm -qa |grep rsync
  5. rsync-3.1.2-10.el7.x86_64
  6. #软件包内容
  7. [root@nfs ~]# rpm -ql rsync
  8. /etc/rsyncd.conf #配置文件
  9. /etc/sysconfig/rsyncd
  10. /usr/bin/rsync #命令
  11. /usr/lib/systemd/system/rsyncd.service #systemctl对应的配置文件

3.3进行配置

3.3.1 配置详解
  1. [root@backup ~]# cat /etc/rsyncd.conf
  2. fake super =yes #如果不开启,则centos7传输报错(伪装成root权限)
  3. uid = rsync #rsync运行用户 ,是虚拟用户 (常用)
  4. gid = rsync
  5. use chroot = no
  6. max connections = 2000 #最大连接数
  7. timeout = 600 #连接超时时间
  8. pid file = /var/run/rsyncd.pid #存放服务的pid号
  9. lock file = /var/run/rsync.lock #进程/服务的锁文件 防止重复运行
  10. log file = /var/log/rsyncd.log #rsync服务端日志 (常用)
  11. ignore errors #忽略错误
  12. read only = false #可以进行读写
  13. list = false #关闭rsync服务端列表功能
  14. #hosts allow = 10.0.0.0/24 #只准许那些ip或网段访问,相当于白名单 (常用)
  15. #hosts deny = 0.0.0.0/32 #拒绝那些网段访问 (常用)
  16. auth users = rsync_backup #rsync服务端进行验证用户:用户名 (常用)
  17. secrets file = /etc/rsync.password #rsync服务端进行密码验证:密码文件 (常用)
  18. #####################################
  19. [data] #模块名字,用户访问服务端的时候进行指定 (常用)
  20. comment = www by wh #注释说明 (常用)
  21. path = /data #模块对应的目录 (常用)
3.3.2 进行配置
  1. #修改rsyncd.conf 把原来的全删了,鼠标放在开头,按dG
  2. [root@backup ~]# cat /etc/rsyncd.conf
  3. fake super =yes
  4. uid = rsync
  5. gid = rsync
  6. use chroot = no
  7. max connections = 2000
  8. timeout = 600
  9. pid file = /var/run/rsyncd.pid
  10. lock file = /var/run/rsync.lock
  11. log file = /var/log/rsyncd.log
  12. ignore errors
  13. read only = false
  14. list = false
  15. #hosts allow = 10.0.0.0/24
  16. #hosts deny = 0.0.0.0/32
  17. auth users = rsync_backup
  18. secrets file = /etc/rsync.password
  19. #####################################
  20. [data]
  21. comment = www by wh
  22. path = /data
  23. #注:改文件后边不能接注释,要不会备份的时候会报错
3.3.3 后续配置
  1. #1.添加虚拟用户
  2. [root@backup ~]# useradd -s /sbin/nologin -M rsync
  3. [root@backup ~]# id rsync
  4. uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)
  5. #2.创建密码文件,文件名最好从配置文件复制
  6. #密码文件格式:用户名:密码
  7. [root@backup ~]# echo 'rsync_backup:1' >/etc/rsync.password
  8. [root@backup ~]# cat /etc/rsync.password
  9. rsync_backup:1
  10. #修改密码文件权限
  11. [root@backup ~]# chmod 600 /etc/rsync.password
  12. [root@backup ~]# ll -d /etc/rsync.password
  13. -rw------- 1 root root 15 Jan 10 17:16 /etc/rsync.password
  14. #3.创建备份目录并修改属主属组
  15. [root@backup ~]# mkdir -p /data/
  16. [root@backup ~]# chown -R rsync.rsync /data/
  17. [root@backup ~]# ll -d /data/
  18. drwxr-xr-x 2 rsync rsync 6 Jan 10 17:17 /data/
3.3.4 启动服务
  1. #启动服务
  2. [root@backup ~]# systemctl start rsyncd
  3. [root@backup ~]# systemctl enable rsyncd
  4. Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
  5. [root@backup ~]# systemctl status rsyncd
  6. rsyncd.service - fast remote file copy program daemon
  7. Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
  8. Active: active (running) since Tue 2023-01-10 17:12:23 CST; 15s ago
  9. Main PID: 1891 (rsync)
  10. CGroup: /system.slice/rsyncd.service
  11. └─1891 /usr/bin/rsync --daemon --no-detach
  12. Jan 10 17:12:23 backup systemd[1]: Started fast remote file copy program daemon.
  13. Jan 10 17:12:23 backup rsyncd[1891]: rsyncd version 3.1.2 starting, listening on port 873
  14. #查看进程
  15. [root@backup ~]# ps -ef|grep rsync
  16. root 1891 1 0 17:12 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
  17. root 1912 1712 0 17:13 pts/0 00:00:00 grep --color=auto rsync
  18. #查看端口
  19. tcp LISTEN 0 5 *:873 *:* users:(("rsync",pid=1891,fd=4))
  20. tcp LISTEN 0 5 [::]:873 [::]:* users:(("rsync",pid=1891,fd=5))
3.3.5 访问测试
  1. [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.41::data
  2. Password:
  3. sending incremental file list
  4. hosts
  5. sent 215 bytes received 43 bytes 172.00 bytes/sec
  6. total size is 329 speedup is 1.28
  7. [root@backup /data]# ll
  8. total 4
  9. -rw-r--r-- 1 rsync rsync 329 Jan 9 10:50 hosts
  10. rsync -avz /etc/hosts rsync_backup@10.0.0.41::data
  11. #服务端配置文件中的认证用户 #模块名字
3.3.6 免密的方式连接服务端(命令行指定客户端密码文件)必会
  1. #这个方法仅适用于守护进程模式
  2. #客户端创建密码文件并修改权限为600
  3. #密码文件格式:只写密码即可
  4. [root@nfs ~]# echo '1' > /etc/rsync.pass
  5. [root@nfs ~]# cat /etc/rsync.pass
  6. 1
  7. [root@nfs ~]# chmod 600 /etc/rsync.pass
  8. [root@nfs ~]# ll -d /etc/rsync.pass
  9. -rw------- 1 root root 2 Jan 10 17:45 /etc/rsync.pass
  10. [root@nfs ~]# rsync -avz /etc/hostname rsync_backup@10.0.0.41::data --password-file=/etc/rsync.pass
  11. sending incremental file list
  12. hostname
  13. sent 99 bytes received 43 bytes 284.00 bytes/sec
  14. total size is 4 speedup is 0.03
  15. [root@backup /data]# ll
  16. total 8
  17. -rw-r--r-- 1 rsync rsync 4 Jan 9 11:11 hostname
3.3.7 访问控制-安全措施

hosts allow 只准许指定的ip或网段访问.

hosts deny 拒绝.

  1. #配置只准许172.16.1.0/24 网段访问
  2. [root@backup /data]# cat /etc/rsyncd.conf
  3. fake super =yes
  4. uid = rsync
  5. gid = rsync
  6. use chroot = no
  7. max connections = 2000
  8. timeout = 600
  9. pid file = /var/run/rsyncd.pid
  10. lock file = /var/run/rsync.lock
  11. log file = /var/log/rsyncd.log
  12. ignore errors
  13. read only = false
  14. list = false
  15. #配置允许
  16. hosts allow = 172.16.1.0/24
  17. #hosts deny = 0.0.0.0/32
  18. auth users = rsync_backup
  19. secrets file = /etc/rsync.password
  20. #####################################
  21. [data]
  22. comment = www by wh
  23. path = /data
  24. [root@nfs ~]# rsync -avz /etc/hostname rsync_backup@10.0.0.41::data --password-file=/etc/rsync.pass
  25. @ERROR: Unknown module 'data'
  26. rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
  27. [root@nfs ~]# rsync -avz /etc/hostname rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
  28. sending incremental file list
  29. sent 51 bytes received 20 bytes 142.00 bytes/sec
  30. total size is 4 speedup is 0.06

4.uid,gid与auth user ,secert file

  1. 用户执行命令:

    1. [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.41::data --password-file=/etc/rsync.client
  2. 服务端收到数据:判断rsync_backup用户,然后等待输入密码

  3. 把用户名和密码与配置文件里面的进行对比

  4. 通过后,开始传输数据

  5. 数据到达服务器,所有者被修改为指定的uid和gid。(rsync)

  6. 数据写入data模块,也就是/data目录下面

五、rsync选项

选项 含义
-a -rlptgoD:
-r 递归复制
-l 复制软链接
-p 保持权限不变
-m 保持修改时间不变
-o 保持所有者不变
-g 用户组不变
-D --devices -pecials 设备与特殊文件
-v 显示过程
-z 传输数据的时候进行压缩
-P 显示每个文件的传输过程(进度条)断点续传
--bwlimit 限速,注意不要与-z一起使用,要不会失效
--exclude
--exclude-from
排除
--delete 目标目录与源目录保持一致的传输(慎用,比较危险)
  1. #限速并传输
  2. [root@nfs ~]# dd if=/dev/zero of=/tmp/500m bs=1M count=500
  3. [root@nfs ~]# rsync -aP --bwlimit=500 /tmp/500m rsync_backup@10.0.0.41::data --password-file=/etc/rsync.client
  4. sending incremental file list
  5. 500m
  6. 557,056 0% 500.00kB/s 0:17:27
  7. rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(638) [sender=3.1.2]
  8. 注:默认单位为kb
  9. #传输并排除
  10. [root@nfs ~]# touch {01..10}.txt
  11. [root@nfs ~]# ll
  12. total 0
  13. -rw-r--r-- 1 root root 0 Jan 10 20:13 01.txt
  14. -rw-r--r-- 1 root root 0 Jan 10 20:13 02.txt
  15. -rw-r--r-- 1 root root 0 Jan 10 20:13 03.txt
  16. -rw-r--r-- 1 root root 0 Jan 10 20:13 04.txt
  17. -rw-r--r-- 1 root root 0 Jan 10 20:13 05.txt
  18. -rw-r--r-- 1 root root 0 Jan 10 20:13 06.txt
  19. -rw-r--r-- 1 root root 0 Jan 10 20:13 07.txt
  20. -rw-r--r-- 1 root root 0 Jan 10 20:13 08.txt
  21. -rw-r--r-- 1 root root 0 Jan 10 20:13 09.txt
  22. -rw-r--r-- 1 root root 0 Jan 10 20:13 10.txt
  23. [root@nfs ~]# rsync -avz . rsync_backup@10.0.0.41::data --exclude={01,03.05}.txt
  24. Password:
  25. sending incremental file list
  26. ./
  27. .bash_history
  28. .bash_logout
  29. .bash_profile
  30. .bashrc
  31. .cshrc
  32. .tcshrc
  33. .viminfo
  34. 02.txt
  35. 03.txt
  36. 04.txt
  37. 05.txt
  38. 06.txt
  39. 07.txt
  40. 08.txt
  41. 09.txt
  42. 10.txt
  43. .pki/
  44. .pki/nssdb/
  45. .ssh/
  46. .ssh/known_hosts
  47. sent 3,542 bytes received 370 bytes 1,564.80 bytes/sec
  48. total size is 8,281 speedup is 2.12
  49. #保持源与目标数据一致
  50. [root@nfs ~]# rsync -avP --delete . root@10.0.0.41:/tmp/
  51. #以源为主

六、故障

1. rsync提示:"rsync: read error: Connection reset by peer (104)"

  1. [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.41::data
  2. sending incremental file list
  3. rsync: read error: Connection reset by peer (104)
  4. rsync error: error in socket IO (code 10) at io.c(785) [sender=3.1.2]
  5. #查看日志,日志也提示
  6. [root@backup ~]# tail -f /var/log/rsyncd.log
  7. tail: cannot open ‘/var/log/rsyncd.log for reading: No such file or directory
  8. tail: no files remaining
  9. #这时可以断定是/etc/rsyncd.conf出问题了
  10. #最后cat好几遍发现,多了一行。原来是复制笔记的时候,把cat复制进去了,哈哈哈哈

2. rsync提示:"The --password-file option may only be used when accessing an rsync daemo"

  1. [root@nfs ~]# rsync -avz /etc/hostname root@10.0.0.41:/data --password-file=/etc/rsync.pass
  2. The --password-file option may only be used when accessing an rsync daemon.
  3. rsync error: syntax or usage error (code 1) at main.c(1383) [sender=3.1.2]
  4. #原因:--password file选项只能在访问rsync守护进程时使用
  5. [root@nfs ~]# rsync -avz /etc/hostname rsync_backup@10.0.0.41::data --password-file=/etc/rsync.pass
  6. sending incremental file list
  7. hostname
  8. sent 99 bytes received 43 bytes 284.00 bytes/sec
  9. total size is 4 speedup is 0.03

3. rsync提示:"@ERROR: Unknown module 'data'"

  1. [root@nfs ~]# rsync -avz /etc/hostname rsync_backup@10.0.0.41::data --password-file=/etc/rsync.pass
  2. @ERROR: Unknown module 'data'
  3. rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
  4. #原因:10.0.0.41不在运行访问的网段

4. rsync提示:"Permission denied (13)"

  1. [root@nfs ~]# rsync -avz /etc/hostname rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
  2. sending incremental file list
  3. rsync: recv_generator: failed to stat "hostname" (in data): Permission denied (13)
  4. sent 51 bytes received 107 bytes 316.00 bytes/sec
  5. total size is 4 speedup is 0.03
  6. rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
  7. #selinux开启
  8. [root@backup ~]# getenforce
  9. Enforcing
  10. #修改/etc/selinux/config
  11. [root@backup ~]# vim /etc/selinux/config
  12. # This file controls the state of SELinux on the system.
  13. # SELINUX= can take one of these three values:
  14. # enforcing - SELinux security policy is enforced.
  15. # permissive - SELinux prints warnings instead of enforcing.
  16. # disabled - No SELinux policy is loaded.
  17. SELINUX=disabled #修改为disabled
  18. #修改文件后,重启生效

5.rsync提示:"@ERROR: auth failed on module data"

  1. [root@nfs ~]# rsync -avz /etc/hostname rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
  2. @ERROR: auth failed on module data
  3. rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
  4. #第一种:服务端配置文件
  5. [root@backup ~]# cat /etc/rsyncd.conf
  6. fake super =yes
  7. uid = rsync
  8. gid = rsync
  9. use chroot = no
  10. max connections = 2000
  11. timeout = 600
  12. pid file = /var/run/rsyncd.pid
  13. lock file = /var/run/rsync.lock
  14. log file = /var/log/rsyncd.log
  15. ignore errors
  16. read only = false
  17. list = false
  18. hosts allow = 172.16.1.0/24
  19. #hosts deny = 0.0.0.0/32
  20. auth users = rsync_backup
  21. secrets file = /etc/rsync.password
  22. #这个密码文件不存在或者名字错了
  23. #第二种:secrets file 密码文件权限不是600
  24. [root@backup ~]# ll -d /etc/rsync.password
  25. -rw-r--r--. 1 root root 15 Jan 10 17:16 /etc/rsync.password
  26. #第三种:secrets file 密码文件中内容不对
  27. #服务端:
  28. [root@backup /data]# cat /etc/rsync.password
  29. rsync_backup:1
  30. #服务端
  31. [root@nfs ~]# cat /etc/rsync.pass
  32. 1

6.rsync提示:"Operation not permitted (1)"

  1. [root@nfs ~]# rsync -avz /etc/hostname rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
  2. sending incremental file list
  3. rsync: chgrp "hostname" (in data) failed: Operation not permitted (1)
  4. sent 54 bytes received 97 bytes 302.00 bytes/sec
  5. total size is 4 speedup is 0.03
  6. rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
  7. [root@backup ~]# cat /etc/rsyncd.conf
  8. fake super =yes #配置文件少了这一行
  9. uid = rsync
  10. gid = rsync
  11. use chroot = no
  12. #改完记得重启服务

6.rsync提示:"rsync: mkstemp ".hostname.mgEkPz" (in data) failed: Permission denied (13)"

  1. [root@nfs ~]# rsync -avz /etc/hostname rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
  2. sending incremental file list
  3. hostname
  4. rsync: mkstemp ".hostname.mgEkPz" (in data) failed: Permission denied (13)
  5. sent 99 bytes received 122 bytes 442.00 bytes/sec
  6. total size is 4 speedup is 0.02
  7. rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
  8. #模板的共享目录的权限不对
  9. [root@backup /data]# ll -d /data/
  10. drwxr-xr-x. 2 root root 6 Jan 10 20:40 /data/
  11. #解决方案:
  12. [root@backup /data]# chown rsync.rsync /data
  13. [root@backup /data]# ll -d /data/
  14. drwxr-xr-x. 2 rsync rsync 6 Jan 10 20:40 /data/

7. rsync 提示 "chdir failed"

  1. [backup]
  2. comment = "备份文件夹"
  3. path = {{ rsync_dir }}
  4. [nfsbackup]
  5. comment = "nfs备份文件夹"
  6. path = {{ sersync_dir }}
  7. [root@nfs /data]# rsync -avz /data rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.client
  8. @ERROR: chdir failed
  9. rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
  10. #原因:
  11. 1. 备份存储目录没有建立
  12. 2. 建立的备份存储目录和配置文件定义不一致
  13. #我的问题是用ansible的变量的时候把变量加了引号

七、案例

项目要求: 定时备份nfs01,web01配置文件(etc,定时任务) /backup/ip地址/conf-时间.tar.gz 也可以说2个备份软件包.

定时备份nfs01,web01同步到backup服务器上/backup/

定时备份nfs01,web01删除7天之前的备份

在backup服务器,每天发送邮件备份结果(find或tree)

检查:邮箱是否收到邮件,检查备份服务器上是否收到了备份

  1. 自己写的
  2. [root@web01 /server/scripts]# cat conf_backup.sh
  3. #!/bin/bash
  4. #author: wh
  5. #desc: 备份etc、定时任务备份文件
  6. #version: V1
  7. #1.定义变量
  8. ip=`hostname -I|awk '{print $1}'`
  9. date=`date +%F`
  10. backup_dir=/backup/${ip}
  11. #2.创建备份目录
  12. mkdir -p ${backup_dir}
  13. #3.备份文件
  14. tar zcf ${backup_dir}/conf-${date}.tar.gz /etc/ /var/spool/cron/
  15. #4.推送到备份服务器
  16. echo '1' >/etc/rsync.pass
  17. chmod 600 /etc/rsync.pass
  18. rsync -az /backup rsync_backup@10.0.0.41::data --password-file=/etc/rsync.pass
  19. #5.删除7天之前的备份
  20. rm -rf `find ${backup_dir} -type f -mtime +7`
  21. [root@web01 /server/scripts]# crontab -e
  22. #2.定时备份etc和定时任务
  23. * * * * * sh /server/scripts/conf_backup.sh &>/dev/null
  24. [root@backup /server/scripts]# cat backup_result.sh
  25. #!/bin/bash
  26. #author: wh
  27. #desc: 定时任务结果脚本
  28. #version: V1
  29. tree /data/backup/ |mail -s "今日备份的结果" 459086748@qq.com

八、项目案例:全网备份项目

1.项目背景

上级领导要求对网站数据进行备份

接下来进行规划:备份什么内容?如何备份?如何收集备份(统一存放备份)?保留时间?服务器都是什么系统?系统都是什么版本?

备份什么?

  • 数据(用户) 数据库 存储

  • 配置文件

  • 脚本、代码

  • 网站代码

  • 日志收集

    ......

如何备份?

  • 打包压缩+定时任务

如何收集?

  • rsync服务收集备份(rsync客户端推送备份到rsync服务端)

2.项目流程

2.1环境准备

角色 主机 运行服务
存放备份 backup rsync服务端
生成备份 nfs01 rsync客户端,其他服务
生成备份 web01 rsync客户端,其他服务

2.2项目步骤

步骤说明 详细内容
1️⃣rsync服务端调试 服务端配置
2️⃣rsync客户端调试并写脚本 备份、推送、清理
3️⃣配置定时任务 定时任务运行脚本
4️⃣备份服务器检查并发送结果邮件 清理备份,检查备份并发送邮件

2.3 rsync服务端调试

  1. #配置文件加备份文件夹模块
  2. [root@backup ~]# vim /etc/rsyncd.conf
  3. [backup]
  4. comment = "备份文件夹"
  5. path = /backup
  6. #创建目录并修改属主属组
  7. [root@backup ~]# mkdir -p /backup
  8. [root@backup ~]# chown -R rsync.rsync /backup/
  9. [root@backup ~]# ll -d /backup/
  10. drwxr-xr-x 2 rsync rsync 6 Jan 11 14:51 /backup/
  11. #调试
  12. [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.41::backup --password-file=/etc/rsync.client
  13. sending incremental file list
  14. hosts
  15. sent 215 bytes received 43 bytes 516.00 bytes/sec
  16. total size is 329 speedup is 1.28
  17. [root@backup /backup]# ll
  18. total 4
  19. -rw-r--r-- 1 rsync rsync 329 Jan 9 10:50 hosts

2.4 客户端备份脚本

  1. #客户端准备密码文件
  2. [root@nfs /server/scripts]# cat /etc/rsync.client
  3. 1
  4. [root@nfs /server/scripts]# ll -d /etc/rsync.client
  5. -rw------- 1 root root 2 Jan 11 08:45 /etc/rsync.client
  6. #客户端准备脚本
  7. [root@nfs ~]# cat /server/scripts/back-conf.sh
  8. #!/bin/bash
  9. #author: wh
  10. #desc: 备份配置文件+定时任务+推送到rsync服务端
  11. #定义变量
  12. ip=`hostname -I|awk '{print $2}'`
  13. date=`date +%F`
  14. backup_dir=/backup/${ip}
  15. backup_filename=conf-${date}.tar.gz
  16. #rsync用户
  17. rsync_authUser=rsync_backup
  18. #rsync密码文件
  19. rsync_passwdFile=/etc/rsync.client
  20. #服务端ip
  21. rsync_serviceIP=172.16.1.41
  22. #创建备份目录
  23. mkdir -p ${backup_dir}
  24. #备份
  25. tar zcf ${backup_dir}/${backup_filename} /etc/ /var/spool/cron
  26. #生成md5sum校验文件
  27. md5sum ${backup_dir}/${backup_filename} > ${backup_dir}/conf.md5
  28. #推送到rsync服务端
  29. rsync -az ${backup_dir} ${rsync_authUser}@${rsync_serviceIP}::backup --password-file=${rsync_passwdFile}
  30. #删除7天之前的备份
  31. rm -f `find ${backup_dir} -type f -name "*.tar.gz" -mtime +7`

2.5 服务端脚本

  1. #发送邮件配置:参考定时任务 八.3
  2. [root@backup /server/scripts]# cat check_backup.sh
  3. #!/bin/bash
  4. #author: wh
  5. #desc: 删除备份+检查备份+发送备份结果到邮箱
  6. #定义变量
  7. #执行结果路径
  8. result_file=/server/scripts/result.txt
  9. date=`date +%F`
  10. #删除180天之前的备份
  11. rm -f `find /backup -type f -name "*.tar.gz" -mtime +180 `
  12. #统计备份结果
  13. find /backup/ -type f -name "*.tar.gz" |xargs ls -lhd|awk -F '[ /]' 'BEGIN{print "ip地址 ","备份文件名字","大小"}{print $(NF-1),$NF,$5}'|column -t > ${result_file}
  14. #md5sum校验
  15. find /backup/ -name 'conf.md5'|xargs md5sum -c >>${result_file}
  16. #发送邮件
  17. mail -s "${date}备份结果" 459086748@qq.com <${result_file}

2.6 校验功能

md5sum

客户端备份的时候生成备份,创建指纹信息md5sum

安全防护措施

给命令和较为固定的配置,设置md5,定期校验

  1. #单个文件的md5信息保存与校验
  2. [root@backup ~]# echo '1' > oldboy.txt
  3. [root@backup ~]# md5sum oldboy.txt >oldboy.md5
  4. [root@backup ~]# md5sum -c oldboy.md5
  5. oldboy.txt: OK
  6. [root@backup ~]# echo '2' > oldboy.txt
  7. [root@backup ~]# md5sum -c oldboy.md5
  8. oldboy.txt: FAILED
  9. md5sum: WARNING: 1 computed checksum did NOT match
  10. #通过find实现多个文件md5信息保存与校验
  11. [root@backup ~]# find /etc/ -type f |xargs md5sum >etc.md5
  12. [root@backup ~]# md5sum -c etc.md5
  13. [root@backup ~]# md5sum --quiet -c etc.md5
  14. /etc/rsyncd.conf: FAILED
  15. md5sum: WARNING: 1 computed checksum did NOT match
  16. -c #相当于--check,校验
  17. --quiet #只显示有问题的数据
  18. md5sum -c 说明 check 根据md5文件记录进行对比
  19. md5 路径/名字
  20. 3fe396c01f03425cb5e2da8186eb090d oldboy.txt
  21. #注:相同的文件内容 md5值是一样的

3.项目总结

对网站的核心数据进行备份

使用的核心栈:rsync备份服务,定时任务,md5sum,邮件,脚本,三剑客,tar,find

Linux备份服务的更多相关文章

  1. Linux(9):期中架构(1)--- 集群构架 & 备份服务

    01. 了解集群架构服务器组成 基本架构组成:(用于让用户进行访问) # 前端服务部分: 1)顾客-用户 是一个访问者,请求访问网站页面 2)保安-防火墙设备 对访问架构用户进行策略控制,正常访问网站 ...

  2. Azure Backup (3) 使用Azure备份服务,备份Azure虚拟机

    <Windows Azure Platform 系列文章目录> 本将介绍,如何使用Azure备份服务,备份Azure虚拟机. 我们先预先创建2台Windows VM (命名为LeiVM00 ...

  3. linux系统设置服务开机启动3种方法,Linux开机启动程序详解

    linux系统设置服务开机启动 方法1:.利用ntsysv伪图形进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图     方法2:利用命令行chkconfig命令进行设置 简要说明 ...

  4. Kali Linux常用服务配置教程安装及配置DHCP服务

    Kali Linux常用服务配置教程安装及配置DHCP服务 在Kali Linux中,默认没有安装DHCP服务.下面将介绍安装并配置DHCP服务的方法. 1.安装DHCP服务 在Kali Linux中 ...

  5. 微软Azure虚拟机备份服务在中国发布

    近期,Azure虚拟机备份服务在微软智能云上发布. 相关功能阐述: Azure IaaS虚拟机备份服务针对Windows操作系统,提供了应用一致性的备份技术:同时针对Linux操作系统,提供了文件系统 ...

  6. Rsync备份服务实战

    目录 Rsync备份服务实战 一.Rsync 二.rsync的应用场景 1.Rync的数据同步模式 2.rsync的三种模式 三.rsync配置服务端客户端 四.rsync实战 实战一 报错解决方法: ...

  7. day27 综合架构 rsync备份服务

    sync软件使用方法: rsync命令 1v4 a 本地备份数据 cp [root@nfs01 backup]# cp /etc/hosts /tmp [root@nfs01 backup]# ll ...

  8. Linux基础服务——Bind DNS服务 Part2

    Linux基础服务--Bind DNS服务 Part2 DNS反向解析与区域传送 实验环境延续Part1的实验环境. 反向区域配置 正向解析是域名到IP地址的映射,反向解析则是IP地址到域名的解析,在 ...

  9. linux jexus 服务 设置开机启动

    linux的服务开机设置一般在 /etc/init.d/里 而jexus的默认安装目录在 /usr/jexus里 启动文件为 jws 参数 有start stop restart 这里贡献一个刚写好的 ...

  10. Azure Backup (2) Azure备份服务

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. 本文介绍的Azure管理界面是Classic Model,网址:h ...

随机推荐

  1. 第一百零七篇:基本数据类型(undefined,null,boolean类型)

    好家伙, 本篇内容为<JS高级程序设计>第三章学习笔记 1.数据类型 ECMAScript有6种简单数据类型(称为原始类型): Undefined, Null, Boolean, Numb ...

  2. 修改input标签里面的提示文字(placeholder)的样式

    使用 ::-webkit-input-placeholder 伪类 input::-webkit-input-placeholder{ // 修改字体大小 font-size:12px; // 修改文 ...

  3. mybatis-plus分页失效原因

    mybatis-plus分页失效解决方法 方法一.在启动类添加如下配置 @SpringBootApplication @MapperScan("com.**.mapper") pu ...

  4. 基于python的数学建模---轮廓系数的确定

    直接上代码 from sklearn import metrics import matplotlib.pyplot as plt from sklearn.cluster import KMeans ...

  5. 图文并茂解释开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

    世界上的开源许可证(Open Source License)大概有上百种,而我们常用的开源软件协议大致有GPL.BSD.MIT.Mozilla.Apache和LGPL. 从下图中可以看出几种开源软件协 ...

  6. Class文件解析

    1 准备工作 获取class文件byte[] public static byte[] getFileBytes(File file) { try (FileInputStream fileInput ...

  7. js-day04-作业

    // -------------------------Day04homework 大练习------------------------ #### 练习题1: * 显示用户输入内容 * 要求: 1. ...

  8. TypeScript 之 Interface

    Interface 描述:用来描述对象的形状,能够被继承 常用语法 ( Common Syntax ) 1. 描述普通对象 interface JsonResponse { version:numbe ...

  9. Vue中关于数组与对象修改触发页面更新的机制与原理简析

    Vue中关于数组与对象修改触发页面更新的机制与原理简析 相关问题 数组 使用索引直接赋值与直接修改数组length时,不会触发页面更新. 例如: <script> export defau ...

  10. Docker进阶-Dockerfile建立一个自定义的镜像执行自定义进程

    前言 docker对我来说是一个很方便的工具,,上一篇文章也写了docker基本的一些使用,这篇文章重点描述一下Dockerfile的使用,从零建立一个自己定制化的镜像,并可以执行我们需要的任务. 作 ...