zoukankan      html  css  js  c++  java
  • 通过rsync搭建一个远程备份系统(一)

    前言

    我公司是电子商务公司,全部是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

  • 相关阅读:
    MIPI CSI2学习(一):说一说MIPI CSI2
    图解数据结构树之AVL树
    查找树ADT--二叉查找树
    hisi mmz模块驱动讲解
    抓包工具 tcpdump 用法说明
    4. 海思Hi3519A MPP从入门到精通(四 视频输出)
    PHP无限分类分类导航LINK的代码实现
    PHP 无限极分类下拉列表实现
    PHP无限极分类原理
    微信支付回调验证签名处理
  • 原文地址:https://www.cnblogs.com/liaojiafa/p/6033505.html
Copyright © 2011-2022 走看看