前言:

总结下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/

Centos RSYNC服务搭建_centos
文件被传输过来了
Centos RSYNC服务搭建_客户端_02
但有时文件目录的属主权限是不能随意更改的,比如服务器端搭建了一个网站,如果将属组改成其他可能导致访问不了,可以使用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
Centos RSYNC服务搭建_centos_03
同步到服务器端
Centos RSYNC服务搭建_服务器_04
同步完成
Centos RSYNC服务搭建_客户端_05

通过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

Centos RSYNC服务搭建_centos_06

[root@lemon etc]# rsync --daemon
[root@lemon etc]# netstat -anpt

Centos RSYNC服务搭建_客户端_07
端口已经开启了,下面就在服务器端创建测试文本

[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 

Centos RSYNC服务搭建_服务器_08
同步完成
Centos RSYNC服务搭建_linux_09

0x03:完成实时自动同步

需要两台服务器

服务器端 192.168.186.135
客户机端 192.168.186.136

双向同步服务器不需要认证,方便后面的实验
这里使用的是root用户

服务器端:

[root@lemon 桌面]# ssh-keygen -t rsa

Centos RSYNC服务搭建_linux_10

[root@lemon 桌面]# ssh-copy-id 192.168.186.136

同步到客户端中
Centos RSYNC服务搭建_客户端_11
同步成功
客户机端:

ssh-keygen -t rsa
ssh-copy-id 192.168.186.135

Centos RSYNC服务搭建_centos_12
注意:如果提示没有ssh-copy-id这个命令,是因为最小化安装的缘故有的软件包没有安装上去

执行下面,去掉最小化安装的问题.
yum -y install openssh-clients

测试一下,客户机登陆一下:
Centos RSYNC服务搭建_linux_13
测试成功

下面就来安装软件包,两台机器首先都需要安装gcc

yum -y install gcc*

安装好之后,两台机器连接一下软件包镜像,在软件包镜像挂载客户端的时候遇到了一个问题,因为我客户端选择的是无桌面的,连接镜像后什么也没有。
Centos RSYNC服务搭建_centos_14
解决方法:

mount -o ro /dev/cdrom /media/
再次查看

Centos RSYNC服务搭建_客户端_15
镜像挂载好之后,服务器和客户机都要进行安装

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

Centos RSYNC服务搭建_服务器端_16
这个错误不用管,是正常的

再将该命令添加到环境变量中去
[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

Centos RSYNC服务搭建_服务器端_17
同步成功
Centos RSYNC服务搭建_centos_18
但通过命令比较麻烦,可以写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

然后在客户机端远程连接服务器端
Centos RSYNC服务搭建_客户端_19
并在server1目录下创建一个文件,观察服务器端
Centos RSYNC服务搭建_服务器端_20
实现了自动传输

除了这种还有其他方法,能够实现文件传输

服务器端进行的操作:
需要安装两个软件包

[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可以查看到本机共享的文件
Centos RSYNC服务搭建_客户端_21
出现错误是因为NFS服务器的hosts文件中的域名和NFS服务器的IP地址不对应造成的。
解决方法如下:
https://yq.aliyun.com/articles/43115
Centos RSYNC服务搭建_服务器端_22
客户端进行的操作
先安装下这两个软件包

[root@lemon server1]# yum -y install rpcbind
[root@lemon server1]# yum -y install nfs-utils

在客户端使用命令查看,能发现服务器端共享出来的资源
Centos RSYNC服务搭建_centos_23
将服务器端的/public目录挂载到客户端的/mnt目录,如果权限不允许的话先重启服务试试看
Centos RSYNC服务搭建_服务器端_24
挂载/public目录成功,可以进行读写,下面来挂载一下/share目录,先卸载当前挂载的

umount /mnt/

然后将/share目录挂载到/mnt/目录,使用mount命令查看拥rw权限
Centos RSYNC服务搭建_服务器_25
到此实验就全部验证完成了!