一、Rsync服务简介html
1. 什么是Rsynclinux
它是一个远程数据同步工具,它在同步文件的同时,可经过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不一样部分,而不是每次都整份传送,所以速度至关快。能够保持原来文件的权限、时间、软硬连接等附加信息。git
2. Rsync的特性github
(1)能够镜像保存整个目录树和文件系统;算法
(2)容易作到保存原有的权限,owner、group、时间(修改时间 modify time)、软硬连接等;shell
(3)传输效率高,使用同步算法,只比较变化的部分;vim
(4)支持匿名传输,方便网站镜像管理。数组
2、Rsync配置使用安全
1. 安装rsync软件bash
# yum -y install rsync --安装rsync |
2. 配置文件
rsync的主要有如下三个配置文件,后面两个文件默认不存在,请手动建立它。
(1)rsyncd.conf(主配置文件)
(2)rsyncd.secrets(密码文件)
(3)rsyncd.motd(rsync服务器信息)
3. Rsync选项
4. Rsync的普通用法
# rsync -av /test/ /backup --本机上的同步,把/test目录下的内容同步到/backup目录下(包括隐藏文件) # rsync -av /test/ 192.168.1.20:/backup --把本地的/test目录内容,同步到远端191.168.1.10的/backup目录下 # rsync -av 192.168.1.20:/backup/ /backup/ --把远端192.168.1.20的/backup目录下的内容同步到本地的/backup目录 (注意:路径写法的区别!原目录后面加不加/也影响你的同步目录;没加/,就是将目录自己同步过去;目录加/,就是将目录里的内容同步过去!) # rsync -av /home --exclude=abc /backup --将/home目录下除了abc其余内容都同步到/backup目录下 # rsync -a --delete /backup/ /test/ --若是同步后,源主机中有文件删除了,这时要想目标主机与源主机的内容保持一致,可使用--delete参数进行同步 |
Rsync自己不具有控制功能和日志记录功能,须要把Rsync作成服务的形式,并加上一些控制功能或日志记录功能。
3、CentOS下的Rsync服务
1. 系统环境
系统平台: CentOS 7.3
Rsync Server: 192.168.1.88
Rsync Client: 192.168.1.20
关闭防火墙
# systemctl stop firewalld --临时关闭防火墙 # systemctl disable firewalld --永久关闭防火墙 |
关闭selinux
临时关闭:
# setenforce 0 |
永久关闭:
# vim /etc/selinux/config SELINUX=disabled --将enforcing改成disabled
# reboot --重启系统永久生效 |
2. 搭建Rsync服务
服务器的操做
(1)设置配置文件
# mkdir /data --建立同步目录 # vim /etc/rsyncd.conf --文件最后添加一下内容 |
# vim /etc/rsyncd.welcome --手动创建本身定义的motd文件,并写上自定义的欢迎信息 |
(2)启动服务
# systemctl restart rsyncd.service --从新启动rsync服务 # netstat -ntlp | grep rsync --查看监听rsync服务的端口 # lsof -i:873 --rsync的端口为873 |
客户端的操做
# rsync -v 192.168.1.88:: --查看rsync服务器同步路径名(注意服务器ip后面有两个冒号) |
# mkdir /databak --建立存放同步内容的目录 # rsync -a 192.168.1.88::test /databak --这样同步,是不须要密码的;注意test为共享路径名称,语法上在该名称前面有两个“:” |
没有密码有好处也有坏处,好处是不须要密码方便写脚本作远程同步。若是要密码写脚本就要用到expect自动应答。坏处就是不安全,但你可使用iptables等来增强安全。
若是你但愿有密码,也不用传密码的话,能够用rsyncd自己自带的secrets file(密码文件)来作:
(secrets file = /etc/rsyncd.secrets)
若是同步报permission denied这种错误,多是服务端防火墙或selinux没有关闭。
Rsync和Xinetd比较
rsyncd | xinetd | |
把日志记录到/var/log/rsyncd.log | log file | log_type |
共享模块要求隐藏(也就是说客户端查看不到这个模块名(test)) | list | list |
同时只能1个客户端链接进行同步这个module(notes) | max connections | instances |
只能容许192.168.1.207(ip自定义)同步这个module | hosts allow | only_from |
只能早上9点到下午5点同步 | access_times | access_times |
# vim /etc/rsyncd.conf |
# systemctl restart rsyncd.service --从新启动rsync服务 |
用xinetd托管rsync服务(CentOS 7.3 Xinetd服务的安装与配置)
# vim /etc/xinetd.d/rsync --这个文件须要本身建立,下面这个是基础配置,须要加其余功能能够再添加参数 |
# systemctl restart xinetd.service --从新启动xinetd服务 |
到此,rsync服务就被xinetd托管了。
4、Rsync + Inotify实时同步搭建
Rsync实时同步,是以Inotify工具实现的,Inotify是监听工具。
Inotify是一种基于内核的文件变化通知机制,用于监控文件系统时间,如文件存取、删除、移动、修改等。
1. 下载inotify源码包并编译安装
包名称:inotify-tools-3.14.tar.gz
下载网址:https://github.com/rvoicilas/inotify-tools/wiki
或 https://sourceforge.net/projects/inotify-tools/files/latest/download
网络下载:
# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz # tar xf ./inotify-tools-3.14.tar.gz -C /usr/src/ --解压 # cd /usr/src/inotify-tools-3.14/ --cd到解压的路径里 # ./configure --配置源码包 # make --编译源码包 # make install --安装源码包 |
安装成功后,会有如下两条命令
# /usr/local/bin/inotifywait --咱们使用就是这条命令 # /usr/local/bin/inotifywatch |
2. 查看命令参数
# /usr/local/bin/inotifywait -help --查看命令的帮助文件,有些参数可用 |
经常使用的参数为4个:
事务又分为如下参数:
3. Rsync本地实时同步
准备工做:
1台服务器,两个目录,用于同步,1个为源(/test),1个为目标(/testbak)
# mkdir /test --建立/test目录为源,用于监听 # mkdir /testbak --建立/testbak目录为目标,用于将/test目录内容同步到/testbak # vim /tmp/rsync.sh --写一个监听脚本 |
启动脚本,实现rsync实时同步
# nohup sh -x /tmp/rsync.sh & --使用nohup方式执行脚本,并放到后台执行 # jobs –l --查看在后台运行的任务 |
注意:
若是要停止后台执行的任务,执行 kill -9 %x,-9为强制杀死,x为jobs任务号
若是执行 jobs -l 没有内容显示出来,则在 vim nohup.out 查看是否报错
测试
打开两个终端,一个在监听的目录里建立文件,另外一个运行监听日志
# mkdir /test/abc --在监听的目录里建立abc目录
# tail -f /var/log/rsync.log --监听日志(只有当/test目录的内容有改变时,日志才会有信息)
# ll /testbak --查看abc目录是否有同步到/testbak目录下 |
4. Rsync远程实时同步(三种方法)
准备两台虚拟机,一台做为本机(服务器),另外一台做为远程机(客户端),两台虚拟机IP要能互相ping通
方法一:使用ssh建立密钥的方法
建立ssh远程登录自动密码,实现无需输入密码便可登录
# cd --切换到用户家目录 # ssh-keygen --执行该命令后,一直回车,会自动生成两个密钥文件
# ll /root/.ssh/ --两个密钥文件目录 id_rsa --本地密钥 id_rsa.pub --公共密钥 |
把公共密钥id_rsa.pub复制给须要远程登录的机子(即目标机)并更名为authorized_keys
# scp /root/.ssh/id_rsa.pub 192.168.1.20:/root/.ssh/authorized_keys # ssh 192.168.1.20 --验证是否还须要输入密码,不须要输入密码就能够登录说明密钥设置成功 # exit --退出远程登录 |
# vim /tmp/rsync_key.sh --写一个监听脚本 |
启动脚本,实现rsync实时同步
# nohup sh -x /tmp/rsync_key.sh & --使用nohup方式执行脚本,并放到后台执行 # jobs –l --查看在后台运行的任务 |
注意:
若是要停止后台执行的任务,执行 kill -9 %x,-9为强制杀死,x为jobs任务号
若是执行 jobs -l 没有内容显示出来,则在 vim nohup.out 查看是否报错
测试
服务器上建立文件或者目录,而后在客户端进行查看 ls /testbak 目录是否有同步。并查看服务器 cat /var/log/rsync.log 是否有同步成功信息。
方法二:使用expect自动应答的方法
用脚本的expect(TCL;tool command language 工具命令语言,是一种脚本语言)自动应答来处理远程链接时要输入的密码问题
修改脚本,而后把先前的脚本进程都 kill 掉,从新执行,从新验证(若是没有作方法二步骤,可不用执行kill)
# yum -y install expect --安装expect # mkdir /test --建立/test目录 |
# vim /tmp/rsync.sh --写一个监听脚本 |
启动脚本,实现rsync实时同步
# nohup sh -x /tmp/rsync.sh & --使用nohup方式执行脚本,并放到后台执行 # jobs –l --查看在后台运行的任务 |
注意:
若是要停止后台执行的任务,执行 kill -9 %x,-9为强制杀死,x为jobs任务号
若是执行 jobs -l 没有内容显示出来,则在 vim nohup.out 查看是否报错
测试
服务器上建立文件或者目录,而后在客户端进行查看 ls /testbak 目录是否有同步。并查看服务器 cat /var/log/rsync.log 是否有同步成功信息。
方法三:使用secrets file的方法
准备两台虚拟机,1台做为rsync服务器,另外一台做为客户端。
需求:将服务器/localtest目录内容同步到客户端上/test目录里
服务器:192.168.1.88
客户机:192.168.1.20
1)客户端上操做
# mkdir /test --建立/test目录用来同步服务器中/localtest目录中的内容 |
客户端上搭建rsync服务
# vim /etc/rsyncd.conf --文件最后添加如下内容 |
# vim /etc/rsyncd.secrets --建立客户机访问时验证账号密码的文件,并写上账号和密码 test:123456 --test为账号:后面为密码
# chmod 600 /etc/rsyncd.secrets --把密码文件改成600权限
# systemctl restart rsyncd.service --重启服务 # systemctl enable rsyncd.service --设为开机自启动 |
2)服务器上操做
# mkdir /localtest --建立/localtest文件夹为源,用于同步给客户端的/test |
# vim /tmp/rsync.sh --写一个监听脚本 |
# chmod 757 /tmp/rsync.sh --安装tcp_wrappers # vim /etc/rsync.passwd --建立密码文件 123456
# chmod 600 /etc/rsync.passwd --把密码文件改为600权限 |
启动脚本,实现rsync实时同步
# nohup sh -x /tmp/rsync.sh & --使用nohup方式执行脚本,并放到后台执行 # jobs -l --查看在后台运行的任务 |
注意:
若是要停止后台执行的任务,执行 kill -9 %x,-9为强制杀死,x为jobs任务号
若是执行 jobs -l 没有内容显示出来,则在 vim nohup.out 查看是否报错
测试
服务器上操做:
# tail -f /var/log/rsync.log --在监听的文件夹里建立test.txt文件夹 # touch /localtest/test.txt --来到客户机上查看/test文件是否有同步过去 |
客户机上操做:
# ll /test |
若是你想搭建双向数据实时同步,反过来作一遍就OK了。