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

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

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

1. WEB服务器A和备份服务器B的备份目录必须都为/backup。

2. 系统配置文件包括但不限于:

a) 定时任务服务的配置文件(/var/spool/cron/root)。

b) 开机自启动的配置文件(/etc/rc.local)

c) 日常脚本的目录(/server/scripts)

d) 防火墙iptables的配置文件(/etc/sysconfig/iptables)

e) 自己思考还有什么需要备份呢?

3. WEB服务器站点目录假定为(/var/html/www)。

4. WEB服务器A访问日志路径假定为(/app/logs)。

5. WEB服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满),备份服务器B上要保留6个月的数据副本。

6. 备份服务器B上备份要按照备份服务器的IP为目录保存,打包的文件按照时间名字保存。

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

解答:

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

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

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

技术点说明:

a.服务器B上实施rsync服务,A上是客户端。

b.在A本地对重要数据做备份,实际就是写一个备份脚本。

c.做一个定时任务,执行b步骤中的备份脚本。

详细记录:

在备份服务器上:

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

 

  1. [root@backup ~]#vi /etc/rsyncd.conf 
  2.  
  3. #rsync_config____________start 
  4.  
  5. #created by swper 10:56 2015-04-26 
  6.  
  7. #blog:http://www.58jb.com 
  8.  
  9. ##rsyncd.conf start ## 
  10.  
  11. uid = rsync //用户UID 
  12.  
  13. gid = rsync //组GID 
  14.  
  15. use chroot = no 
  16.  
  17. max connections = 200 
  18.  
  19. timeout = 300 
  20.  
  21. pid file = /var/run/rsyncd.pid 
  22.  
  23. lock file = /var/run/rsync.lock 
  24.  
  25. log file = /var/run/rsyncd.log 
  26.  
  27. [backup] 
  28.  
  29. path = /backup/ //定义备份目录 
  30.  
  31. ignore errors 
  32.  
  33. read only = false 
  34.  
  35. list = false  
  36.  
  37. hosts allow 192.168.137.0/24 // 允许连接的IP地址段 
  38.  
  39. hosts deny = 0.0.0.0/32 //拒绝的IP段 
  40.  
  41. auth users =rsync_backup //rsync推送的虚拟用户名 
  42.  
  43. secrets file = /etc/rsync.password //rsync推送的虚拟用户密码保存文件 
  44.  
  45. #rsync_config____________end 

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

 

  1. [root@backup ~]# mkdir /backup //创建备份目录/backup  
  2.  
  3. [root@backup ~]# useradd rsync -s /sbin/nologin  //创建rsync用户,不允许登陆。 
  4.  
  5. [root@backup ~]# chown -R rsync /backup/ //让rsync用对/backup目录有权限 
  6.  
  7. [root@backup ~]# ll -ld /backup/ 
  8.  
  9. drwxr-xr-x. 2 rsync root 4096 Apr 15 23:37 /backup/ 
  10.  
  11. [root@backup ~]# rsync –daemon //启动rsync服务 
  12.  
  13. [root@backup ~]# netstat –lnt //如果可以看到:873端口说明rsync服务已经启动。 
  14.  
  15. Active Internet connections (only servers) 
  16.  
  17. Proto Recv-Q Send-Q Local Address               Foreign Address             State       
  18.  
  19. tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN       
  20.  
  21. tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN       
  22.  
  23. tcp        0      0 :::22                       :::*                        LISTEN       
  24.  
  25. tcp        0      0 :::873                      :::*                        LISTEN      

 

  1. [root@backup ~]# which rsync //查找rsync的绝对路径 
  2.  
  3. /usr/bin/rsync 
  4.  
  5. [root@backup ~]# echo "#rsync bak by swper 20150426">>/etc/rc.local;echo "/usr/bin/rsync --daemon" >>/etc/rc.local  //追加到自启动配置文件rc.local中,并带有注释。 
  6.  
  7. [root@backup ~]# tail -2 /etc/rc.local  //查看是否成功添加到自启动配置文件中 
  8.  
  9. tail: inotify cannot be used, reverting to polling 
  10.  
  11. #rsync bak by swper 20150426 
  12.  
  13. /usr/bin/rsync --daemon 

 

  1. [root@backup ~]# echo "rsync_backup:swper" >/etc/rsync.password //创建rsync用户密码保存文件。 
  2.  
  3. [root@backup ~]# chmod 600 /etc/rsync.password  
  4.  
  5. [root@backup ~]# cat /etc/rsync.password  
  6.  
  7. rsync_backup:swper 
  8.  
  9. [root@backup ~]# ll /etc/rsync.password  
  10.  
  11. -rw-------. 1 root root 20 Apr 15 23:45 /etc/rsync.password 

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

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

创建目录:

 

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

 

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

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

 

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

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

 

  1. [root@server scripts]# vi bak.sh 
  2.  
  3. #bak site and logs   //此行为注释 
  4.  
  5. ip=`grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0 |cut -d = -f2` //定义ip变量为当前服务器IP地址,实际服务器可能有多个地址,以内网地址作备份用的IP地址。 
  6.  
  7. mkdir /backup/$ip –p //在backup目录下创建一个以IP地址为目录,实际服务器中多IP地址备份,容易区分。 
  8.  
  9. cd /var/html && tar zcf /backup/$ip/www_$(date +%F).tar.gz ./www //进入到网页存放目录,并打包当前目录,以当前目录为名+当前时间.tar.gz保存到/backup/$ip目录里。 
  10.  
  11. cd /app && tar zcf /backup/$ip/logs_$(date +%F).tar.gz ./logs //进入到日志存放目录,并打包当前目录,以当前目录为名+当前时间.tar.gz保存到/backup/$ip目录里。 
  12.  
  13. #bak sys conf //此行为注释 
  14.  
  15. cd / && tar zcf /backup/$ip/etc_$(date +%F).tar.gz ./etc //进入到etc目录,并打包当前目录,以当前目录为名+当前时间.tar.gz保存到/backup/$ip目录里。 
  16.  
  17. cd /server && tar zcf /backup/$ip/scripts_$(date +%F).tar.gz ./scripts //打包脚本存放目录, 以当前目录为名+当前时间.tar.gz保存到/backup/$ip目录里。 
  18.  
  19. /bin/cp /var/spool/cron/root /backup/$ip/  
  20.  
  21. #rsync data to bakserver 
  22.  
  23. 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目录下。 
  24.  
  25. #del data 7 days ago 
  26.  
  27. find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm –f //删除WEB服务器/backup目录下的7天以前的数据。 

 

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

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

 

  1. [root@server]# crontab –e 
  2.  
  3. #bak local data by swper at 20150426 //定时任务的注释 
  4.  
  5. 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 

整个操作过程参照老男孩视频记录。