今天分享的是linux服务中重点服务:rsync的一些技术点!
Rsync (啊sei ke)不太专业的音标,反正我是这么读。
在两台以上的服务器之间互相传输数据的方法:
scp
NFS
SFTP
http
samba(和windows互相共访的文件服务器)
Rsync
drbd (基于文件系统同步,效率很高,架构师的级别必须熟练)
什么是Rsync?
何为socket:
是有进程方式来传输数据,包含:服务端和客户端。
在系统中用man 来看下这个命令的描述:
Rsync优于在SSH中带scp命令:后者每次都是全量拷贝,而Rsync 可以增量拷贝,还可以在本地主机的不同分区或目录之间全量以及增量的复制数据,当然利用Rsync还可以实现删除文件和目录的功能。(不能说scp就不如rsync:scp加密,rsync默认是不加密的。)
一个Rsync相当于scp、cp、rm 。
在同步备份数据时,默认情况下,Rsync通过独有的"quick check"算法,仅同步大小或者最后修改时间发生变化的文件或目录,甚至也可以实现同步一个文件里有变化的内容部分,因此基于以上工作机制,可以实现快速的同步备份数据。
在企业生产场景中,Rsync一般用作服务器之间的数据备份以及所有客户服务器数据同步到备份服务器上。
有些企业要求实时的数据同步:rsync配合inotify或sersync这两个软件进行实时同步。
Rsync的工作方式:
单个主机本地之间的的数据传输。(此时类似于cp命令的功能。)
借助rcp.ssh等通道来传输数据。(此时类似于scp命令的功能。)
*以守护进程(socket)的方式传输数据。(这个是Rsync的招牌功能)。
我可以依据Man 来查询Rsync的工作模式:
接下来,详细介绍下其工作模式:
本地传输模式的语法为:(客户端的命令)
例如,我想要将/etc/hosts 拷贝到 /tmp下。跟cp命令很像-直接本地同步。
其中最常见的参数为avz.
-v: verbose的意思,代表详细模式输出,传输时的进度等信息。
-z:compress的意思,传输进行压缩,以提高传输效率。
除了能和cp一样本机传输外,还能够删除。
我先建立一个null文件夹。
然后在/ 建立一个123的目录,里面在建立一个321的文件:
用这样的格式删除文件,查看文件后,就没有了。
特别说明:rsync的删除机制就是强制复制!(删除复制 ,呵呵)
说白了就他有啥你就有啥.........(也是在操作中算是一个比较谨慎的命令吧)
我先补充一点我在做实验时出现的问题:
如果出现切换用户时提示以下问题:问题可能在于目录的权限问题!
我可以用stat 检查下:这里的权限是错误的,X权限的丢失造成的。
因为stat可以看到更多的权限、
1. Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
2. Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
3. Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
转入正题:还是这张拓扑。
接下来看看scp的传输,要明白的是scp传输是基于SSH通道来实现的。
我这里在 将本机上(中心分发服务器) fengxin用户的家目录的4.txt用scp 发送给8.189这台服务器上fengxin用户的家目录了!
先创建好4.txt,并写入一些内容:
然后用ssh中的scp来执行远程拷贝。
然后我站在8.189的这台服务器上看,确认是远程拷贝过来了。
在企业实际生产运维中,我们完全可以利用脚本来实现scp的批量分发:
首先编辑一个脚本文件:(名字可以自己取)
这样的话,我用最笨的脚本来执行批量任务。(注意这里面的权限,必须到~目录,到/目录是没有权限的。)
去对端的服务器上检查就是有的:
如果在企业的生产环境中ssh的批量分发文件时慢,解决方案就是:
连接慢的主要原因在于DNS解析慢导致的!我需要到客户端上去寻找答案:
把图中的这些改动一下就可以:
改动一个API的选项
如果还是觉得连接速度慢,我就将Hosts文件里的IP地址指向自己:
最后记得一定不要忘记重启SSHD服务。
在实际生产环境中我们可以利用ssh -v 的参数调试功能来查找慢的原因:
记住scp是必须要借助ssh通道来实现传输的,这里我将ssh的服务端的一个hosts文件用scp方式借助ssh通道传送给其他的服务器的家目录。
以上我用scp传统方式连接服务器传输数据的例子来对比rsync传输。
‘’接着回到主线上来:
rsync借助ssh通道是怎么实现传输的:
首先,要明白rsyc通道传输和scp一样也支持pull push的功能。
如图:演示从中心服务器往节点分发服务器上推送hosts文件到家目录。
其中-e 的参数指定的是连接类型。
在平常使用rsync 的参数是 -avz:
有了推送,就有拉取的操作演示:
我想从阶段分发服务器上将家目录下的Hosts文件拉回到 本地/tmp下:
区别在于源地址和目的地址对调即可。
如果忘记具体的命令格式写法,千万不要忘记用man 来查询:
ssh通道用rsync的方法:
Access via rsync daemon:
Pull(拉): rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push(推): rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
对比方法如下图:
RSYNC客户端的常用参数:
rsync中最常见的参数为avz.
-a: archive 归档模式,表示以递归方式传输文件,保持所有文件属性。
-v: verbose的意思,代表详细模式输出,传输时的进度等信息。
-z:compress的意思,传输进行压缩,以提高传输效率。
其中想要连接这些参数的话,除了有关技术书籍之外,还可以到官方网站去查阅“”但是这个网站早期被屏蔽了,我从其他网站得到其他参数的意思:
接下来的重点在于:
用守护进程socket的方式进行数据传输:
rsync的daeman模式:
还是这样拓扑:需求如下
在备份服务器上衣rsync守护进程的方式部署rsync服务,是的所有rsync节点服务器可以把本地数据通过rsync的方式备份到备份服务器上去
首先配置rsync的配置服务:(服务端)
查看下备份服务器上有没有安装rsync:是装好的。
或者用rpm -qa:
如果没有这个服务,就用强大的yum 来安装就可以了:
其中rsync的版本时3.06
其中3.06比起cenos 5.8的2版本优势在于:在备份大量文件时,是边比对边备份。
其中 rsync的配置文件路径如下:
接下来用vim 来编辑rsync的配置文件:
其中的rsync配置文件可以从官网或者网上查询:
这里,我用vim编辑rsync的配置文件并加以注释解释参数的意思:如下图
uid = rsync
gid = rsync
use chroot = no
max connections = 4
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[share]
path = /tmp/share
lgnore errors
read only = false
list = false
hosts allow = 192.168.8.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file=/etc/rsync.password
服务端配置完成后,我们可以在备份服务器上进行服务启动:以守护进程的方式进行启动。(如果精通shell脚本,可以利用脚本来启动服务,待我好好研究后再说。)
rsync的服务端口是:873
目前查看rsync的日志是没有任何报错的提示:
因为我在配置文件中对文件路径有了明确的指示:
所以我不仅要对这个文件属主改变成rsync 还要创建rsync的用户才可!
但是这里只是创建的是虚拟用户,不允许它登录而已:
不要忘记把这个文件的属主给改变:
紧接着还要再备份服务器上重定向一个虚拟用户的密码到rsync密码文件路径中去。
重定向之后,我来观察存放rsync虚拟用户密码的位置:
注意的是用户名:冒号以后是虚拟用户的密码!!
为了更加安全,我要对此文件权限进行调整降低:600的权限最为合适:
还不要不忘记防火墙一定是要关闭的:还有selinx也是!
”到此为止,服务端配置完毕。