linux搭建rsync服务全过程
作者:635
定义与功能
Rsync 是一款功能强大的文件同步和数据传输工具。它可以在本地系统的不同目录之间,或者本地与远程系统之间进行文件和目录的同步。其主要功能包括增量备份、镜像备份、多主机文件同步等。
例如,在本地服务器上,你可以使用 rsync 将一个目录下的文件同步到另一个目录,保持两个目录内容的一致性。同时,也可以将本地文件同步到远程服务器,或者从远程服务器同步文件到本地。
工作原理
Rsync 使用一种称为 “rsync 算法” 的高效数据传输算法。这种算法通过比较源文件和目标文件的不同部分,仅传输文件之间的差异部分,从而大大减少了数据传输量。
假设你有一个已经备份过的文件,之后只对文件做了少量修改,rsync 在同步时不会重新传输整个文件,而是只传输修改的部分。
例如,一个 1GB 的文件,只有 10MB 的内容被修改,rsync 就只传输这 10MB 的内容,而不是整个 1GB 的文件。
语法格式
基本语法为:rsync [选项] 源路径 目标路径。
其中,选项可以控制 rsync 的行为,如传输模式(归档模式、更新模式等)、是否压缩传输、是否显示详细信息等。源路径是要进行同步的文件或目录的起始位置,目标路径是文件或目录要同步到的位置。
本地同步示例
假设你要将本地目录/source_dir中的所有文件和目录同步到/target_dir,可以使用命令:rsync -av /source_dir/ /target_dir/。
这里的-a选项表示以归档模式进行同步,它包含了递归(-r)、保留权限(-p)、保留所有者和组(-o和-g)、保留时间戳(-t)等多个子选项的功能。-v选项表示显示详细的同步信息,如正在传输的文件名称、传输进度等。
远程同步示例
远程同步可以通过两种方式实现:使用rsync://协议或者通过 SSH 通道。
通过 rsync 协议:如果远程服务器运行了 rsync 守护进程(rsync --daemon),可以使用类似rsync -av user@remote_host::module_name /local_target_dir/的命令进行同步。其中user是远程主机的用户名,remote_host是远程主机的 IP 地址或主机名,module_name是远程主机上 rsync 守护进程配置的模块名称,/local_target_dir/是本地的目标目录。
通过 SSH 通道:这是更常见的方式,格式为rsync -av -e ssh source_path user@remote_host:target_path。
例如,要将本地文件/local_file.txt发送到远程服务器192.168.1.100上的/remote_dir/目录下,命令可以是rsync -av -e ssh /local_file.txt user@192.168.1.100:/remote_dir/。这里-e ssh表示使用 SSH 通道进行传输。
应用场景
数据备份:rsync 是进行数据备份的理想工具。无论是个人用户备份重要文件到外部存储设备,还是企业备份服务器数据到远程数据中心,它都能高效地完成任务。例如,企业可以定期使用 rsync 将数据库文件备份到另一台服务器上,并且只传输有变化的部分,节省了网络带宽和备份时间。
网站部署:在网站开发过程中,开发者可以使用 rsync 将本地开发环境中的网站文件同步到远程服务器,快速更新网站内容。而且,由于 rsync 的高效性,即使是大型网站的文件更新也能快速完成。
配置文件位置与名称
在大多数 Linux 系统中,rsync 的默认配置文件是/etc/rsyncd.conf。这个文件用于配置 rsync 守护进程(rsync --daemon)的各种参数,包括共享模块、访问权限、日志记录等。
配置文件的基本结构
配置文件主要由多个模块(module)的定义组成,每个模块相当于一个共享的资源集合。每个模块的定义都包含在方括号[]中,里面是模块的名称,随后是一系列的参数设置。
例如:
[test_module]
path = /data/test
comment = This is a test module
read only = false
list = true
uid = nobody
gid = nobody在这个示例中,[test_module]是模块名称,以下的参数定义了这个模块的具体属性。
主要参数解释
path:
这是最重要的参数之一,用于指定共享模块对应的实际目录路径。在上面的例子中,path = /data/test表示这个test_module模块共享的实际目录是/data/test。当客户端连接到这个模块时,访问的就是这个目录下的文件和目录。
comment:
用于对模块进行简单的描述。在上面的例子中,comment = This is a test module,可以让管理员或者用户在查看模块列表时,快速了解这个模块的用途。
read only:
用于设置模块是否为只读。如果设置为true,客户端只能从模块中读取文件和目录;如果设置为false,如上面的例子,客户端可以对模块中的文件进行写入操作。这对于控制数据的安全性和完整性非常重要,例如在备份模块中可以设置为只读,而在文件共享模块用于文件更新时可以设置为可读写。
list:
决定是否允许客户端列出模块中的文件和目录。当设置为true时,客户端可以使用rsync命令的--list -only选项或者其他类似的查看目录的功能来获取模块中的文件和目录列表。
在上面的例子中,list = true,所以客户端可以查看这个模块下的文件和目录信息。
uid 和 gid:
用于指定访问模块中的文件时所使用的用户 ID(uid)和组 ID(gid)。
在上面的例子中,uid = nobody和gid = nobody表示以nobody用户和组的身份来访问文件。
这可以控制文件的访问权限,避免不必要的权限滥用。
其他常用参数
port:
用于指定 rsync 守护进程监听的端口。默认情况下,rsync 使用873端口。如果需要修改,可以在配置文件中添加port = [指定端口号]。
例如,port = 1234,这样 rsync 守护进程就会使用1234端口来接收客户端的连接。
hosts allow 和 hosts deny:
用于控制哪些主机可以访问或者禁止访问 rsync 守护进程。hosts allow指定允许访问的主机列表,可以是 IP 地址、IP 网段或者主机名。hosts deny指定禁止访问的主机列表。
例如:
hosts allow = 192.168.1.0/24 hosts deny = 0.0.0.0/0
这表示允许192.168.1.0/24网段内的主机访问,禁止其他所有主机访问。
auth users
定义允许访问模块的用户列表。这些用户需要通过认证才能访问共享目录。
例如:auth users = user1,user2,只有user1和user2这两个用户在提供正确的密码后可以访问模块对应的目录
secrets file:
用于设置用户认证的文件路径。当需要对客户端进行身份验证时,可以在配置文件中添加secrets file = [认证文件路径],并在认证文件中按照用户名:密码的格式,每行写一个用户的认证信息。
例如,secrets file = /etc/rsyncd.secrets,然后在/etc/rsyncd.secrets文件中写入认证信息,如user1:password1。
这里只演示非 SSH 方式的远程同步(如使用 rsync 守护进程)
//配置rsyncd.conf文件
uid = rsync gid = rsync use chroot = no max connections = 200 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log fake super = yes [test] comment = This is a test module path = /test/web ignore errors read only = false list = false hosts allow = 192.168.1.0/24 auth users = admin secrets file = /etc/rsync.password hosts deny = 192.168.20
//创建认证用户这里一定要和uid(用户)和gid(用户组)同步
useradd -s /sbin/nologin -M rsync #创建系统用户用于启动rsync进程 mkdir /test/web #创建共享目录 chown rsync:rsync /test/web #更改属组 chmod 700 /etc/web #授权 echo "admin:admin" > /etc/rsync.pass #把rsyn登录用户和密码认证写入/etc/rsync.pass chmod 600 /etc/rsync.pass #授权"这里必须要有'读写'权限"
-s : 表示设置添加用户的bash
-M : 表示不用创建主目录(默认是创建)
rsync --daemon #启动守护进程 ps -ef |grep rsync #查看是否启动进程 netstat -lntup |grep rsync #查看是否监听873端口
//连接测试
rsync rsync@192.168.1.10::test
//虚拟机演示:





模块相关的细节
模块名的意义:在 rsync 协议中,模块是在远程主机的 rsync 守护进程配置文件(通常是/etc/rsyncd.conf)中定义的。模块名就像是一个资源标签,它关联着一个实际的共享目录或者资源集合。例如,一个名为backup_module的模块可能对应的是远程主机上专门用于备份的目录。
模块的权限设置影响语法使用:如果模块被设置为只读(在配置文件中read only = true),那么在同步操作时,只能从模块对应的目录中下载文件,而不能上传文件。反之,若read only = false,则可以进行上传等操作。例如,尝试向一个只读模块上传文件时会出现权限错误
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
