3、综合架构详解-备份服务

2020-12-13  本文已影响0人  一个反派人物

1 rsync服务

1.1 作用

依靠rsync服务
1)进行数据备份
2)进行日志统一保存

可实现全量及增量的本地或远程数据同步备份,本地和对端都需要安装rsync

1.2 命令用法

rsync 可以替代4个命令cpscprmls

1.本地备份
Local:  rsync [OPTION...] SRC... [DEST]

2.远程备份
Access via remote shell:
拉取数据         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推送数据         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

3.守护进程方式
1)可以进行一些配置管理
2)可以进行安全策略管理
3)可以实现自动传输备份数据
Access via rsync daemon:
         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST


4.常用参数:
`-r` 递归拷贝
`-p` 保留文件属性
`--delete` 删除目标文件夹内多余的文件

rsync 在使用-r参数拷贝目录时:
1)目录后面带/,会忽略目录本身,直接拷贝目录下的文件
2)目录后面不带/,会连同目录本身一同拷贝

1.2.1 替代cp

rsync 源文件 目标文件

# 拷贝test目录下的所有文件,不包括test目录本身
rsync -rp test/ /tmp/

1.2.2 替代scp

rsync 源文件 [用户@]IP地址:/目标文件

# 拷贝/etc/yum.repos.d目录下的所有文件,包括yum.repos.d目录本身
rsync -rp /etc/yum.repos.d  root@10.0.0.1:/tmp/

1.2.3 替代rm,可用于快速清除目录

需要事先准备一个空目录
rsync -rp --delete 空目录 [用户@][IP地址:/]目标目录

null 是一个空目录,清空test目录
rsync -rp --delete null/  test/

1.2.4 替代ls

rsync 文件/目录 相当于ls -al的效果

[root@node1 ~]$  rsync ~/
dr-xr-x---          4,096 2020/12/12 21:24:47 .
-rw-------            169 2020/12/12 17:24:45 .Xauthority
-rw-------         23,264 2020/12/12 16:29:54 .bash_history
-rw-r--r--             18 2013/12/29 10:26:31 .bash_logout
-rw-r--r--            176 2013/12/29 10:26:31 .bash_profile
-rw-r--r--            176 2013/12/29 10:26:31 .bashrc
-rw-r--r--            100 2013/12/29 10:26:31 .cshrc
-rw-------             67 2020/12/05 21:28:41 .lesshst
-rw-------         24,420 2020/12/03 21:07:34 .mysql_history
-rw-r--r--            129 2013/12/29 10:26:31 .tcshrc
-rw-------          5,651 2020/12/12 15:43:30 .viminfo
-rw-r--r--          1,398 2020/08/30 13:59:51 anaconda-ks.cfg
-rw-r--r--      7,990,576 2020/11/11 15:45:54 percona-xtrabackup-24-2.4.21-1.el7.x86_64.rpm
drwxr-xr-x            114 2020/11/07 19:04:37 .cache
drwxr-xr-x             75 2020/10/01 19:59:54 .config
drwx------             25 2020/10/01 19:54:30 .dbus
drwxr-xr-x             17 2020/10/26 10:50:25 .ipa
drwxr-xr-x             19 2020/10/01 19:59:54 .local
drwx------             66 2020/11/07 19:04:38 .mozilla
drwxr-----             19 2020/10/01 20:14:09 .pki
drwx------             80 2020/10/01 18:56:07 .ssh
drwxr-xr-x             57 2020/10/09 12:50:20 .targetcli
drwxr-xr-x              6 2020/12/12 21:24:47 null
drwxr-xr-x              6 2020/12/12 21:25:07 test

1.3 rsync守护进程模式---服务端

1.3.1 服务端创建流程

1.3.1.1 服务端配置文件

/etc/rsyncd.conf

uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200 
timeout = 300 
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 = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir "
path = /backup

参数解释:

