Linux第十九章实验报告

实验1:ssh 协议数据同步:

       将 NFS 服务器数据同步备份到 rsync 服务器

:环境说明:

  一台 NFS 服务器,一台 rsync 服务器;在两台服务器上分别创建目录(/filesrc、/filedst)

下行同步(下载)

格式:rsync -avz 服务器地址:/服务器目录/*    /本地目录

示例:rsync -avz root@192.168.88.10:/filesrc/* /filedst

-a:归档模式,递归并保留对象属性

-v:显示同步过程

-z:在传输文件时进行压缩

实例:

20cb36e6253114c03c2bb903eb966802.png

上行同步(上传)

格式:rsync -avz   /本地目录/*   服务器地址:/服务器目录

示例:rsync -avz /filedst/*   root@192.168.88.10:/filesrc

实例:

16109a3dce2e09711bed7d57200da7f0.png

注意:使用 root 用户进行实验可以,但生产环境中尽量使用单独创建的普通用户,减少权限溢出创建用来做数据同步的用户,并给予用户对目录的相应权限,一般使用 ACL 设置权限

# useradd zhangsan

# passwd zhangsan

# setfacl -m u:zhangsan:rwx /filesrc

拓展:若要实现免密码数据同步,只需要双方做好 ssh 密钥对登录即可

ssh-keygen -t rsa -b 2048

ssh-copy-id  root@192.168.113.120

实例:

993c6a34aaea7304f7cf8438b9e33a00.png

步骤相同,ip不同

175190771c420f9469f27677c023e2cc.png

实验2:rsync 协议数据同步:

       将 NFS 服务器数据同步备份到 rsync 服务器

环境说明:

       一台服务器,一台客户端

1. 在两台服务器上分别创建目录(/filesrc、/filedst)

2. 搭建 rsync 服务(仅需要在 NFS 服务器上搭建即可)

3. 创建主配置文件(/etc/rsyncd.conf)

address = 192.168.113.110

port 873

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

[web]

        comment = web directory

        path = /filesrc

        read only = no

        dont compress = *.gz *.bz2

        auth users = user1

secrets file = /etc/rsyncd_users.db       

#rsync 服务绑定 IP

#默认服务端口 873

#日志文件位置

#进程号文件位置

#共享名:用来连接是写在 url 上的,切记

#共享描述话语

#实际共享目录(如果报错就手敲)

#是否仅允许读取

#哪些文件类型不进行压缩

#登录用户名(非系统用户,需要自行创建)

#认证所需账户密码文件(需自行创建-同上)

4. 创建认证所需账户密码文件

# vim /etc/rsyncd_users.db      

# user1:123456      

# chmod 600 /etc/rsyncd_users.db         #必须修改权限,否则登录报错

5. 启动服务

# rsync --daemon      

# netstat -antp | grep :873

6. 设置映射用户对共享目录有权限(r)

# setfacl -m u:nobody:rwx /firesrc/

注意:关闭服务可使用 kill 命令,但偶尔会造成服务被结束,但进程号配置文件不被删除的问题,若遇到此类问题可自己手动删除,再启动则正常(建议自己写一个 rsync 的服务管理脚本)       

报错提示:

问题:@ERROR: chroot failedrsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]

原因:服务器端的目录不存在或无权限。

解决方法:

创建目录并修正权限可解决问题;或者是修改(/etc/rsyncd.conf),可能是由于文件字符集错误导致。

下行同步(下载)

格式:rsync -avz rsync://用户名@服务器地址/共享模块名 /本地目录

示例:

rsync -avz rsync://user1@192.168.113.110/web /filedst

拓展:--delete:删除本地比服务器多出来的文件(源地址没有,目标地址有的删掉)

rsync -avz --delete rsync://user1@192.168.113.110/web /firedst/

实例:

5a47120baf767e674f02029d3b7063dd.png

d8c33413b762f550a70310e4be38c835.png

上行同步(上传)

格式:rsync -avz  /本地目录/*  rsync://用户名@服务器地址/共享模块名

示例:

rsync -avz /filedst/* rsync://user1@192.168.88.10/web

拓展:rsync 协议的免密码可以借助一个环境变量实现

# export RSYNC_PASSWORD=虚拟用户密码(客户端生成)

实例:

46bcd4cbe2d08d68bd7a929d80d66429.png

77162f800916320edcfcba56919bc0f8.png

实验3:配置 unison+inotify 实现双向实时同步

   rsync 在单向同步上支持的非常好,且效率很高,但是在双向同步支持较差;unison 则是双向同步的优秀工具,但其缺点是同步效率较低。

环境说明:

       1. 准备好同步所需的两个目录

       2. 如若用 root 来实现登录的话,生成密钥对,以便于免密码验证

       3. 准备好 inotify 和 unison 的软件包

       4. 解决依赖关系,gcc、gcc-c++

1. 安装步骤

1)先安装 inotify

# tar -xf inotify-tools-3.14.tar.gz

# cd inotify-tools-3.14

# ./configure && make && make install

2. 再安装 ocaml

# tar -xf ocaml-3.10.1.tar.gz

# cd ocaml-3.10.1

# ./configure                          #忽略所有报错

# make world opt

# make install

3. 安装 unison

# tar -xf unison-2.13.16.tar.gz

# cd unison-2.13.16

# make UISTYLE=text THREADS=true STATIC=true       

#已经存在 Makefile 文件,不需要./configure

# cp unison /usr/local/bin/       #把生成的脚本拷贝出来

注意:同样的操作在服务器端也做一遍。

4. 配置脚本

注:双向自动同步,监控目录和数据同步时,源目录不能使用*通配符传输,否则会变成死循环。

filesrc 端:

#!/bin/bash

a="inotifywait -mrq -e create,delete,modify /firesrc"

b="/usr/local/bin/unison -batch /firesrc/ ssh://192.168.113.120//firedst/"

#-batch:批处理

$a | while read directory event file

do

        $b

done

filedst 端:

#!/bin/bash

a="inotifywait -mrq -e create,delete,modify /firedst"

b="/usr/local/bin/unison -batch /firedst/ ssh://192.168.113.110//firesrc/"

#-batch:批处理

$a | while read directory event file

do

        $b

done

5. 测试

将两个脚本放入后台执行:bash src.sh &

分别在两个主机上创建文件查看是否可以实现双向实时同步(可能会有延迟)

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