RSYNC原理
- 简介
系统下的文件同步和传输工具
- 版本
rsync --version
- 特性和优点
- 特性:可以镜像保存整个目录树和文件系统
可以很容易做到保持原来文件的权限、时间、软硬链接等等
3.2 优点:快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的 文件 (及增量)。
压缩传输:rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用 更少 的带宽。
安全:可以使用ssh协议来传输文件
支持匿名传输,以方便进行网站镜象。
选择性保持:符号连接,硬链接,文件属性,权限,时间等
传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用
- 运行模式和端口
采用C/S模式(客户端/服务器模式)
端口tcp 873
- 数据同步方式
推push:一主机负责把数据传送其他主机,服务器开销大,适合后端服务器少的
拉pull:所有主机找一主机拉数据,导致数据缓慢
需要备份的机器是服务端,存储备份的机器是客户端
push中,rsync服务器提供文档目标位置,发起端具有写入权限
pull中,rsync服务器提供文档原始位置,发起端具有读取权限
配置同步源
- ssh同步源(系统用户同步数据)
1.1 在目标主机上建立同步数据的系统用户,设置用户对目录具有写入权限
创建用户:
# useradd xkk && echo 'xkk:123456' | chpasswd
对目录赋予权限
#mkdir /xkk 创建用户
#setfacl -R -m user:xkk:rwx /xkk 设置xkk的权限
1.2 在服务器上创建测试数据
mkdir -p /var/xkk/html
cp -r /boot/* /var/xkk/html
1.3 测试,在服务器上执行rsync同步数据命令
rsync命令的基本用法:
格式:rsync 【选项】 源文件 目标文件
常见的选项:
-a,--archive 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于-rlptgoD
-r,–recursive 对子目录以递归模式处理,即同步所有下面的数据
-l,--links 表示拷贝链接文件
-p , --perms 表示保持文件原有权限
-t , --times 表示保持文件原有时间
-g , --group 表示保持文件原有属用户组
-o , --owner 表示保持文件原有属主
-D , --devices 表示块设备文件信息
-z , --compress 表示压缩传输
-H 表示硬连接文件
-A 保留ACL属性信息(需配合-p选项)
-P 显示传输进度
-u, --update 仅仅进行更新,也就是跳过所有已经存在于目标位置,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
--port=PORT 定义rsyncd(daemon)要运行的Port(预设为tpc 873)
--delete 删除那些目标位置有而原始位置没有的文件
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes /second
--filter “-filename” 需要过滤的文件
--exclude=filename :需要过滤的文件
-v 显示同步过程的详细信息
常用的-avz
注意:如传输大文件,不要用z参数,比较耗时
由于用户xkk并非root用户,因此”-g”、”-o”、“-t”选项将无法使用
方法一:
执行rsync同步命令不使用-a选项
#rsync -rlvz --delete /var/xkk/html/ xkk@192.168.1.1:/xkk/
方法二:
在目标服务器上设置目录/xkk/的属主和属组为xkk
#chown -R xkk:xkk /xkk/
在服务器上执行rsync同步操作
#rsync -avz --delete /var/xkk/html/ xkk@192.168.1.1:/xkk/
1.4 验证结果
在备份服务器上显示/xkk目录下的列表
ls查看
验证增量同步数据
在服务器的/var/xkk/html/目录下新建一个文件,执行rsync同步操作
1.5 脚本实现定时自动备份
SSH同步源的无交互验证
对于SSH服务器,采用秘钥验证是避免交互登录的最佳方法,在服务器中创建密钥 对,将公钥发给服务器备份用户,就可以实现无密码登录
#ssh-keygen -t rsa 直接enter回车
将公钥发给备份服务器
#ssh-copy-id -i xkk@192.168.1.1
在客户端测试SSH的秘钥验证
#ssh xkk@192.168.1.1
#exit 退出ssh连接
成功实现免交互自动登录,再次使用rsync访问SSH同步源时,不需要密码验证
- rsync同步源(虚拟用户同步数据)
2.1下面是常见的全局配置参数,
port:指定后台程序使用的端口号,默认为873。
uid:该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是" nobody" 。
gid:该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为" nobody" 。
max connections:指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制。
lock file:指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock。
motd file:" motd file" 参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认是没有motd文件的。
log file:" log file" 指定rsync的日志文件,而不将日志发送给syslog。
pid file:指定rsync的pid文件,通常指定为“/var/run/rsyncd.pid”,存放进程ID的文件位置。
hosts allow = 单个IP地址或网络地址 //允许访问的客户机地址
下面是常见的模块配置参数
主要是定义服务器哪个目录要被同步输出。
其格式必须为“[共享模块名]”形式,这个名字就是在rsync客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过 path来指定的。
Comment:给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。
Path:指定该模块的供备份的目录树路径,该参数是必须指定的。
read only :yes为只允许下载,false为可以下载和上传文件到服务器
exclude:用来指定多个由空格隔开的多个文件或目录(相对路径),将其添加到exclude列表中。这等同于在客户端命令中使用—exclude或----filter来指定某些文件或目录不下载或上传(既不可访问)
exclude from:指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exclude列表定义,每个文件或目录需要占用一行
include: 用来指定不排除符合要求的文件或目录。这等同于在客户端命令中使用--include来指定模式,结合include和exclude可以定义复杂的exclude/include规则。
include from:指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。
auth users:该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果" auth users" 被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份,这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在" secrets file" 选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。
secrets file:该选项指定一个包含定义用户名:密码对的文件。只有在" auth users" 被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,注意:该文件的权限一定要是600,否则客户端将不能连接服务器。
hosts allow:指定哪些IP的客户允许连接该模块。定义可以是以下形式:
单个IP地址,例如:192.167.0.1,多个IP或网段需要用空格隔开,
整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0
“*”则表示所有,默认是允许所有主机连接。
hosts deny:指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。
list:该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,可以创建隐藏的模块。默认值是true。
Timeout:通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。
2.2 在备份服务器上创建rsyncd.conf文件
2.3 为备份用户创建数据用户
#vim /etc/rsync.passwd
xkk:123.com
#chmod 600 /etc/rsync.passwd
该文件设置权限700或600,权限不对身份验证会失败
启动rsync服务程序,执行”rsync --daemon”命令就可以启动rsync服务
要关闭用kill进程方式
#rsync --daemon --config=/etc/rsyncd.conf
#ps aux | grep rsync
#netstat -naptu | grep :873
注:关闭防火墙,selinux
2.3 rsync同步源配置完毕,下面使用rsync备份工具实现备份操作(服务器)
格式1:
rsync 选项 源文件 用户名@同步源服务器IP::共享模块名
#rsync -avz --delete /var/xkk/html/ xkk@192.168.1.1::[共享模块名]
格式2:
rsync 选项 源文件 rsync://用户名@备份源服务器IP/共享模块名
#rsync -avz --delete /var/xkk/html rsync://xkk@192.168.1.1/[共享模块名]
密码处理
新建一个文件,写入密码,给他权限,在rsync命令中使用--passwd-file指定文件
#vim /etc/rsync.passwd
#chmod 600 /etc/rsync.passwd
配置rsync+sersync实时同步
以上类同
2)在源机器(server01)上开始部署sersync服务
(1)下载sersync
sersync的可执行文件版本(sersync2.5.4_64bit_binary_stable_final.tar.gz),里面有配置文件与可执行文件
将sersync上传到服务器 /opt目录下
# mv sersync2.5.4_64bit_binary_stable_final.tar.gz /opt/
# cd /opt/
# tar zxf sersync2.5.4_64bit_binary_stable_final.tar.gz
# ll
# mv GNU-Linux-x86 /opt/sersync
# cd /opt/sersync/
(2)配置sersync
# cp confxml.xml confxml.xml.bak
更改优化sersync配置文件:
修改24--28行
参数说明:
<localpath watch="/var/www/html"> #本地要监控的同步目录
<remote ip="192.168.30.15" name="wwwroot"/> #rsync服务器的ip地址和rsync共享模块名称
修改31--34行,认证部分【rsync密码认证】
注意:红色框是需要修改的部分
(3)开启sersync守护进程同步数据
# /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml
(4)测试
在server01上对/var/www/html/目录增删改目录文件,
看server02上/web-bak/目录的变化
[root@server02 ~]# watch ls -l /web-bak/
提示:watch可以帮你监测一个命令的运行结果,来监测你想要的一切命令的结果变化
(5)设置sersync监控开机自动执行
# vim /etc/rc.d/rc.local #编辑,在最后添加一行
/opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml #设置开机自动运行脚本