前言

我公司是电子商务公司,全部是linux系统,每天的网站数都在增加,为了保证安全,需要建立一个远程容灾系统,将网站数据每天凌晨1点备份到远程服务器上,由于数据量大,每天进行进行增量备份,仅仅备份当天增加数据,当网站出现故障后,可以通过备份最大程度地恢复数据。

一 解决方案

我们这里假设有A B两地的服务器,A地的服务器为网站服务器,B地服务器为远程容灾服务器,A服务器上运行着rsync的服务端,B地服务器上运行着rsync的客户端,这样,B地服务器上就可以通过系统守护进程crontab来定时备份A地服务器上指定的数据,从而实现远程数据备份的作用。

二 A地服务器配置:

我们采用源码安装的rsync,默认情况下/etc/rsync.conf是没有这个配置文件的,所以手动创建一个,它由一个或者多个模块结构构成,包括全局参数和模块参数。

[root@salt ~]# cat /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log [ixdba]
path = /test/tmp
comment = ixdba file
ignore errors
read only = no
write only = no
hosts allow = *
hosts deny = 192.168.1.1
list = false
uid = root
gid = root
auth users = backup
secrets file = /etc/server.pass [root@salt ~]# cat /etc/server.pass # 用户认证配置文件
backup:ixdba123
[root@salt ~]# chmod 600 /etc/server.pass # 必须是600的权限,不然客户端连接即使密码正确,也会提示认证出错

参数配置解释:

  • uid:指该模块传输文件时守护进程应该具有的用户ID,默认值是nobody
  • gid: 此选项指定当该模块传输文件时,守护进程应该具有的用户组ID,默认值是nobody
  • max connections 定义模块最大连接数,以保护服务器,超过限制的连接请求将被暂停,默认值为0,没有限制、
  • strict modes 此选项指定模块的最大并发连接数,以保护服务器,反之为no,设置为yes,密码文件的权限必须是root用户权限。
  • lock file 锁文件,默认值是/var/run/rsyncd.lock
  • [ixdba] 表示一个模块的开始,ixdba就是对应的模块名称
  • path 此选项用来指定需要备份的文件或者目录,是必须设置的项
  • ignore errors 表示可以忽略一些无关的I/O错误
  • read only 设置为no表示客户端可以上传文件,设置为yes表示只读。
  • write only 设置为no表示客户端可以下载,设置为yes表示不能下载
  • hosts allow 设置可以连接rsync服务器的主机,“*” 表示允许连接任何主机。
  • hosts deny 设置禁止连接rsync服务器的主机地址
  • list 此选项用户设定当客户请求可以使用的模块列表时,该模块是否被列出。默认是true,如需要建立隐藏的模块,可以设置false
  • auth users,此选项用来定义可以连接该模块的用户,多个用户空格或者逗号隔开,需要注意的是,这和系统用户没有任何关系。
  • secrets file 指定一个 “用户名:密码” 格式的文件,用户名就是“auth users” 选项定义的用户,密码可以随便指定,只要和客户端secrets file对应起来即可,只有在auth users被定义时,该文件才起作用,系统默认没有这个文件,手动建立即可。

启动服务:

[root@salt ~]# rsync --daemon
[root@salt ~]# netstat -lnpt
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:22 0.0.0.0:* LISTEN 1519/sshd
tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 1685/python2.6
tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 1798/python2.6
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 14595/rsync
tcp 0 0 :::22 :::* LISTEN 1519/sshd
tcp 0 0 :::873 :::* LISTEN 14595/rsync
[root@salt ~]# ps -ef |grep rsync
root 14595 1 0 01:06 ? 00:00:00 rsync --daemon
root 14598 1997 0 01:06 pts/0 00:00:00 grep rsync
三 B地服务器配置:

在备份机上不用做任何设置,只需要执行rsync同步操作即可,为了同步过程中不用输入密码,在B系统上创建一个secrets file,此文件的内容为A地服务器rsyncd.conf文件中auth users选项指定用户的密码,而这个文件的名称以及路径可以随意指定,只要在执行rsync同步时指定即可。命令如下:

rsync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug" backup@172.16.22.126::ixdba /tmp/test/ --password-file=/etc/server.pass

[root@linux-node1 ~]# cat /etc/server.pass   # 注意的是这里只是填写密码罢了,没有用户名
ixdba123
[root@linux-node1 ~]# chmod 600 /etc/server.pass

命令解释:

  • -vzrtopg 选项中,z表示压缩文件在传输时(compresse),r表示recursive,递归传输,t表示保持文件时间信息,o表示owner,保持文件属主信息,p表示perms ,保持文件权限,g表示group,用来保持文件的属组信息。
  • --delete 选项指定以rsync服务器端为基准进行数据镜像同步,也就要保持rsync服务器端目录和客户端目录完全一致,在这里以A地服务器为准。
  • --progress 用户显示数据镜像同步的过程
  • --exclude 选项用户排除不需要传输的文件类型。
  • backup@172.16.22.126::ixdba 表示对服务器172.16.22.126的ixdba模块进行备份,backup表示使用backup这个用户对这个模块进行备份。
  • /tmp/test/ 用户指定备份文件在客户端机器上的存放路径,就是将备份的文件存放在备份机的/tmp/test/下
  • --password-file=/etc/server.pass 用来指定客户机上存放密码文件的位置,这样在和客户端执行同步命令时无需再输入密码,这个密码文件可以随意指定,但是必须在客户端上存在这个文件,文件的内容仅仅为备份用户的密码。这里填写的是backup用户的密码。

执行完命令后,rsync就开始自动同步数据了,从A同步到B上。