uid = rsync                            管理守护进程及备份目录的用户
gid = rsync                            管理守护进程及备份目录的用户组
port = 873                             rsync服务的端口号,默认873
fake super = yes                       将rsync用户伪装成一个超级管理员
use chroot = no                        和安全相关的配置
max connections = 200                  最大连接数
timeout = 300                          超时时间
pid file = /var/run/rsyncd.pid         记录进程号码信息:1.让程序快速停止服务 2.判断一个服务是否在运行
lock file = /var/run/rsync.lock        锁文件
log file = /var/log/rsyncd.log         rsync服务的日志文件
ignore errors                          忽略传输中的简单错误
read only = false                      指定备份目录可读可写
list = false                           客户端是否可以查看服务端的模块信息
hosts allow = 172.16.1.0/24            允许传输备份数据的主机(白名单)
hosts deny = 0.0.0.0/32                禁止传输备份数据的主机(黑名单)
auth users = rsync_backup              指定认证用户
secrets file = /etc/rsync.password     指定认证用户密码文件
[backup]                               模块信息
comment = "backup dir "                模块描述
path = /backup                         指定备份目录

1.3.1.2 创建rsync服务虚拟用户

useradd rsync -M -s /sbin/nologin

1.3.1.3 创建认证用户密码文件

/etc/rsync.password,格式为用户名:密码

echo "rsync_backup:123456" > /etc/rsync.password
chmod 600 /etc/rsync.password

1.3.1.4 创建备份目录

mkdir /backup
chown rsync.rsync /backup

1.3.1.5 启动服务

systemctl restart rsyncd
systemctl enable rsyncd

1.3.2 服务端多模块

/etc/rsyncd.conf配置多个备份模块,每个模块对应不同的备份目录

...
[backup]
comment = "backup dir "
path = /backup
[dba]
comment = "backup dir for dba"
path = /dba
[develop]
comment = "backup dir for develop"
path = /develop

1.3.3 白名单、黑名单

先匹配白名单、再匹配黑名单、最后匹配默认策略
如果不配置黑名单,默认是deny
如果不配置白名单,默认是accept
同时配置黑白名单,默认是accept

1.4 rsync守护进程模式---客户端

1.4.1 创建客户端密码文件

格式为密码

echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password

1.4.2 客户端命令

Access via rsync daemon:
客户端做拉的操作:恢复数据
     Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
           rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
客户端做推的操作:备份数据
     Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
           # SRC:要推送备份的数据
           # [USER@]:指定认证用户
           # HOST:远程主机IP地址
           # ::DEST:备份服务器的模块
           rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

常用参数:
-v --verbose       显示详细传输信息
-a --archive       归档参数,包含:rtopgDl
-r --recurisive    递归
-t --times         保持文件属性信息时间信息不变
-o --owner         保持文件属主信息不变
-g --group         保持文件属组信息不变
#让-o和-g参数生效,需要将服务端配置文件uid和gid改成root,同时注释fake super参数
-p --perms         保持文件权限信息不变
-D --device        保持设备文件信息不变
-l --links         保持软链接文件属性不变,拷贝软链接文件本身
-L                 保持软链接文件数据信息不变,拷贝软链接指向文件的实际数据
-P                 显示数据传输进度
--exclude=PATTERN  排除指定数据
--exclude-from=file 排除指定数据(批量)
--bwlimit=RATE     限制传输带宽
--delete           无差异传输,保持目标与源目录内文件一致
-z --compress      传输时压缩数据
--password-file=   客户侧密码文件

1.4.2.1 备份时生成1级子目录

rsync [OPTION...] SRC... [USER@]HOST::DEST/子目录/,只能创建1级子目录,无法创建多级目录

在向备份服务器备份时,生成一级本机ip地址10.0.0.31子目录
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/10.0.0.31/ --password-file=/etc/rsync.password

1.4.2.2 排除

--exclude= 使用相对路径或绝对路径排除一个文件或文件夹,要批量排除要写多个--exclude=选项

--exclude-from=通过读入文件,批量排除。文件中每行以相对路径或绝对路径的方式写入要排除的文件或目录

1.4.2.3 查看服务端的模块列表

当服务端配置list = true时,用rsync [USER@]HOST::可以查看服务端全部模块

rsync rsync_backup@172.16.1.0::

1.4.2.4 例子

1)使用密码文件备份

rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

2)备份/tmp目录,排除目录下的f1.txt文件(相对路径)和f2.dir(绝对路径)目录

rsync -avz /etc/tmp --exclude=f1.txt --exclude=/tmp/f2.dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

3)备份/tmp目录,使用文件进行批量排除目录下f2.dir/f3.txt文件

