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发来的数据。
重点提示:
- 在两台FreeNAS主机之间配置Rsync同步,应该在客户端创建Rsync任务;
- 使用Rsync“模块”模式同步,应该在服务端创建 Rsync 模块。
首先我们在服务端(主机B)创建Rsync模块。如下图所示,WebGUI 左侧系统菜单依次展开 服务 → Rsync同步 → 增加Rsync备份模块。
创建Rsync模块主要设置如下几项:
- 模块名称:必须设置,但名称随意,这个名称在客户端(主机A)上面要用。
- 路径:主机B准备的数据集是 storB,请根据你自己创建的数据集进行选择。
- 访问模式:读写;
- 用户:root (主要是确保对数据集的操作权限);
- 允许的主机:设置主机A的IP地址;
Rsync模块创建完成,接下来在客户端(主机A)上创建Rsync任务。在主机A上的WebGUI上方主菜单,点击“任务”,在任务管理器中切换到“Rsync任务”标签,随后点击下方的“Add Rsync 任务”。
创建Rsync任务主要设置如下几项:
- 路径:我们在主机A上准备的数据集为 storA,你要根据自己的实际数据集填写;
- 用户:root (为了确保对数据集有绝对的操作权限);
- 远程主机:填写服务端(主机B)的IP地址;
- Rsync mode:选择Rsync模块;
- 远程模块名:填写服务端(主机B)上创建的模块名称,我们前面创建的模块名称为 getnas;
- 方向:推送(从本机发送数据到服务端);
- 分钟:本例设置每5分钟同步一次;
- 保留权限:选中(为了保证同步的文件权限不会被root用户权限覆盖);
- 其他选项保持默认,也可以根据你的需求进行调整;
服务端和客户端都配置好了,接下来启用Rsync服务。注意喽,这里只需要启动服务端(主机B)上的Rsync服务即可。
接下来,为了观察数据同步是否成功,把在两个主机上把用于 Rsync 同步的数据集(storA和storB)都配置CIFS共享。随便存些文件到 storA 数据集,如下图。
再查看一下 storB 数据集的共享目录,如下图,可以看到里面多了一个名为 storA 的目录,没错了,这个就是 Rsync 第一次同步过来的目录,就在服务端(主机B)启动Rsync服务的那一刻,Rsync立即进行了第一次同步。
等待5分钟(因为我们在Rsync任务里面设置了每5分钟同步一次),在来查看 storB 数据集的共享目录,如下图,新添加到 storA 的那些文件也同步过来了,是不是有一种很过瘾的感觉。接下来,如果有需要,你可以按照自己的意愿,去修改客户端上的Rsync同步任务了。
两台 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 **(执行此命令会有一系列的交互提示,一路回车即可。)
提示:上面演示的是为root用户创建SSH密钥对,通过SSH访问FreeNAS主机默认就是以root用户 身份登录的,如果你希望给系统中其他用户创建SSH秘钥对,应该使用 su – 命令先将终端身份切换到该用户,然后在执行生成秘钥对的命令。例如,要为用户 jack 创建SSH秘钥对,则应该先执行 su – jack,然后在执行 ssh-keygen -t rsa。
SSH 密钥对生成以后,我们查看并复制生成的公钥,使用命令 more ~/.ssh/id_rsa.pub 。复制显示的秘钥。
注意喽,现在切换到服务端(主机B)的WebGUI,依次点击 账户→所有用户→root,编辑root用户,如下图,将复制的秘钥粘贴到 SSH Public Key 这一项的文本框中(如果秘钥最后有空格或换行,尽量删掉),保存。
返回客户端(主机A)的SSH终端界面,将服务端(主机B)的主机秘钥复制到客户端。使用命令:ssh-keyscan -t rsa 192.168.1.104 >> ~/.ssh/known_hosts
提示:如果客户端是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用户权限覆盖);
Rsync任务创建完毕,如果你想立即执行同步。可以在客户端的Rsync任务列表中点选创建的同步任务,点击下方“立即运行”按钮,系统会立即执行一次同步任务。同步的效果与“模块”模式完全相同,因此不再重复演示。
结语
至此,FreeNAS Rsync同步方面的内容就全部介绍完了,可以看到,采用“模块”模式在两台FreeNAS主机之间同步数据是最方便的。虽然没有展开介绍SSH同步模 式,但是相信大家已经看到了,SSH同步模式更适合一台FreeNAS与其他类型系统之间进行数据同步。可以说同步模式没有最好,只有最适合,至于如何应 用到实际当中,就看你的了!