Rsync(Remote Sync)是Linux下一款应用软件,利用它可以使多台服务器数据保持同步一致,第一次同步rsync会复制全部内容,但在下一次只传输修改过的文件。
Rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。可以很容易做到保持原来文件的权限、事件、硬软链接等。
案例: A 源服务器 -------安装Rsync服务端 B、C 客户端服务器 -------安装Rsync客户端,由客户端发起同步操作 B、C服务器需要从A同步某个目录到本地 |
1、源服务器A 编译安装Rsync
wget -c -P /src/ https://rsync.samba.org/ftp/rsync/src/rsync-3.1.2.tar.gz tar zxvf /src/rsync-3.1.2.tar.gz -C /src/ cd /src/rsync-3.1.2 ./configure --prefix=/usr/local/rsync make && make install |
2、源服务器A 配置
基于Rsync密钥方式同步及配置
默认/etc不存在rsyncd.conf配置文件,需要手动创建,配置内容如下:
#########[global] 全局配置 uid = nobody gid = nobody use chroot = yes max connections = 5 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log transfer logging = yes log format = %t %a %m %f %b syslog facility = local3 timeout = 300 [www] read only = yes path = /usr/local/webapps comment = www auth users =test secrets file = /etc/rsync.pas hosts allow = 192.168.0.11,192.168.0.12 [web] read only = yes path = /data/www/web comment = web auth users =test secrets file = /etc/rsync.pas hosts allow = 192.168.1.11,192.168.0.0/24 |
Rsync配置参数说明:
[www] #要同步的模块名 path = /usr/local/webapps #要同步的目录 comment = www #这个名名称无所谓,最后模块名一致 read only = no # no客户端可上传文件,yes只读 write only = no # no客户端可下载文件,yes不能下载 list = yes #是否提供资源列表 auth users =test #登陆系统使用的用户名,没有默认为匿名。 hosts allow = 192.168.0.10,192.168.0.20 #本模块允许通过的IP地址 hosts deny = 192.168.1.4 #禁止主机IP secrets file=/etc/rsync.pas #密码文件存放的位置 |
启动服务器端Rsync主进程
/usr/local/rsync/bin/rsync --daemon 监听端口 TCP 873 |
设置rsync服务器端同步密钥
vim /etc/rsync.pas username:userpasswd #表示用户名:密码 test:test999 |
保存完毕,chmod 600 /etc/rsync.pas 设置权限为宿主用户读写
3、客户端服务器配置
同步密钥和命令,如下设置即可同步
vi /etc/rsync.pas 输入服务器端配置的密码 test999 保存完毕,chmod 600 /etc/rsync.pas 设置权限为宿主用户读写;开始同步,执行如下语句: rsync -aP --delete test@192.168.0.100::www/usr/local/webapps --password-file=/etc/rsync.pas rsync -aP --delete test@192.168.0.100::web /data/www/web --password-file=/etc/rsync.pas 注:/usr/local/webapps 为客户端的目录,@前 test是认证的用户名;IP后面www为rsync服务器端的模块名称。 |
Rsync 常用参数解析:
-a, ––archive | 归档模式,表示以递归方式传输文件,并保持所有文件属性。 |
––exclude=PATTERN | 指定排除一个不需要传输的文件匹配模式 |
––exclude-from=FILE | 从 FILE 中读取排除规则 |
––include=PATTERN | 指定需要传输的文件匹配模式 |
--delete | 删除那些接收端还有而发送端已经不存在的文件 |
-P | 等价于 ––partial ––progress |
-v, ––verbose | 详细输出模式 |
-q, ––quiet | 精简输出模式 |
-p --perms | 保持perms属性(权限,不包括特殊权限) |
-z | 传输时进行压缩提高效率 |
––rsyncpath=PROGRAM | 指定远程服务器上的 rsync 命令所在路径 |
––password-file=FILE | 从 FILE 中读取口令,以避免在终端上输入口令, 通常在 cron 中连接 rsync 服务器时使用 |
4、测试
在客户端上执行以下命令进行数据同步:
rsync -arv test@10.37.71.93::test /usr/local/src/ --password-file=/etc/rsync.pas
--------------------------------------------------------------------------------------------------
Rsync基于ssh同步
除了可以使用rsync密钥进行同步之外,还有一个比较简单的同步方法就是基于linux ssh来同步。具体方法如下:
rsync -aP --delete root@192.168.0.10:/data/www/webapps/data/www/webapps 如果不想每次同步都输入密码,需要做Linux主机之间免密码登录 |