Centos7通过Rsync同步服务器+inotify实时同步

本文介绍如何在Centos7环境中使用Rsync和inotify工具实现实时文件同步。包括Apache和PHP安装、Rsync配置及通过SSH实现免密登录等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验前准备

一台主服务器、两台从服务器

master-web: 192.168.77.128
salve-web1: 192.168.77.140
salve-web2: 192.168.77.141

主服务器搭建参考上一篇文章:《Centos7.9搭建WorePress》,从服务器可以是新建的两台Centos7服务器或者是之前主服务器刚刚搭建完成时的克隆。

主镜像源推荐搭建阿里源

[root@salve-web1 ~]# cd /etc/yum.repos.d/ && mkdir back && mv * back/
[root@salve-web1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@salve-web1 ~]# yum clean all && yum makecache

问题:非阿里云ECS用户会出现 Couldn’t resolve host ‘mirrors.cloud.aliyuncs.com’

[root@salve-web1 ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

附加镜像源设置可以参考《Centos7.9搭建WorePress》中的设置epel源和remi源。

从服务器安装Apache、PHP

Apache 安装
[root@salve-web1 ~]# yum -y install httpd
[root@salve-web1 ~]# systemctl start httpd
[root@salve-web1 ~]# systemctl enable httpd
PHP安装
[root@salve-web1 ~]# yum -y install yum-utils
[root@salve-web1 ~]# yum-config-manager --enable remi-php74
[root@salve-web1 ~]# yum -y install php php-cli php-mysql php-gd php-zip php-mbstring php-xml  php-imagick
[root@salve-web1 ~]# echo "<?php phpinfo();?>" > /var/www/html/index.php

浏览器输入ip地址,出现如下画面表示搭建成功:
在这里插入图片描述

Rsync

在实验时,遵守最小权限原则,可以在主服务器单独创建用来进行数据同步的普通用户,减少权限溢出。

在主服务器创建普通用户:

[root@master-web ~]# useradd rsynctest
[root@master-web ~]# passwd rsynctest
[root@master-web ~]# setfacl -m u:rsynctest:r-x /var/www/html
注:在不允许从服务上传文件的时候,不授予w 写权限

配置rsync配置文件

[root@master-web ~]# cat /etc/rsyncd.conf 
address=192.168.77.128 # rsync监听的ip地址
port=873   # rsync默认端口号为873
uid=rsynctest # 当以root用户运行rsync守护进程,指定传输文件所使用的用户
gid=rsynctest # 当以root用户运行rsync守护进程,指定传输文件所使用的组
use chroot=yes # 传输前是否需要进行根目录的锁定,yes是no否。为了增加安全性,默认为yes。
max connections=200 # 允许最大的连接数,默认值为0,表示不做限制
timeout=300  # 指定超时的时间,默认值为0表示永不超时
motd file=/var/rsyncd/rsync.motd
pid file=/var/run/rsyncd.pid # 进程pid的文件位置
lock file=/var/run/rsync.lock # 指定的锁文件,和“max connections ”参数有关
log file=/var/log/rsyncd.log # 日志的文件位置
dont compress=*.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 标志传输时不对这些文件进行压缩
[web]	# 共享名
	path=/var/www/html/	# 共享目录所在位置
	read only=yes	# yes表示只读,只能下载文件,no表示可读写,即可上传也可下载文件
	write only=no
	hosts allow=192.168.77.0/24	# 允许哪些ip或网段的客户端访问
	auth users=rsyncWeb	# 启动虚拟用户
	secrets file=/etc/rsyncd_users.db	# 指定虚拟用户的密码文件位置

从服务器使用rsync命令拉取主服务器网站文件:

[root@salve-web1 ~]# rsync -avz rsync://rsyncWeb@192.168.77.128/web /var/www/html/

Password: 
[root@salve-web1 ~]# ls /var/www/html

配置rsync+inotify实时同步

安装inotify-tools

方式一(yum安装,需配置epel源):

[root@master-web ~]# yum -y install inotify-tools inotify-tools-devel

方式二(源码安装inotify-tools):

[root@master-web ~]# yum -y install gcc gcc-c++ make
[root@master-web ~]# tar -xf inotify-tools-3.14.tar.gz
[root@master-web ~]# cd inotify-tools-3.14
[root@master-web ~]# ./configure && make && make install

inotifywait命令格式格式:

inotifywait -mrq -e 监控动作1,监控动作2 /监控目录 &
示例:inotifywait -mrq -e create,delete /var/www/html &
		-m:始终保持事件监听状态
		-r:递归查询目录
		-q:只打印监控事件的信息
监控动作:modify(内容),create,attrib(权限),move,delete
设置rsync通过ssh免密登录

使用ssh-keygen生成密钥:

[root@master-web ~]# ssh-keygen   # 默认全部按下Enter键
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub

使用ssh-copy-id将公匙拷贝至远程主机

[root@master-web ~]# ssh-copy-id -i .ssh/id_rsa.pub 192.168.77.140
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.77.140's password:   #输入你从服务器的密码

设置后无法免密登录,解决方式:

[root@salve-web1 .ssh]# vim /etc/ssh/sshd_config
设置StrictModes no # “StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。
[root@salve-web1 .ssh]# systemctl reload sshd
利用rsync+inotifywait结合脚本实现单向实时同步:
[root@maser-web ~]# vim inotify_rsync.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html/"
RSYNC1_CMD="rsync -avz --delete /var/www/html/ root@192.168.77.140:/var/www/html/"
RSYNC2_CMD="rsync -avz --delete /var/www/html/ root@192.168.77.141:/var/www/html/"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
	$RSYNC1_CMD
	$RSYNC2_CMD
done

[root@master-web ~]# chmod u+x inotify_rsync.sh
[root@master-web ~]# . /inotify_rsync.sh &

测试:

master:
在这里插入图片描述

salve1:

在这里插入图片描述

salve2:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值