四 设置定时策略

我们采用crontab定时任务来定时备份数据。这种备份数据对于数据安全性要求不高的业务系统中。

crontab: installing new crontab
[root@linux-node1 ~]# crontab -l
1 1 * * * rsync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug" backup@172.16.22.126::ixdba /tmp/test/ --password-file=/etc/server.pass

好了 ,通过以上4步,一个远程容灾系统已经搭建完成,当然这不是一个完美的方案对于数据安全性比较高的公司,此时需要一个能够自动检测文件变更后自动更新的备份系统,那么就需要结合inotify来做了,linux内核2.6.13以后的内核就支持inotify文件系统监控机制了。

所以下面介绍rsync+inotify

通过rsync搭建一个远程备份系统(一)的更多相关文章

  1. 通过rsync搭建一个远程备份系统(二)

    Rsync+inotify实时备份数据 rsync在同步数据的时候,需要扫描所有文件后进行对比,然后进行差量传输,如果文件达到了百万或者千万级别以上是,扫描文件的时间也很长,而如果只有少量的文件变更了 ...

  2. 阿里云有奖体验:用PolarDB-X搭建一个高可用系统

    体验简介 场景将提供一台配置了CentOS 8.5操作系统和安装部署PolarDB-X集群的ECS实例(云服务器).通过本教程的操作,带您体验如何使用PolarDB-X搭建一个高可用系统,通过直接ki ...

  3. 【分分钟内搭建一个带用户系统的博客程序(一)用户系统】asp.net core的Identity真香,EF真香!

    不用不知道,一用香到爆. 老哥是个屌丝前端,但也想写点web应用耍一耍.之前弄过了NodeJs,也弄过JAVA,最近由于写游戏的原因用C#,索性上手一波asp.net core. 这篇博客记录的是,如 ...

  4. ubuntu下配置rsync,实现远程备份

    rysnc(remote synchronize)在CentOS系统默认安装在/usr/bin,此外rysnc在windows平台下也有相应版本.主页地址为: http://rsync.samba.o ...

  5. linux 中部署 rsync 实现文件远程备份及 同步

    客户端:数据源:服务端:数据接收方 rsync官方文档:https://www.samba.org/ftp/rsync/rsync.html 手动测试用“通过远程外壳访问"里的语法: 参考1 ...

  6. 流媒体技术的应用,如何搭建一个SimpleNVR流媒体服务系统

    Onvif/RTSP流媒体服务 SimpleNVR Onvif/RTSP流媒体服务是一款软硬一体音视频流媒体服务软件.它是在5G.AI.云计算.大数据.物联网等网络技术大规模商用后,用户要求视频随时随 ...

  7. 用django搭建一个简易blog系统(翻译)(四)

    12. Create the templates 你需要做三件事来去掉TemplateDoesNotExist错误 第一件,创建下面目录 * netmag/netmag/templates * net ...

  8. 用django搭建一个简易blog系统(翻译)(三)

    06. Connecting the Django admin to the blog app Django 本身就带有一个应用叫作Admin,而且它是一个很好的工具 在这一部分,我们将要激活admi ...

  9. 用django搭建一个简易blog系统(翻译)(二)

    03. Starting the blog app 在这部分,将要为你的project创建一个blog 应用,通过编辑setting.py文件,并把它添加到INSTALLED_APPS. 在你的命令行 ...

随机推荐

  1. 通向高可扩展性之路(WhatsApp篇)---- 脸书花了190亿买来的WhatsApp的架构

    原文链接:http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-bill ...

  2. nodejs学习之实现http数据转发

    此前在做项目的时候,一直用json文件用作模拟数据,后来发现了mock.js,于是就用了mock.js,再后来感觉这些数据再怎么模拟都是静态数据.所以就想用nodejs实现一个数据转发功能,在本地拉取 ...

  3. 百度Android定位SDK获取位置

    http://gis.sunxianlei.cn/2013/01/27/%E7%99%BE%E5%BA%A6android%E5%AE%9A%E4%BD%8Dsdk%E8%8E%B7%E5%8F%96 ...

  4. 沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)

    沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)是由俄国数学家格奥尔吉·沃罗诺伊建立的空间分割算法.灵感来源于笛卡尔用凸域分割空间的思想. ...

  5. P和NP问题

    1. 通俗详细地讲解什么是P和NP问题 http://blog.sciencenet.cn/blog-327757-531546.html   NP----非定常多项式(英语:non-determin ...

  6. Java网络编程——概述

    一.网络模型 OSI七层模型 应用层 表示层 会话层 传输层: 网络层: 链路层 物理层:比特流 TCP/IP四层模型 应用层 传输层:数据包,TCP/UDP 网络层:数据帧 物理层:比特流 二.网络 ...

  7. Java设计模式(七) 模板模式

    [模板模式]在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 1,定义模板类 package com.pattern ...

  8. cygwin-使用介绍

    cygwin使用: 使用上的方便性很是不错,启动Cygwin以后,会在Windows下得到一个Bash Shell,由于Cygwin是以Windows下的服务运行的,所以很多情况下和在Linux下有很 ...

  9. jsrender for 标签

    for object使用 1.为进入object中直接使用其中的属性 <div id="result"></div> <script id=" ...

  10. 【POJ 1389】Area of Simple Polygons(线段树+扫描线,矩形并面积)

    离散化后,[1,10]=[1,3]+[6,10]就丢了[4,5]这一段了. 因为更新[3,6]时,它只更新到[3,3],[6,6]. 要么在相差大于1的两点间加入一个值,要么就让左右端点为l,r的线段 ...