vim /tmp/exclude.txt
exclude.txt
f2.dir/f3.txt

rsync -avz /tmp --exclude-from=/tmp/exclude.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

2 备份项目

2.1 需求

服务器说明 外网IP 内网IP 名称
nginx web服务器 10.0.0.7 172.16.1.7 web01
nfs 存储服务器 10.0.0.31 172.16.1.31 nfs01
rsync 备份服务器 10.0.0.41 172.16.1.41 backup

要求:每天晚上0点整在web服务器上打包系统配置文件、网站程序目录及访问日志并通过rsync推送备份服务器backup上备份保存(先本地按日期打包,再推送到备份服务器上),NFS存储服务器同web服务器。

具体要求如下:
1)所有服务器的备份目录都为/backup
2)要备份的系统文件包括但不限于:
 a.定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)
 b.开机自动启动配置文件(/etc/rc.local)(适合web和nfs服务器)
 c.日常脚本的目录(/server/scripts)
 d.防火墙iptables的配置文件(/etc/sysconfig/iptables-config)
3)web服务器的站点目录假定为/var/html/www
4)web服务器app访问日志路径假定为/app/logs
5)web服务器保留打包后的7天的备份数据即可(本地保留不能多于7天,太多会占硬盘空间)
6)备份服务器上,保留每周一的所有副本数据,其他要保留6个月的数据副本
7)备份服务器上,要按照备份数据服务器的内网IP作为目录保存备份,备份的文件按照时间名称保存
8)需要确保备份的数据尽量完整正确,在备份服务器上对备份数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中

2.2 完成步骤

1)web服务器

#准备一些不存在的目录
mkdir -p /server/scripts
mkdir -p /var/html/www
mkdir -p /app/logs

#准备rsync 密码文件
echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password


#!/bin/bash
#backup env
Backup_dir="/backup"
localaddr=`hostname -I | awk '{print $1}'`

#create backup dir
mkdir -p $Backup_dir/$localaddr

#tar backup data
tar -zchf $Backup_dir/$localaddr/system_backup_`date -d -1day +%F_%A`.tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /etc/sysconfig/iptables-config &> /dev/null
tar -zchf $Backup_dir/$localaddr/www_backup_`date -d -1day +%F_%A`.tar.gz  /var/html/www &> /dev/null
tar -zchf $Backup_dir/$localaddr/app_backup_`date -d -1day +%F_%A`.tar.gz  /app/logs &> /dev/null

#del 7 days ago data
find $Backup_dir/$localaddr/ -type f  -mtime +7  -exec rm -rf {} \;

#create md5 finger file
find $Backup_dir/ -type f ! -name "finger.txt" -mtime -1 -exec md5sum {} \; > $Backup_dir/$localaddr/finger.txt

#push backup data
rsync -az $Backup_dir/$localaddr rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

2)nfs服务器

#准备一些不存在的目录
mkdir -p /server/scripts

#准备rsync 密码文件
echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password

#!/bin/bash
#backup env
Backup_dir="/backup"
localaddr=`hostname -I | awk '{print $1}'`

#create backup dir
mkdir -p $Backup_dir/$localaddr

#tar backup data
tar -zchf $Backup_dir/$localaddr/system_backup_`date -d -1day +%F_%A`.tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /etc/sysconfig/iptables-config &> /dev/null

#del 7 days ago data
find $Backup_dir/$localaddr/ -type f  -mtime +7  -exec rm -rf {} \;

#create md5 finger file
find $Backup_dir/ -type f ! -name "finger.txt" -mtime -1 -exec md5sum {} \; > $Backup_dir/$localaddr/finger.txt

#push backup data
rsync -az $Backup_dir/$localaddr rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

3)备份服务端配置

#!/bin/bash
#backup env
Backup_dir="/backup"

#del 6 months ago data and keep Monday data
find $Backup_dir -type f -mtime +180 ! -name "*Monday.tar.gz" | xargs rm 2> /dev/null

#check backup data and create result
find $Backup_dir/ -type f -name "finger.txt" | xargs md5sum -c > /tmp/result.txt

#send mail 
mail -s "backup check for `date -d -1day +%F`" 18204317839@139.com < /tmp/result.txt
上一篇 下一篇

猜你喜欢

热点阅读