Linux 之 inotify+rsync 备份文件系统

一、需求

  1.线上有不同的机房,并且每个机房所对公网开放端口不一样。

  2.A机房中的a机器是台文件服务器,需要备份到B机房中的b机器,以及C机房中的c机器。

  3.并且保持实时同步。只要a上面的文件有改动,立即同步到b、c机器

二、方案

  1.同步方面,使用的软件是rsync。要保持实时同步,用到inotify程序来检测文件变化,进行同步操作。

  拓扑图如下

  如上图所示,下面介绍的是数据服务器,即数据源的rsync安装以及配置,之后会介绍clinet1的安装与配置(clinent2配置同client1即可)。

三.实施

  • 数据源服务器配置及安装
    1.安装rsync,创建目录
    [root@py ~]# yum -y install rsync xinetd
    [root@py ~]# useradd rsync -s /sbin/nologin
    [root@py ~]# mkdir /tmp/testback
    [root@py ~]# chown rsync.rsync /tmp/testback
    [root@py ~]# ll -d /tmp/backup/

    解释:第1行,安装rsync,默认系统会自带,安装升级一下,xinetd这个服务需要安装。第2行添加一个用于同步的用户,给予不让登陆系统的权限。第3行,创建一个数据源目录,用于同步时,将此下面的文件同步给其它主机。第4行,修改属组和属主为新建的rsync用户。

    2.编辑rsync配置文件,vim /etc/rsyncd.conf, 该文件默认不存在,需要新建,添加以下内容

    uid = rsync
    gid = rsync
    use chroot = no
    max connections = 5
    timeout = 300
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    [backup]
    path = /tmp/testback
    ignore errors
    read only = false
    list = false
    hosts allow = 110.12.32.25123.34.23.78
    hosts deny = 0.0.0.0/32
    auth users = rsync_backup
    secrets file = /etc/rsync.passwd

    解释:上面是服务配置,uid、gid、以及是否可以切换目录为no;最大连接数为5个客户端;日志文件存放位置;[backup] 为rsync同步的模块名字,该名字可以起个有意义的。在服务中,相对应代表的是path的路径。hosts allow 只允许某个或某些主机,auth users 使用的是虚拟用户。最后1行指定用于rsync认证的文件存放的位置。

    3.创建密码文件

    [root@py ~]# echo “kalashitiaogou.2016” > /etc/rsync.passwd
    [root@py ~]# chod 600 /etc/rsync.passwd

    在源服务器上,密码文件的内容只需要存放密码即可,client必须要用户名:密码 这样的格式。另外修改改密码文件的权限。

    4.修改xinetd服务下的rsync,将disable = no

    service rsync
    {
            disable = no
            flags           = IPv6
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/bin/rsync
            server_args     = --daemon --config=/etc/rsyncd.conf
            log_on_failure  += USERID
    }

    解释:此文件只需要修改2处. 第1,将disable = yes 修改成 disable = no;第2,修改 server_args 为 --daemon --config=/etc/rsyncd.conf。使用我们设置的配置文件来启动rsync服务
    以上步骤修改完成后,重启rsync服务,并检查rsync 是否运行在873端口。

    [root@py ~]# /etc/init.d/xinetd restart
    [root@py ~]# netstat -lntup | grep :873
  • 备份服务器client1的安装与配置
    1.安装rsync、xinetd,并添加rsync系统账号,以及创建同步文件存放的目录,并将属主属组修改rsync
    [root@client1 ~]# yum -y install rsync xinetd
    [root@client1 ~]# useradd rsync -s /sbin/nologin
    [root@client1 ~]# mkdir -p /tmp/testback/
    [root@client1 ~]# chown rsync.rsync /tmp/testback

  • 2.创建密码文件

    [root@client ~]# echo “rsync_backup:kalashitiaogou.2016” > /etc/rsync.passwd
    [root@client ~]# chmod 600 /etc/rsync.passwd

     解释:此处不同的是密码文件里存放着是用户名:密码的对应。

    3.编辑/etc/rsyncd.conf

    uid = rsync
    gid = rsync
    use chroot = no
    max connections = 5
    timeout = 300
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    [backup]
    path = /tmp/testback/
    ignore errors
    read only = false
    list = false
    hosts allow = 104.23.45.17/32
    hosts deny = 0.0.0.0/32
    auth users = rsync_backup
    secrets file = /etc/rsync.passwd

    上述文件和源服务器的配置相差无几,仅仅是host allow 有区别,其它一致。另外模块名[backup] 以及path 路径在clinet 可以根据自己使用的场景进行自定义。

    4.由于应用的环境不一样,客户端的端口仅可以使用80端口,这里我们需要修改下clinet1的rsync监听端口。编辑/etc/services,找到rsync 修改如下。

    [root@client1 ~]# vim /etc/services
    
    rsync        80/tcp
    rsync        80/udp


    5.修改/etc/xinetd.d/rsync,将disable 的值改为no,并以--daemon 运行,如下所示:

    service rsync
    {
            disable = no
            flags           = IPv6
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/bin/rsync
            server_args     = --daemon --config=/etc/rsyncd.conf
            log_on_failure  += USERID
    }

    重启服务,并检查rsync 端口监听是否在我们修改后的80端口上

    [root@client1 ~]# /etc/init.d/xinetd restart
    [root@client1 ~]# netstat -aultnp | grep xinetd
  • 备份服务器client2的安装与配置
    1.与client1的安装步骤保持一致。使用同样方式配置client2即可。


  • 测试环节:在数据源服务器上执行以下同步操作,之后去检查客户端模块中对应的path目录下是否有同样的文件。
    [root@py ~]# rsync -avz test.txt --port=80 rsync_backup@110.12.32.25::backup --password-file=/etc/rsync.passwd
    
    [root@py ~]# rsync -avz test.txt --port=80 rsync_backup@123.34.23.78::backup --password-file=/etc/rsync.passwd
原文地址:https://www.cnblogs.com/hanyifeng/p/5127631.html