RSYNC服务配置(linux centos 7)
文章目录
实验环境
centso 7
关闭防火墙与selinux
两台虚拟机,一台作为服务器,一台作为客户端(也可理解成同步备份服务器)
一、基于ssh的同步
yum -y install rsync #服务器与客户端都需要安装rsync服务
rsync 命令使用
基本格式:rsync [选项] 原始位置 目标位置
-a:归档模式,递归并保留对象属性,等同于 -rlptgoD
-v:显示同步过程的详细(verbose)信息
-z:在传输文件时进行压缩(compress)
-H:保留硬连接文件
-A:保留ACL属性信息
–delete:删除目标位置有而原始位置没有的文件
-r:递归模式,包含目录及子目录中所有文件
-l:对于符号链接文件仍然复制为符号链接文件
-p:保留文件的权限标记-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户使用)
-o:保留文件的属主标记(仅超级用户使用)
-D:保留设备文件及其他特殊文件
rsync -avz 同步源的一个账户@同步源IP:同步源目录 发起端目录 #下行同步
rsync -acz dal@192.168.154.187:/server /client
#同步服务器的/server目录里的文件到本地/client目录
rsync -avz 发起端目录 同步源的一个账户@同步源IP:同步源目录 #上行同步
rsync -avz /client/rsync dal@192.168.154.187:/server
#同步本地/client目录中的文件到服务器的/server目录
二、基于rsync的同步
2.1服务器配置:
vim /etc/rsync.conf #生成配置文件
服务器编辑文件内容如下:
address = IP地址 #服务器配置IP地址
port = 873 #监听端口号,可自定义
pid file = /var/run/rsyncd.pid #指定pid文件写入位置
log file = /var/log/rsyncd.log #指定log日志写入位置
#共享配置部分
[share] #共享名称
comment = soft #描述信息显示给客户
path = /server/rsync #共享目录位置
read only = yes #yes是允许客户读文件,no是可读可写
dont compress = *.gz *.bz2 *.zip #指定传输时不压缩的文件类型
auth users = dal #指定的虚拟用户可连接,多个用户使用 , 逗号分开
secrets file = /etc/rsyncd_users.db #指定rsync虚拟用户认证的文件,只有被auth users定义后可生效fake super = yes #无需rsync以root身份运行,允许接受数据
创建/etc/rsyncd_users.db文件
vin /etc/rsyncd_user.db
进入文件,格式:虚拟用户:密码
权限必须设置为600,否则报错:@ERROR: auth failed on module share
rsync error: error starting client-server protocol (code 5) at main.c(1649) [Receiver=3.1.2]dal:123
rsync --daemon #启动服务
kill rsync #杀进程来停止服务
mkdir -p /server/rsync #创建共享目录
2.2客户端配置并测试同步:
mkdir /client/rsync #客户端配置创建/client/rsync目录
rsync -avz dal@192.168.154.187::share /client/rsync #同步目录中的文件到本地,下行同步
touch /client/rsync/1.txt #客户端创建测试文件
修改服务器的/etc/rsyncd.conf配置文件的上传权限,
read -noly = no
修改目录的上传权限
setfacl -m u:nobody:rwx /server/rsync
nobody 是rsync虚拟用户的映射用户
rsync -avz /client/rsync/ dal@192.168.154.187::share #同步本地目录里文件到服务器share名称指定的共享目录
三、免密码登陆
基于ssh的免密码同步
ssh-keygen -t rsa #生成密钥对
ssh-copy-id server@服务器IP #公钥上传到服务器
此时同步不需要密码了
基于rsync的免密码同步,系统为rsync准备了变量
RSYNC_PASSWORD
我们只需要为这个变量赋值
echo $RSYNC_PASSWORD
查看这个变量,此时为空
export RSYNC_PASSWORD=123456 #给他赋值,为我们刚开始设置的rsync的密码
这样下行同步就不需要密码了
四、inotify实现实时同步
链接:https://pan.baidu.com/s/1bcHNEYwCoIiT1EwHSnUI-g 提取码:sync
yum -y install gcc #安装gcc
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz #安装inotifu-tools
tar -zxf inotify-tools-3.14.tar.gz #解压缩包
./configure && make && make install* #进入解压后目录bing'y
inotifywait:用于持续监控,实时输出结果inotifywatch:用于短期监控,任务完成后再出结果
选项:
-m:表示持续监控
-r:表示递归监控
-q:表示输出数据简化
-e:指定你要监控的哪些数据 例:create(创建),delete(删除),modify(修改),move(移动),多个命令用逗号隔开ctrl+c #退出inotifywait -mrq -e modify,create,move,delete /server/rsync #实时监控,输出结果
inotifywatch -mrq -e modify,create,move,delete /server/rsync #短期监控,任务完成后出结果
4.1、inotify+rsync
4.1.1、基于ssh的实时同步
利用inotify有输出这一特性可以进行与脚本的配合,实时监控数据的增删,进行同步
**先进行免密认证
然后在服务器端写脚本
vim 1.sh
#!/bin/bash
a="/usr/local/bin/inotifywait -mrq -e create /var/www/html/"
b="/usr/bin/rsync -avz /server/rsync* 192.168.154.187:/client/rsync"
$a | while read directory event file
do
$b
done
4.2、inotify+unsion双向备份
4.2.1、服务器配置:
mkdri server1 #服务器创建目录
yum -y install gcc* #安装gcc
ssh-keygen -t rsa #生成密钥对
ssh-copy-id 客户端IP #服务器传给客户端
wget http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.1.tar.gz #下载ocaml-3.10.3.tar.gz包
tar -zxf ocaml-3.10.3.tar.gz #解压安装包
cd ocaml-3.10.3 #进入ocaml-3.10.3
make world opt
make install
#编译安装
wget https://www.seas.upenn.edu/~bcpierce/unison/download/releases/unison-2.13.16/unison-2.13.16.tar.gz
#下载unison-2.13.16.tar.gz包
tar -zxf unison-2.13.16.tar.gz #解压unison-2.13.16.tar.gz包
make UISTYLE=text THREADS=true STATIC=true
#编译安装
cp unison /usr/local/bin/ #拷贝启动路径
4.2.2、客户端配置与服务器同理:
mkdir server2 #客户端创建目录
yum -y install gcc* #安装gcc
ssh-keygen -t rsa #生成密钥对
ssh-copy-id 客户端IP #服务器传给客户端
wget http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.1.tar.gz #下载ocaml-3.10.3.tar.gz包
tar -zxf ocaml-3.10.3.tar.gz #解压安装包
cd ocaml-3.10.3 #进入ocaml-3.10.3
make world opt
make install
#编译安装
wget https://www.seas.upenn.edu/~bcpierce/unison/download/releases/unison-2.13.16/unison-2.13.16.tar.gz
#下载unison-2.13.16.tar.gz包
tar -zxf unison-2.13.16.tar.gz #解压unison-2.13.16.tar.gz包
make UISTYLE=text THREADS=true STATIC=true
#编译安装
cp unison /usr/local/bin/ #拷贝启动路径
五、安装配置完成后编写脚本并测试
5.1服务器写脚本:vim 2.sh
#!/bin/bash
a=“/usr/local/bin/inotifywait -mrq -e create,delete /server1”
b=“/usr/local/bin/unison -batch /server1 ssh://客户端IP//server2”
$a | while read directory event file
do
$b
done
5.2客户端写脚本:vim 2.sh
#!/bin/bash
a="/usr/local/bin/inotifywait -mrq -e create,delete /server2/rsync"
b="/usr/local/bin/unison -batch /server2/rsync ssh://服务器IP//server1/rsync"
$a | while read directory event file
do
$b
done
bash 2.sh & #分别把两端的脚本放到后台执行
在指定目录里创建文件,就可以看到服务器或者客户端的变化了