前言:
总结下RSYNC服务搭建
介绍:
Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。
特点:
- 能更新整个目录和树和文件系统
- 有选择性的保持符号连接、硬链接、文件属于、权限、设备以及时间等
- 能用rsh、ssh或直接端口做为传输入端口
- 支持匿名rsync同步文件
rsync同步源:
指备份操作的远程服务器,也称为备份源,主要包括两种:rsync源、SSH源
命令格式:
本地同步
rsync 本地目录1 本地目录2
rsync+ssh同步
rsync SSH源 本地目录
rsync 本地目录 SSH源
rsync+rsync同步
rsync rsync源 本地目录
rsync 本地目录 rsync源
rsync命令的用法:
基本格式:rsync [选项] 原始位置 目标位置
-a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD
-r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项;
-t 保持文件的时间属性;
-p 保持文件的权限属性;
-l 保留软链接;
-L 同步软链接的同时同步其源文件;
-g 保存文件数组;
-o 保持文件的属主;
-D 保存设备文件信息;
-v =visual,可视化;
-P 显示同步过程,比v更详细;
-u =update,加上该选项,如果DEST中文件比SRC中的新,则不同步;
-z =zip,传输时压缩;
–delete 删除DEST中SRC没有的文件;
–exclude 过滤指定文件,不同步;
–progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等;
-e 指定端口;
进行实验
需要两台服务器
服务器端 192.168.186.135
客户机端 192.168.186.132
通过SSH进行同步
服务器端
[root@lemon /]mkdir /var/ssh
[root@lemon ssh]# touch ssh.txt(进行测试的文本)
#i建立两个用户,一个上传一个下载
[root@lemon ssh]# useradd a1
[root@lemon ssh]# passwd a1
[root@lemon ssh]# useradd a2
[root@lemon ssh]# passwd a2
#a1用户上传,更改一下属主权限
[root@lemon var]# chown a1:a1 /var/ssh/
#a2用户进行下载
客户机端(发起端)
mkdir /ssh
#发起端要先安装下rsync,使用命令:
rsync -avz a2@192.168.186.135:/var/ssh/* /ssh/
文件被传输过来了
但有时文件目录的属主权限是不能随意更改的,比如服务器端搭建了一个网站,如果将属组改成其他可能导致访问不了,可以使用setfacl
命令进行操作
[root@lemon var]# mkdir /a
[root@lemon var]# setfacl -m u:manager:rwx /a
[root@lemon var]# useradd shy
[root@lemon var]# setfacl -m u:shy:r-x /a
#i删除权限
[root@lemon var]setfacl -x u:shy:r-x /a
[root@lemon var]setfacl -b /a
数据的上传
在客户端ssh目录下新建一个test.txt
同步到服务器端
同步完成
通过RSYNC进行同步
服务器端
没有主配值文件,需要自己手动写
[root@lemon etc]# vim /etc/rsyncd.conf
use chroot = yes
address = 192.168.186.135
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[share]
comment = shy
path = /var/rsync
read only = yes
dont compress = *.gz *.bz2
auth users = shy
secrets file = /etc/rsyncd_users.db
写一个密码存放的文件
[root@lemon etc]# vim /etc/rsyncd_users.db
[root@lemon etc]# rsync --daemon
[root@lemon etc]# netstat -anpt
端口已经开启了,下面就在服务器端创建测试文本
[root@lemon etc]# mkdir /var/rsync
[root@lemon etc]# cd /var/rsync/
[root@lemon rsync]# touch rsync.txt
客户端
先创建一个存放文件的目录
mkdir /rsync
进行连接
rsync -avz shy@192.168.186.135::share /rsync
如果访问失败的话更改一下服务器端密码文件的权限
#服务器端
[root@lemon rsync]# cd /etc
[root@lemon etc]# chmod 600 rsyncd_users.db
同步完成
0x03:完成实时自动同步
需要两台服务器
服务器端 192.168.186.135
客户机端 192.168.186.136
双向同步服务器不需要认证,方便后面的实验
这里使用的是root用户
服务器端:
[root@lemon 桌面]# ssh-keygen -t rsa
[root@lemon 桌面]# ssh-copy-id 192.168.186.136
同步到客户端中
同步成功
客户机端:
ssh-keygen -t rsa
ssh-copy-id 192.168.186.135
注意:如果提示没有ssh-copy-id
这个命令,是因为最小化安装的缘故有的软件包没有安装上去
执行下面,去掉最小化安装的问题.
yum -y install openssh-clients
测试一下,客户机登陆一下:
测试成功
下面就来安装软件包,两台机器首先都需要安装gcc
yum -y install gcc*
安装好之后,两台机器连接一下软件包镜像,在软件包镜像挂载客户端的时候遇到了一个问题,因为我客户端选择的是无桌面的,连接镜像后什么也没有。
解决方法:
mount -o ro /dev/cdrom /media/
再次查看
镜像挂载好之后,服务器和客户机都要进行安装
cd /media/20130806_063316/
cp * /usr/src
先安装ocaml这个函数库(都要装)
[root@lemon src]# tar -zxf ocaml-3.10.1.tar.gz
[root@lemon src]# cd ocaml-3.10.1
[root@lemon ocaml-3.10.1]# ./configure
[root@lemon ocaml-3.10.1]# make world opt
[root@lemon ocaml-3.10.1]# make install
再安装unison(都要装)
[root@lemon src]# tar -zxf unison-2.13.16.tar.gz
[root@lemon unison-2.13.16]# make UISTYLE=text THREADS=true STATIC=true
这个错误不用管,是正常的
再将该命令添加到环境变量中去
[root@lemon unison-2.13.16]# cp unison /usr/local/bin/
接下来再安装inotify软件(都要装)
[root@lemon src]# tar -zxf inotify-tools-3.14.tar.gz
[root@lemon src]# cd inotify-tools-3.14
[root@lemon inotify-tools-3.14]# ./configure
[root@lemon inotify-tools-3.14]# make
[root@lemon inotify-tools-3.14]# make install
安装好之后进行测试
服务器端
mkdir /server1
[root@lemon server1]# touch server1.txt
客户端
mkdir /server2
touch server2.txt
服务器端进行同步
[root@lemon inotify-tools-3.14]# unison -batch /server1/ ssh://192.168.186.136//server2
同步成功
但通过命令比较麻烦,可以写shell脚本自动实现传输
#!/bin/bash
ip2="192.168.186.136"
src2="/server1"
dst2="/server2"
/usr/local/bin/inotifywait -mrq -e create,delete $src2 | while read line;
do
/usr/local/bin/unison -batch $src2 ssh://$ip2/$dst2
echo -n "$line" >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
保存为1.sh
执行脚本
bash 1.sh
然后在客户机端远程连接服务器端
并在server1目录下创建一个文件,观察服务器端
实现了自动传输
除了这种还有其他方法,能够实现文件传输
服务器端进行的操作:
需要安装两个软件包
[root@lemon server1]# yum -y install rpcbind
[root@lemon server1]# yum -y install nfs-utils
[root@lemon server1]# vim /etc/exports
在这个文件中写入我们想要文件共享的列表
/public 192.168.186.0/24(rw,sync)
/share 192.168.186.136(ro,sync)
比如建立这两个目录,public目录是186网段的都拥有读写权限,而share 目录只192.168.186.136
可以读
[root@lemon /]# mkdir /public
[root@lemon /]# mkdir /share
[root@lemon /]# chmod 777 /public/
[root@lemon /]# chmod 777 /share/
[root@lemon /]# cd /public/
[root@lemon public]# touch public.txt
[root@lemon public]# cd ..
[root@lemon /]# cd /share/
[root@lemon share]# touch share.txt
重启下服务
[root@lemon share]# service rpcbind restart
[root@lemon share]# service nfs restart
showmount -e可以查看到本机共享的文件
出现错误是因为NFS服务器的hosts文件中的域名和NFS服务器的IP地址不对应造成的。
解决方法如下:
https://yq.aliyun.com/articles/43115
客户端进行的操作
先安装下这两个软件包
[root@lemon server1]# yum -y install rpcbind
[root@lemon server1]# yum -y install nfs-utils
在客户端使用命令查看,能发现服务器端共享出来的资源
将服务器端的/public目录挂载到客户端的/mnt目录,如果权限不允许的话先重启服务试试看
挂载/public目录成功,可以进行读写,下面来挂载一下/share目录,先卸载当前挂载的
umount /mnt/
然后将/share目录挂载到/mnt/目录,使用mount命令查看拥rw权限
到此实验就全部验证完成了!