随着项目的推进,备份服务器被提上了工作日程,等保、密评和接入测评对备份服务器都提出了要求。
数据备份的意义就在于,当受到网络攻击、入侵、电源故障或者操作失误等事故的发生后,可以完整、快速、简捷、可靠地恢复原有系统,在一定的范围内保障系统的正常运行。
标准的可以认为比较安全的数据备份策略,应当是一份本地一份远程,根据数据重要程度,长则每天,短则每小时备份一次。因为数据库目前采用了云服务商提供的RDS服务,服务自带数据备份功能,所以本篇针对服务器上的应用服务的备份搭建。
不同机房和不同网络区域采取本地备份和远程交叉备份的方式备份数据
备份服务器允许您制作数据、文件或应用程序的副本。备份涉及用于存储的硬件和软件以及检索服务。如果定期进行——数据安全专家建议每天至少备份一次——这对于最大限度地减少因数据丢失而造成的业务中断大有帮助。
备份规则:
备份服务器选用rsync服务搭建,Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具, rsync 在 GNU 通用公共许可证下免费提供,目前由 Wayne Davison 维护。
工作方式
Rsync大致使用三种主要的传输数据的方式:
序号 | 项目 | 版本 |
---|---|---|
1 | CentOS Linux release | 7.6.1810 (Core) |
2 | Rsync | version 3.1.2 |
部署采用同一个网络下,一台服务端多台客户端的方式进行部署操作。
查看服务器是否安装rsync
# rpm -qa rsync
rsync-3.1.2-10.el7.x86_64
注意:一般的系统部署好yum仓库后,rsync服务是自动安装好的,所以可以使用rpm -qa rsync直接查看是否已经安装。如果已经安装,则不需要执行此步骤。如果输入以上命令后查询不到任何信息,则需要安装rsync服务。
yum install -y rsync
创建用户
useradd rsync -s /sbin/nologin -M
-M 指定此用户为虚拟用户
-s 指定此用户的解释器
/sbin/nologin 指此用户无法登陆
创建目录,如果有目录可不用创建
mkdir /data/rsync
目录赋权限
chown -R rsync:rsync /data/rsync
配置主要围绕rsync
守护进程的配置文件/etc/rsyncd.conf
调整
备份配置文件
[root@backuphost backup]# cp /etc/rsyncd.conf{,.bak}
调整备份文件
uid = rsync # 指定用户
gid = rsync # 指定用户组
use chroot = no # 安全相关配置
timeout = 300 # 超时时间,客户端超过300秒没有发送数据,服务器断开连接
ignore errors # 忽略传输中的简单错误
list = false # 客户端查看服务端的模块信息
max connections = 46 # 最大连接数
fake super = yes # 将rsync虚拟用户伪装成一个超级管理员用户
read only = false # 指定备份目录可读可写
pid file = /var/run/rsyncd.pid # 进程信息标识
lock file = /var/run/rsync.lock # 锁文件
log file = /var/log/rsyncd.log # 日志文件
hosts allow = 172.30.1.0/24 # 允许传输设备备份的主机(白名单)
hosts deny = 0.0.0.0/32 # 禁止传输设备备份的主机(黑名单)
secrets file = /etc/rsync.password # 认证用户密码文件 格式用户名:密码 密码不超过8位
[backup] # 模块名称
path = /data/rsync # 指定服务端备份目录
创建备份服务器的认证密码文件
echo 'rsync:Xyyyzz@1' > /etc/rsync.pasword
chmod 600 /etc/rsync.password
启动备份服务
systemctl restart rsyncd # 启动rsync服务
systemctl enable rsyncd # 让rsync服务开机自启动
查看端口
$ netstat -nltp
(No info could be read for "-p": geteuid()=1000 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp6 0 0 :::873 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 ::1:25 :::* LISTEN -
防火墙放行服务
firewall-cmd --permanent --add-service=rsyncd
firewall-cmd --reload
外部放行
外部放行是指云服务器的安全组规则中放行该服务或者端口,以下以某某云举例
启动服务
systemctl start rsyncd
如果启动失败,安装服务
yum install -y rsync
创建密码文件
echo 'rsync:Xyyyzz@1' > /etc/rsync.pasword
chmod 600 /etc/rsync.password
数据交互
rsync -avz /etc/hosts [email protected]:backup --password-file=/etc/rsync.password
参数说明
*“–exclude”、"–exclude-from"排除命令要注意一下,当你想备份某目录文件,但此目录下有些文件你想排除掉,可以用这两个命令。要注意的是这两个参数后面跟着的要排除的文件的路径一定从要备份的目录下面开始写,不能直接用绝对路径,否则排除不成功。
备份策略按数据和业务不同,分别配置不同的备份策略:
服务端创建备份文件夹
mkdir -p /data/rsync/xxzz
客户端执行备份命令
rsync -avz /etc/hosts [email protected]::backup /data/rsync/xxzz --password-file=/etc/rsync.password
服务端验证
[backup@backuphost ~]$ cd /data/rsync/xxzz
[backup@backuphost xxzz]$ ls
hosts
[backup@backuphost xxzz]$
在客户端创建定时任务,定时将文件备份至服务端
每月的1日的3点开始备份文件
crontab -e
00 03 01 * * rsync -avz /etc/hosts [email protected]::backup /data/rsync/xxzz --password-file=/etc/rsync.password
以上完成了,业务文件的定时备份操作。
接下来介绍 inotify 监控文件变动,来实现实时同步。
rsync 不能实时的去监测、同步数据,虽然它可以通过 linux 守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。
可以使用 rsync+inotify 的组合来解决,可以实现数据的实时同步。
1、安装inotify
yum install -y inotify-tools
2、常用参数
-m,–monitor:始终保持事件监听状态 # 重要参数
-r,–recursive:递归查询目录 # 重要参数
-q,–quiet:只打印监控事件的信息 # 重要参数
–excludei:排除文件或目录时,不区分大小写
-t,–timeout:超时时间
–timefmt:指定时间输出格式 # 重要参数
–format:指定时间输出格式 # 重要参数
-e,–event:后面指定删、增、改等事件 # 重要参数
3、inotifywait events 事件
access:读取文件或目录内容
modify:修改文件或目录内容
attrib:文件或目录的属性改变
close_write:修改真实文件内容 # 重要参数
close_nowrite:文件或目录关闭,在只读模式打开之后关闭的
close:文件或目录关闭,不管读或是写模式
open:文件或目录被打开
moved_to:文件或目录移动到
moved_from:文件或目录从移动
move:移动文件或目录移动到监视目录 # 重要参数
create:在监视目录下创建文件或目录 # 重要参数
delete:删除监视目录下的文件或目录 # 重要参数
delete_self:文件或目录被删除,目录本身被删除
unmount:卸载文件系统
4、常用命令
创建事件
inotifywait -mrq /data/ywcx/web --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e create
修改事件
inotifywait -mrq /data/ywcx/web --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e close_write
删除事件
inotifywait -mrq /data/ywcx/web --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e delete
5、脚本监控
#!/bin/bash
Path=/data/rsync/test
Server=192.168.0.2
User=rsync
module=sync_file
monitor() {
/usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete $1 | while read line; do
if [ -f $line ]; then
rsync -avz $line --delete ${User}@${Server}::${module} --password-file=/etc/rsync.password
else
cd $1 &&
rsync -avz ./ --delete ${User}@${Server}::${module} --password-file=/etc/rsync.password
fi
done
}
monitor $Path;
直接将脚本在后台启动,就可以监控文件的变化了,从而实现服务器之间的文件同步。
备份服务器的部署
备份服务器(使用rsync搭建)
linux rsync指定用户名和密码的方式同步
rsync + inotify 实现文件实时双向自动同步