码迷,mamicode.com
首页 > 系统相关 > 详细

linux系统 <font color="red">rsync结合inotify实时同步</font>

时间:2020-07-13 18:30:31      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:测试   rpcbind   ack   开机自启   tmp   boot   tar   实现   lin   

rsync结合inotify实时同步

# 客户端下载inotify
 yum install -y inotify-tools
# 安装完成就有了一个inotifywait命令,这个命令是用来做监控的,下面是关于这个命令的参数
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载

#测试一下使用命令监控/backup目录
[root@web02 ~]# inotifywait  -mrq  --format ‘%Xe  %w  %f‘ -e create,modify,delete,attrib,close_write  /backup

技术图片

在左边使用监控命令,右边新开一个窗口在监控的目录里创建文件。可以可到左边发生了变化

创建/备份/a.txt

ATTRIB/backup/a.txt

文件关闭writeexclose/backup/a.txt

## rsync结合inotify通过脚本实现无差异实时备份
# 环境准备一台服务端机器安装配置好rsync的
# 一台客户端服务器安装好rsync和inotify-tools
# 通过编辑脚本触发命令从而完成服务端和客户端实时无差异同步
# 客户端脚本内容如下
vim rsync_inotify.sh
#!/bin/bash

#设置环境变量
export RSYNC_PASSWORD=123
#设置变量
jk_dir=/backup

#监控/backup目录
/usr/bin/inotifywait  -mrq  --format ‘%Xe  %w  %f‘ -e create,modify,delete,attrib,close_write $jk_dir | while read line;do
rsync -az --delete  $jk_dir/ wzh_bak@10.0.0.41::wzh
done &

#脚本完成退出保存,运行脚本
[root@web02 ~]# sh rsync_inotify.sh 
#查看脚本进程
[root@web02 ~]# ps -ef |grep rsync_inotify.sh 
root       8222      1  0 20:06 pts/0    00:00:00 sh rsync_inotify.
root       8226   6939  0 20:06 pts/0    00:00:00 grep --color=aut
# 进入到监控的目录
[root@web02 ~]# cd /backup/
# 查看里面内容
[root@web02 backup]# ll
total 0
-rw-r--r-- 1 root root  0 May  8 19:21 123.txt
-rw-r--r-- 1 root root  0 May  8 19:29 a.txt
drwxr-xr-x 2 root root 49 May  7 20:47 web02_172.16.1.8_2020-05-07
# 删除目录下的内容
[root@web02 backup]# rm -rf ./*
# 再次查看
[root@web02 backup]# ll
total 0
# 进入服务端的rsync接收目录
[root@backup ~]# cd /backup/
# 查看目录里面的内容
[root@backup backup]# ll
total 39740
-rw-r--r-- 1 rsync rsync 10162447 May  7 23:00 2020-05-07_web01_etc.tar.gz
-rw-r--r-- 1 rsync rsync 10162726 May  7 23:00 2020-05-07_web02_etc.tar.gz
-rw-r--r-- 1 rsync rsync 10190787 May  8 23:00 2020-05-08_web01_etc.tar.gz
-rw-r--r-- 1 rsync rsync 10162935 May  8 23:00 2020-05-08_web02_etc.tar.gz
drwxr-xr-x 2 rsync rsync       32 May  7 23:05 222
-rw-r--r-- 1 rsync rsync        0 May  7 23:01 2.txt
drwxr-xr-x 2 rsync rsync       49 May 25  2020 nfs_172.16.1.31_2020-05-25
drwxr-xr-x 2 rsync rsync       49 May  9 01:00 nfs__2020-05-09
-rw-r--r-- 1 rsync rsync     1022 May  7 17:58 passwd
drwxr-xr-x 2 rsync rsync       49 May  7 20:47 web02_172.16.1.8_2020-05-07


