网络服务—RSYNC(映射nobody)

2022-09-16 22:17:31 浏览数 (1)

Rsync服务概况

注意:使用root用户进行实验可以,但生产环境中尽量使用单独创建的普通用户,减少权限溢出;

创建用来做数据同步的用户,并给予用户对目录的相应权限,一般使用ACL设置权限

useradd zhangsan

passwd zhangsan

setfacl -m u:zhangsan:rwx /filesrc

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

我们一般使用rsync来进行单向数据同步,因此我们需要确定一个基准,比如:两台服务器,一台NFS作为网站数据服务器(基准服务器),另外一台专门做rsync数据备份服务器,我们以此为基础开始我们的实验。

实验三:配置rsync inotify实时单向同步(ssh协议 rsync协议):以rsync服务器作为基准服务器

inotify简介

inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。要使用 inotify,必须具备一台带有 2.6.13 版本的内核操作系统。

inotify两个监控命令:

inotifywait:用于持续监控,实时输出结果(常用)

inotifywatch:用于短期监控,任务完成后再出结果

定期同步的缺点:

  1. 执行备份的时间固定,延期明显,实时性差
  2. 当同步源长期不变化时,密集的定期任务是不必要的(浪费资源)

实时同步的优点原理:

  1. 一旦同步源出现变化,立即启动备份,实时性好
  2. 只要同步源无变化,则不执行备份,节省资源

实验原理:以源服务器为基准

  • 需要源服务器数据发生变化,先触发源服务器脚本,才能实现单向同步;
  • 通过inotify实时监控,调用脚本实现远程数据实时单向同步
  • 也就是说当源服务器数据数据发生变化时,源服务器触发脚本,才可以自动执行备份命令,否则不同步;
  • 此时源服务器先使用ssh协议免密码登录备份服务器
  • 备份服务器再使用rsync协议,将源服务器Server1上的数据同步到备份服务器Server2上。

实验环境:

  • 1号搭建rsync源服务器(仅需要在NFS服务器上搭建即可)
  • 2号搭建充当rsync备份服务器
  • 在两台服务器上分别创建目录(/filesrc、/filedst)

实验步骤

第一步: 配置源服务器和备份服务器:S1源服务器;S2备份服务器

源服务器:Server1: 192.168.3.13,安装rsync,源目录:/filesrc

安装rsync服务

yum -y install rsync

创建源目录

mkdir /filesrc

备份服务器:Server2: 192.168.3.23,安装rsync,目标目录:/filedst

安装rsync服务

yum -y install rsync

创建备份目录

mkdir /filedst

第二步:实现免密码数据同步,创建ssh密钥对登录

代码语言:javascript复制
Server1:
ssh-keygen -t rsa -b 2048
ssh-copy-id root@192.168.3.23
Server2
ssh-keygen -t rsa -b 2048
ssh-copy-id root@192.168.3.13
第三步:rsync源服务器服务器安装inotify
yum -y install gcc* unzip
上传软件包inotify-tools.zip
unzip inotify-tools.zip
cd inotify-tools/
tar -xvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure && make && make install
扩展
inotifywait命令格式
格式:inotifywait -mrq -e 监控动作1,监控动作2 /监控目录 &
示例:inotifywait -mrq -e create,delete,move,modify,attrib /filesrc &
-m:始终保持事件监听状态
-r:递归查询目录
-q:只打印监控事件的信息
监控动作:modify(内容),create,attrib(权限),move,delete

第四步:修改rsync源服务器主配置文件

修改rsyncd服务的主配置文件 : vim /etc/rsyncd.conf

代码语言:javascript复制
【配置文件最后新增】
address = 192.168.3.13
#rsync服务绑定IP
port 873
#默认服务端口873
log file = /var/log/rsyncd.log
#日志文件位置
pid file = /var/run/rsyncd.pid
#进程号文件位置
web
#共享名:用来连接是写在url上的,切记
comment = web directory backup
#共享描述话语
path = /filesrc
#实际共享目录
read only = no
#是否仅允许读取
dont compress = *.gz *.bz2
#哪些文件类型不进行压缩
auth users = user1
#登录用户名(非系统用户,需要自行创建)
secrets file = /etc/rsyncd_users.db
#认证所需账户密码文件(需自行创建-同上)
直接复制下面这段:
address = 192.168.3.13
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
web
comment = web directory backup
path = /filesrc
read only = no
dont compress = *.gz *.bz2
auth users = user1
secrets file = /etc/rsyncd_users.db

第五步:创建修改rsync源服务器登录用户账号文件

创建登录用户账号文件

添加的登录用户账号信息: vim /etc/rsyncd_users.db

user1:123456

user2:123456

修改文件权限,必须做:

chmod 600 /etc/rsyncd_users.db

注意:

  1. 用户账号文件在主配置文件中指定位置,不需要创建用户,使用nobody账号进行代理。
  2. 需要修改权限,否则密码文件不生效。
设置系统映射用户nobody对共享目录有权限(r)

setfacl -R -m u:nobody:rwx /filesrc

setfacl -Rd -m u:nobody:rwx /filesrc

注意:关闭服务可使用kill命令,但偶尔会造成服务被结束,但进程号配置文件不被删除的问题,若遇到此类问题可自己手动删除,再启动则正常。

第六步:源服务器和备份服务器都启动rsyncd服务

systemctl start rsyncd

systemctl restart rsyncd

systemctl enable rsyncd

第七步:S1-rsync服务器上创建脚本实现实时同步

在S1上操作:利用rsync inotifywait结合脚本实现单向实时同步

cd /root

S1:源服务器(基准服务器)

原理:目标目录与源目录直接比较

下载功能脚本,附带delete,这个选项只能用于下载

代码语言:javascript复制
vim src.sh
#!/bin/bash
a="inotifywait -mrq -e create,delete,move,modify,attrib /filesrc"
$a | while read directory event file #while判断是否接收到监控记录
do
ssh 192.168.3.23 'export RSYNC_PASSWORD=123456;rsync --delete -avz rsync://user1@192.168.3.13/web /filedst'
done

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

将脚本放入后台实现实时同步:

nohup bash -x src.sh &

#要回到root家目录下再执行此命令,否则可能报错

将脚本放入后台,bash -x的功能就是执行脚本的命令时,会先把脚本的命令输出出来,然后通过nohup命令将执行脚本信息的返回值以日志的形式输出追加到当前目录"nohup.out"文件中,

注:用户登录时要求免密码验证

第八步:实验结果验证测试不同操作的同步情况

在服务器端创建,删除文件,查看备份端是否正常

拓展:调整inotify监控的文件数量

调整inotify内核参数(/etc/sysctl.conf)

mak_queue_events

监控队列大小

mak_user_instances

最多监控实例数

max_user_watches

每个实例最多监控文件数

0 人点赞