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:用于短期监控,任务完成后再出结果
定期同步的缺点:
- 执行备份的时间固定,延期明显,实时性差
- 当同步源长期不变化时,密集的定期任务是不必要的(浪费资源)
实时同步的优点原理:
- 一旦同步源出现变化,立即启动备份,实时性好
- 只要同步源无变化,则不执行备份,节省资源
实验原理:以源服务器为基准
- 需要源服务器数据发生变化,先触发源服务器脚本,才能实现单向同步;
- 通过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
注意:
- 用户账号文件在主配置文件中指定位置,不需要创建用户,使用nobody账号进行代理。
- 需要修改权限,否则密码文件不生效。
设置系统映射用户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 | 每个实例最多监控文件数 |