# 在客户端的监控目录里面创建一个a.txt文件
[root@web02 backup]# touch a.txt
[root@web02 backup]# 
# 查看服务端的rsync接收目录
[root@backup backup]# ll
total 0
-rw-r--r-- 1 rsync rsync 0 May  8 20:30 a.txt
# 可以看到这时候就实现的实时同步,这时候编辑客户端的a.txt文件,服务端的a.txt文件也随之变化,而这一切都是inotify命令的作用,它的-e 选项指定了删除,编写,创建等发生变化的参数
```bash

### <font color="red">NFS共享存储</font>

![](https://img2020.cnblogs.com/blog/2082997/202007/2082997-20200713171823838-545210458.png)
### 通过Apache和PHP的代码实现共享存储

**环境准备**



| 主机名 | 外网IP    | 内网IP      | 角色   |
| ------ | --------- | ----------- | ------ |
| web01  | 10.0.0.7  | 172.16.1.7  | 客户端 |
| web02  | 10.0.0.8  | 172.16.1.8  | 客户端 |
| nfs    | 10.0.0.31 | 172.16.1.31 | 服务端 |
**环境准备完成必须关闭防火墙**

**关闭防火墙**

systemctl stop firewalld

**禁止开机自启**

systemctl disable firewalld

**sed替换修改配置配置文件/etc/selinux/config**

sed -i ‘/^SELINUX=/c SELINUX=disabled‘ /etc/selinux/config

首先下载httpd和PHP

[root@web02 html]# yum install -y php httpd

然后进入到httpd的站点目录

可以用rpm -ql httpd 查找
结果找到了在/var/www/html下

上传考试代码文件

rz 加上传的文件

cd 到这个站点目录

[root@web02 ~]# cd /var/www/html

把上传的文件移动到html目录下

[root@web02 html]# mv /root/kaoshi.zip .

解压开文件

[root@web02 html]# unzip kaoshi.zip

把html目录的属主属组授权为apache

[root@web02 html]# chown -R apache.apache /var/www/html/

启动服务

[root@web02 html]# systemctl start httpd

查看端口和进程

[root@web02 html]# ps -ef |grep httpd
root 8524 1 0 21:44 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8525 8524 0 21:44 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8526 8524 0 21:44 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8527 8524 0 21:44 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8528 8524 0 21:44 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8529 8524 0 21:44 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8563 8524 0 21:47 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8598 8524 0 22:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8599 8524 0 22:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 8600 8524 0 22:03 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 8613 6939 0 22:16 pts/0 00:00:00 grep --color=auto httpd
[root@web02 html]# ss -an|grep ‘80‘
u_str ESTAB 0 0 * 21802 * 21803
u_str ESTAB 0 0 /run/systemd/journal/stdout 21803 * 21802
u_str ESTAB 0 0 * 38062 * 38063
u_str ESTAB 0 0 /run/dbus/system_bus_socket 38063 * 38062
u_str ESTAB 0 0 /run/systemd/journal/stdout 36980 * 36979
u_str ESTAB 0 0 * 37880 * 37881
u_str ESTAB 0 0 * 37881 * 37880
u_str ESTAB 0 0 * 36979 * 36980
tcp LISTEN 0 128 :::80 ::??

通过ip访问网站

![](https://img2020.cnblogs.com/blog/2082997/202007/2082997-20200713172307248-1644413211.png)

修改httpd的用户和组

vim /etc/httpd/conf/httpd.conf
搜索/apache 找到user Apache 和group Apache
修改为www

创建用户和用户组

[root@web02 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

授权html的所属用户和用户组为www

[root@web02 ~]# chown -R www.www /var/www/html/

重启服务

[root@web02 ~]# systemctl restart httpd

查看端口和进程

[root@web02 ~]# netstat -lntup|grep 80
tcp6 0 0 :::80 ::?? LISTEN 9228/httpd
[root@web02 ~]# ps -ef|grep [h]ttpd
root 9228 1 0 01:21 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
www 9229 9228 0 01:21 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
www 9230 9228 0 01:21 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
www 9231 9228 0 01:21 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
www 9232 9228 0 01:21 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
www 9233 9228 0 01:21 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND

### 配置nfs的服务端的配置文件

**nfs****共享参数** 

**参数作用**

rw 

读写权限

ro 

只读权限

root_squash 

当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)

no_root_squash 

当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)

all_squash 

无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)

no_all_squash 

无论NFS客户端使用什么账户访问,都不进行压缩

sync 

同时将数据写入到内存与硬盘中,保证不丢失数据

async 

优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据

*anonuid* 

配置all_squash使用,指定NFS的用户UID,必须存在系统

**anongid** 

配置all_squash使用,指定NFS的用户UID,必须存在系统

编辑nfs的配置文件

[root@nfs ~]# vim /etc/exports

/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

创建配置文件制定的目录和用户

[root@nfs ~]# mkdir /data
[root@nfs ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

授权/data目录所属用户和用户组

[root@nfs ~]# chown www.www /data

[root@nfs ~]# ll /data -d
drwxr-xr-x 2 www www 6 May 8 19:48 /data

启动服务先启动rpcbind 再启动nfs-server

[root@nfs ~]# systemctl start rpcbind nfs-server

添加服务的开机自启

systemctl enable rpcbind nfs-server

**客户端操作**

查看服务端的房源

[root@web02 html]# showmount -e 10.0.0.31
Export list for 10.0.0.31:

/var/www/html/下的压缩包移走

[root@web02 html]# mv kaoshi.zip /root/

挂载目录

[root@web01 ~]# mount -t nfs 10.0.0.31:/data /var/www/html/

查看挂载

[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.4G 18G 8% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
10.0.0.31:/data 19G 1.3G 18G 8% /var/www/html/

查看/var/www/html/里面的内容

[root@web02 html]# ll
total 0
-rw-r--r-- 1 root root 0 May 9 01:28 a.txt

查看服务端的/data目录里的内容

[root@nfs data]# ll
total 0
-rw-r--r-- 1 root root 0 May 9 01:28 a.txt

OK,这样 就完成了服务端和客户端的实时共享

linux系统 <font color="red">rsync结合inotify实时同步</font>

标签:测试   rpcbind   ack   开机自启   tmp   boot   tar   实现   lin   

原文地址:https://www.cnblogs.com/zabcd/p/13294413.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!