封尘网

让学习成为一种习惯!

网站环境rsync备份数据并推送到备份服务器上

通过编写脚本实现网站数据定时备份并利用rsync推送到远程服务器;同时网站备份数据保留7天的备份记录,并记录备份日志信息方便排查。

具体要求如下:附带备份脚本:bak.sh

  • WEB服务器A和备份服务器B的备份目录必须都为/backup
  • 系统配置文件包括但不限于:
  • 定时任务服务的配置文件(/var/spool/cron/root)。
  • 开机自启动的配置文件(/etc/rc.local)
  • 日常脚本的目录(/server/scripts)
  • 防火墙iptables的配置文件(/etc/sysconfig/iptables)
  • 自己思考还有什么需要备份呢?
  • WEB服务器站点目录假定为(/var/html/www)。
  • WEB服务器A访问日志路径假定为(/app/logs)。
  • WEB服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满),备份服务器B上要保留6个月的数据副本。
  • 备份服务器B上备份要按照备份服务器的IP为目录保存,打包的文件按照时间名字保存。

特别提示:本题在工作中是网站生产环境全网备份方案的一个小型模拟,很有意义。

详情:

整个备份逻辑结构如下图:


网站环境rsync备份数据并推送到备份服务器上

注:逻辑结构图只是作为实施过程的一个参考图。

技术点说明:

  • 服务器B上实施rsync服务,A上是客户端。
  • 在A本地对重要数据做备份,实际就是写一个备份脚本。
  • 做一个定时任务,执行b步骤中的备份脚本。

详细记录:

在备份服务器上:

由于rsync默认安装后不会创建配置文件,要手动配置:

[root@backup ~]#vi /etc/rsyncd.conf
#rsync_config____________start
#created by swper 10:56 2015-04-26
#blog:http://www.58jb.com
##rsyncd.conf start ##
uid = rsync //用户UID
gid = rsync //组GID
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/run/rsyncd.log
[backup]
path = /backup/ //定义备份目录
ignore errors
read only = false
list = false
hosts allow 192.168.137.0/24 // 允许连接的IP地址段
hosts deny = 0.0.0.0/32 //拒绝的IP段
auth users =rsync_backup //rsync推送的虚拟用户名
secrets file = /etc/rsync.password //rsync推送的虚拟用户密码保存文件
#rsync_config____________end

根据上面的假定,创建备份目录/backup 并授于权限。

[root@backup ~]# mkdir /backup //创建备份目录/backup
[root@backup ~]# useradd rsync -s /sbin/nologin  //创建rsync用户,不允许登陆
[root@backup ~]# chown -R rsync /backup/ //让rsync用对/backup目录有权限
[root@backup ~]# ll -ld /backup/
drwxr-xr-x. 2 rsync root 4096 Apr 15 23:37 /backup/

[root@backup ~]# rsync –daemon //启动rsync服务

[root@backup ~]# netstat –lnt //如果可以看到:873端口说明rsync服务已经启动
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN
tcp        0      0 :::22                       :::*                        LISTEN
tcp        0      0 :::873                      :::*                        LISTEN

[root@backup ~]# which rsync //查找rsync的绝对路径
/usr/bin/rsync

[root@backup ~]# echo "#rsync bak by swper 20150426">>/etc/rc.local;echo "/usr/bin/rsync --daemon" >>/etc/rc.local  //追加到自启动配置文件rc.local中,并带有注释。

[root@backup ~]# tail -2 /etc/rc.local //查看是否成功添加到自启动配置文件中

tail: inotify cannot be used, reverting to polling
#rsync bak by swper 20150426
/usr/bin/rsync --daemon

创建rsync用户密码保存文件

[root@backup ~]# echo "rsync_backup:swper" >/etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:swper
[root@backup ~]# ll /etc/rsync.password
-rw-------. 1 root root 20 Apr 15 23:45 /etc/rsync.password

到此备份服务器上的操作完成。

WEB服务器上的操作:(客户端)

创建目录:

[root@server]#mkdir /backup //备份目录:/backup
[root@server]#mkdir /service/scripts –p //脚本保存目录:/server/scripts
[root@server]#mkdir /var/html/www –p      // WEB服务器站点目录假定为(/var/html/www)
[root@server]#mkdir /app/logs –p         //WEB服务器A访问日志路径假定为(/app/logs)

创建rsync密码保存文件: rsync客户端不需要用户名,只需要密码即可。

[root@server]# echo “swper” >/etc/rsync.password           //此处的密码要和备份服务器上rsyncd.conf里的密码一样。
[root@server]#chmod 600 /etc/rsync.password //更改文件的权限

进入脚本保存目录创建备份执行脚本:

[root@server scripts]# vi bak.sh

#bak site and logs   //此行为注释
ip=`grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0 |cut -d = -f2`
//定义ip变量为当前服务器IP地址,实际服务器可能有多个地址,以内网地址作备份用的IP地址。
mkdir /backup/$ip –p
//在backup目录下创建一个以IP地址为目录,实际服务器中多IP地址备份,容易区分。
cd /var/html && tar zcf /backup/$ip/www_$(date +%F).tar.gz ./www
//进入到网页存放目录,并打包当前目录,以当前目录为名+当前时间.tar.gz保存到/backup/$ip目录里。
cd /app && tar zcf /backup/$ip/logs_$(date +%F).tar.gz ./logs
//进入到日志存放目录,并打包当前目录,以当前目录为名+当前时间.tar.gz保存到/backup/$ip目录里。
#bak sys conf //此行为注释
cd / && tar zcf /backup/$ip/etc_$(date +%F).tar.gz ./etc
//进入到etc目录,并打包当前目录,以当前目录为名+当前时间.tar.gz保存到/backup/$ip目录里。
cd /server && tar zcf /backup/$ip/scripts_$(date +%F).tar.gz ./scripts
//打包脚本存放目录, 以当前目录为名+当前时间.tar.gz保存到/backup/$ip目录里。

/bin/cp /var/spool/cron/root /backup/$ip/
#rsync data to bakserver
cd /backup/ && rsync -avzP ./rsync -avzP /backup/ rsync_backup@192.168.137.10::backup/ --password-file=/etc/rsync.password >/dev/null 2>&1
//把/backup目录下的文件推送到备份服务器上的/backup目录下。
#del data 7 days ago
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm –f //删除WEB服务器/backup目录下的7天以前的数据。

==================================================

最后要配置定时任务:说明:路径要绝对的正确,最好测试好了才确认定时时间。

[root@server]# crontab –e
#bak local data by swper at 20150426 //定时任务的注释
00 00 * * * /bin/sh /server/scripts/back.sh >/dev/null 2>&1 //每天00点00分执行备份脚本。

到此,本次网站环境备份实验完成。

Rsync服务在哪一端配置?可以配在WEB服务端吗?
Web―――――――――――――>Backup
Web<―――――――――――――Backup
以上命令行的推送和拉取操作都是在WEB上进行的。

Rsync服务的固定流向
R_c————————————r_s
整个操作过程参照老男孩视频记录。

提醒:本文最后更新于 2976 天前,文中所描述的信息可能已发生改变,请谨慎使用。