GetNAS Logo

Rsync 服务

  • Rsync 是一款开源免费的数据复制工具,主要用于数据备份、多设备间数据镜像。借助网络,它可以自动将指定的文件从一台设备同步到另一台设备。更重要的是,当数据在两台设备间同步完成,下次同步的时候,Rsync 只同步发生变化的文件(增量同步),这大大降低了网络资源的浪费。FreeNAS 默认集成了 Rsync 并提供非常友好的 WebGUI 管理界面,方便我们快速的创建数据同步任务。

    Rsync的功能特点:

    • 能够更新完整的目录树和文件系统;
    • 可以同步符号链接、硬链接、文件所有者、权限、设备以及时间;
    • 安装它无需任何特殊权限;
    • 对于多文件传输提供内部管道从而缩减延迟;
    • 可以使用RSH、SSH或直接使用Sockets进行文件传输;
    • 支持匿名rsync;
  • Rsync 服务端与客户端

    说到数据同步,那么一定是至少在两台设备之间发生的事情。对Rsync而言,这两台设备,一台被视为服务端,另一台则被视为客户端。

    • Rsync Server(服务端):这台设备用来拉取(接收)文件。
    • Rsync Client(客户端):这台设备用来推送(发送)文件。

    FreeNAS 既可以被配置成Rsync的服务端,也可以配置成客户端。相对 FreeNAS 系统的另一端,既可以是FreeNAS系统,也可以是任何可以运行Rsync的操作系统。注意:如果要在两台 FreeNAS 系统之间配置 Rsync 同步,则应该在客户端(即要发送文件的设备)上创建 Rsync 任务。

    FreeNAS 支持的 Rsync 的同步模式

    FreeNAS 支持两种 Rsync 同步模式,第一种是“模块”模式,另一种是“SSH”模式。

    • Rsync “模块”模式:通过一个未加密的连接同步文件。该模式需要至少在服务端(即接收文件的设备)上配置一个模块。其他操作系统应该在 rsyncd.conf 文件中配置模块。
    • Rsync “SSH”模式:通过一个加密的连接同步文件,需要配置 SSH 用户和主机 public keys(公钥)。
    提示:如果需要同步数据的两台设备之间存在防火墙,请设置开放 TCP 873 端口。

    实验设备信息

    为了更好的介绍Rsync同步,我们准备了两台安装了FreeNAS 9.3的主机,以下为两台机器的相关信息:

    主机A

    • IP:192.168.1.102
    • 主机名:FreeNAS
    • 数据集:storA

    主机B

    • IP:192.168.1.104
    • 主机名:nasB
    • 数据集:storB

    两台 FreeNAS 通过 Rsync “模块”模式同步数据

    本例将主机A视为客户端(发送数据),主机B视为服务端用来接收主机A发来的数据。

    重点提示:

    1. 在两台FreeNAS主机之间配置Rsync同步,应该在客户端创建Rsync任务
    2. 使用Rsync“模块”模式同步,应该在服务端创建 Rsync 模块

    首先我们在服务端(主机B)创建Rsync模块。如下图所示,WebGUI 左侧系统菜单依次展开 服务 → Rsync同步 → 增加Rsync备份模块。

    20150313222853

    创建Rsync模块主要设置如下几项:

    • 模块名称:必须设置,但名称随意,这个名称在客户端(主机A)上面要用。
    • 路径:主机B准备的数据集是 storB,请根据你自己创建的数据集进行选择。
    • 访问模式:读写;
    • 用户:root (主要是确保对数据集的操作权限);
    • 允许的主机:设置主机A的IP地址;

    20150313225708

    Rsync模块创建完成,接下来在客户端(主机A)上创建Rsync任务。在主机A上的WebGUI上方主菜单,点击“任务”,在任务管理器中切换到“Rsync任务”标签,随后点击下方的“Add Rsync 任务”。

    20150313232116

    创建Rsync任务主要设置如下几项:

    • 路径:我们在主机A上准备的数据集为 storA,你要根据自己的实际数据集填写;
    • 用户:root (为了确保对数据集有绝对的操作权限);
    • 远程主机:填写服务端(主机B)的IP地址;
    • Rsync mode:选择Rsync模块;
    • 远程模块名:填写服务端(主机B)上创建的模块名称,我们前面创建的模块名称为 getnas;
    • 方向:推送(从本机发送数据到服务端);
    • 分钟:本例设置每5分钟同步一次;
    • 保留权限:选中(为了保证同步的文件权限不会被root用户权限覆盖);
    • 其他选项保持默认,也可以根据你的需求进行调整;

    20150313231946

    服务端和客户端都配置好了,接下来启用Rsync服务。注意喽,这里只需要启动服务端(主机B)上的Rsync服务即可

    20150313233338

    接下来,为了观察数据同步是否成功,把在两个主机上把用于 Rsync 同步的数据集(storA和storB)都配置CIFS共享。随便存些文件到 storA 数据集,如下图。

    20150313234425

    再查看一下 storB 数据集的共享目录,如下图,可以看到里面多了一个名为 storA 的目录,没错了,这个就是 Rsync 第一次同步过来的目录,就在服务端(主机B)启动Rsync服务的那一刻,Rsync立即进行了第一次同步。

    20150313234516

    等待5分钟(因为我们在Rsync任务里面设置了每5分钟同步一次),在来查看 storB 数据集的共享目录,如下图,新添加到 storA 的那些文件也同步过来了,是不是有一种很过瘾的感觉。接下来,如果有需要,你可以按照自己的意愿,去修改客户端上的Rsync同步任务了。

    20150313234819

    两台 FreeNAS 通过 Rsync “SSH”模式同步数据

    本例将主机A视为客户端(发送数据),主机B视为服务端用来接收主机A发来的数据。

    相比前面介绍的“模块”同步模式,Rsync SSH 同步模式的配置要复杂一些,另外,使用SSH同步模式不需要服务端启动Rsync服务。

    创建 Rsync 任务之前,我们必须先对 SSH 进行一些必要的配置:

    • 在客户端(推送数据的设备)上为 Rsync 用户(通常为root用户)创建一个 public/private key pair(公/私密钥对),并将公钥复制到服务端(接收数据的设备)的同名用户账户上;
    • 为了避免”中间人”攻击风险,服务端(接收数据的设备)的 host key(主机秘钥)也必须复制到客户端;
    • 服务端(接收数据的设备)必须开启SSH服务;

    首先,在客户端(主机A)为root用户创建公/私秘钥对,这项操作需要在命令行(Shell)中进行。如果你尚不了解如何通过SSH访问FreeNAS主机,请先查阅《FreeNAS 启用 SSH 服务》。

    FreeNAS 支持创建 DSA 和 RSA 两种类型的 SSH 秘钥,本例我们将创建一个RSA类型的SSH密钥对。如下图,在主机A的终端中输入生成秘钥对的命令:ssh-keygen -t rsa  (执行此命令会有一系列的交互提示,一路回车即可。)

    20150314001501

    提示:上面演示的是为root用户创建SSH密钥对,通过SSH访问FreeNAS主机默认就是以root用户 身份登录的,如果你希望给系统中其他用户创建SSH秘钥对,应该使用 su – 命令先将终端身份切换到该用户,然后在执行生成秘钥对的命令。例如,要为用户 jack 创建SSH秘钥对,则应该先执行 su – jack,然后在执行 ssh-keygen -t rsa

    SSH 密钥对生成以后,我们查看并复制生成的公钥,使用命令 more ~/.ssh/id_rsa.pub 。复制显示的秘钥。

    20150314002529

    注意喽,现在切换到服务端(主机B)的WebGUI,依次点击 账户→所有用户→root,编辑root用户,如下图,将复制的秘钥粘贴到 SSH Public Key 这一项的文本框中(如果秘钥最后有空格或换行,尽量删掉),保存。

    20150314003014

    返回客户端(主机A)的SSH终端界面,将服务端(主机B)的主机秘钥复制到客户端。使用命令:ssh-keyscan -t rsa 192.168.1.104 >> ~/.ssh/known_hosts

    20150314004252

    提示:如果客户端是Linux操作系统,则应该使用:cat ~/.ssh/id_rsa.pub | ssh user@192.168.1.104 ‘cat >> .ssh/authorized_keys’  命令。

    现在,可以在客户端(主机A)创建Rsync任务了,和使用“模块”模式创建同步任务类似,主要设置以下几项:

    • 路径:选择主机A上的数据集 storA;
    • 用户:root
    • 远程主机:即服务端IP地址;
    • Rsync mode:选择“使用 SSH 的 Rsync”;
    • 远程 SSH 端口:22 默认不要修改;
    • 远程路径:输入服务端数据集 storB 的绝对路径,参考下图;
    • 方向:推送;
    • 时间相关:根据需求选择,本例设置为每3分钟同步一次;
    • 保留权限:选中(为了保证同步的文件权限不会被root用户权限覆盖);

    20150314005837

    Rsync任务创建完毕,如果你想立即执行同步。可以在客户端的Rsync任务列表中点选创建的同步任务,点击下方“立即运行”按钮,系统会立即执行一次同步任务。同步的效果与“模块”模式完全相同,因此不再重复演示。

    20150314010507

    结语

    至此,FreeNAS Rsync同步方面的内容就全部介绍完了,可以看到,采用“模块”模式在两台FreeNAS主机之间同步数据是最方便的。虽然没有展开介绍SSH同步模 式,但是相信大家已经看到了,SSH同步模式更适合一台FreeNAS与其他类型系统之间进行数据同步。可以说同步模式没有最好,只有最适合,至于如何应 用到实际当中,就看你的了!