29-nfs-sersync详解

本文详细介绍了NFS(网络文件系统)的基础概念、应用场景,以及如何通过NFS实现多服务器间的数据共享。此外,还探讨了sersync在实时同步中的应用,包括实时同步的必要性、工具选择和实践案例。
摘要由CSDN通过智能技术生成
29-nfs-sersync详解

NFS基本概述
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件和目录。
NFS系统和Windows网络共享、网络驱动器类似,只不过Windows用于局域网,NFS用于企业集群架构中,如果是大型网站,会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS···
  • 为什么要使用共享存储?
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
NFS应用场景
集群没有共享存储:
1.A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。
2.B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户的图片。

在这里插入图片描述

集群有共享存储:
1.A用户上传图片无论被负载均衡调度至WEB1还是WEB2,最终数据都被写入共享存储
2.B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了

在这里插入图片描述

NFS实现原理

实现原理

1.用户进程访问NFS客户端,使用不同的函数对数据进行处理
2.NFS客户端通过TCP/IP的方式传递给NFS服务端
3.NFS服务端接收到请求后,会先调用protmap进程进行端口映射
4.nfsd进程用户判断NFS客户端是否拥有权限连接NFS服务端
5.Rpc.mount进程判断客户端是否有对应的权限进行验证
6.idmap进程实现用户映射和压缩
7.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件

注意:rpc是一个远程过程调用,那么使用nfs必须有rpc服务。
NFS服务使用
服务器:10.0.0.31 172.16.1.31	NFS
客户端:10.0.0.7 172.16.1.7		WEB01	
客户端:10.0.0.41 172.16.1.41 	BACKUP

1.服务安装
yum install -y nfs-utils
2.配置文件(默认为空)
[root@nfs ~]# cat /etc/exports
/data/ 172.16.1.0/24(rw,sync,all_squash)

注释:
/data			#共享的目录
172.16.1.0/24	#允许哪些IP地址挂载NFS服务器
rw				#挂载NFS服务器之后的权限 r read 读 w write 写
ro				#只读权限
sync			#将数据同时写入到磁盘中
all_squash		#将所有的来源用户全压缩为虚拟用户身份往本地的磁盘中写入
	web01(客户端)服务器上挂载:mount -t nfs 172.16.1.31:/data  /mnt
	使用的是root用户登录到web01服务器执行的挂载命令,当执行 touch /mnt/1.txt时候使用的就是root身份。权限太高了,太危险了,所以要使用all_squash参数将用户进行压缩为虚拟用户。
	
3.按照配置创建数据
mkdir -p /data
chown nfsnobody.nfsnobody /data/

4.启动NFS服务,并加入开机自启动
systemctl start nfs
systemctl enable nfs
5.检查服务
先查看这个文件,默认服务没启动时是空的,当这个文件里边有内容之后证明nfs服务已经起来了。
[root@nfs ~]# cat /var/lib/nfs/etab 
/data	172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
# anonuid=65534,anongid=65534 :默认使用UID 和oid为65534的身份去运行服务
检查是否有65534的用户存在
[root@nfs ~]# grep 65534 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin	#会以nfsnobody的身份去往/data目录下写入数据。


客户端挂载:
web01:
1.需要安装nfs-utils。不需要启动nfs服务
	yum install -y nfs-utils
查看服务端共享的目录
[root@web01 ~]#showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

2.挂载:
[root@web01 ~]#mount -t nfs 172.16.1.31:/data /mnt
[root@web01 ~]#df -h
Filesystem         Size  Used Avail Use% Mounted on
devtmpfs           980M     0  980M   0% /dev
tmpfs              991M     0  991M   0% /dev/shm
tmpfs              991M  9.5M  981M   1% /run
tmpfs              991M     0  991M   0% /sys/fs/cgroup
/dev/sda3           18G  2.0G   16G  12% /
/dev/sda1          197M  110M   88M  56% /boot
tmpfs              199M     0  199M   0% /run/user/0
172.16.1.31:/data   18G  2.0G   16G  12% /mnt

3.客户端写入开机自动挂载
[root@web01 mnt]#cat /etc/fstab 
172.16.1.31:/data/	    /mnt			  nfs     defaults        0 0
4.重启客户端服务器
reboot

backup:
1.需要安装nfs-utils。不需要启动nfs服务
	yum install -y nfs-utils
查看服务端共享的目录
[root@web01 ~]#showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

2.挂载:
[root@web01 ~]#mount -t nfs 172.16.1.31:/data /mnt
[root@web01 ~]#df -h
Filesystem         Size  Used Avail Use% Mounted on
devtmpfs           980M     0  980M   0% /dev
tmpfs              991M     0  991M   0% /dev/shm
tmpfs              991M  9.5M  981M   1% /run
tmpfs              991M     0  991M   0% /sys/fs/cgroup
/dev/sda3           18G  2.0G   16G  12% /
/dev/sda1          197M  110M   88M  56% /boot
tmpfs              199M     0  199M   0% /run/user/0
172.16.1.31:/data   18G  2.0G   16G  12% /mnt

3.客户端写入开机自动挂载
[root@web01 mnt]#cat /etc/fstab 
172.16.1.31:/data/	    /mnt			  nfs     defaults        0 0
4.重启客户端服务器
reboot

卸载:
umount /mnt

NFS共享参数

执行 man exports

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指定匿名用户
1.创建一个匿名用户
[root@nfs ~]# groupadd -g666 www
[root@nfs ~]# useradd -u666 -g666 -s /sbin/nologin -M www
[root@nfs ~]# tail -1 /etc/passwd
www:x:666:666::/home/www:/sbin/nologin

2.修改配置文件/etc/exports指定匿名用户
[root@nfs ~]# cat /etc/exports
/data/ 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

3.重启nfs服务生效
[root@nfs ~]# systemctl restart nfs
4.修改/data的属主和属组
[root@nfs ~]# chown -R www.www /data/

5.客户端测试
[root@backup mnt]# touch d.txt
[root@backup mnt]# ll
total 0
-rw-r--r-- 1 666 666 0 Apr 10 20:55 c.txt
-rw-r--r-- 1 666 666 0 Apr 10 21:21 d.txt
#由于客户端没有UID和GID为666的www用户 所以在客户端显示服务端的文件属主和属组是666

sersync实时同步
实时同步概述
什么是事实同步?
实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器
为什么要实时同步?
保证数据的连续性,减少人力维护成本,解决NFS单点故障。
实时同步工具选择
sersync+RSYNC、inotify+rsync
	inotify是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便的实现文件异动告警,增量备份,并针对目录或者文件的变化及时作出响应。rsync+inotify可以实现触发式实时同步增量备份。
	sersync是国人基于rsync+inotify-tools开发的工具,保留了优点的同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。
实时同步实践
角色外网(NAT)内网IP安装工具
web01eth0:10.0.0.7eth1:172.16.1.7
nfs-servereth0:10.0.0.31eth1:172.16.1.31rsync客户端+inotify-tools+sersync
backupeth0:10.0.0.41eth1:172.16.1.41rsync服务
NFS服务器:
[root@backup ~]# yum install -y inotify-tools
[root@nfs ~]# mkdir -p /server/tools
[root@nfs tools]# cd /server/tools/
[root@nfs tools]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs tools]# tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz 
[root@nfs tools]# mv GNU-Linux-x86/ sersync
[root@nfs tools]# cd sersync/
[root@nfs sersync]# ll
total 1772
-rwxr-xr-x 1 root root    2214 Oct 26  2011 confxml.xml
-rwxr-xr-x 1 root root 1810128 Oct 26  2011 sersync2

[root@nfs sersync]# vim confxml.xml

1

[root@nfs sersync]# clear
[root@nfs sersync]# echo 123456 >/etc/rsync.pas
[root@nfs sersync]# chmod 600 /etc/rsync.pas
#启动sersync服务
[root@nfs sersync]# ./sersync2 -dro confxml.xml
或者
[root@nfs sersync]#/server/tools/sersync/sersync2 -dro /server/tools/sersync/confxml.xml

运行sersync

BACKUP:
[root@backup ~]# ll -d /data/
drwxr-xr-x 2 root root 6 Apr 10 22:10 /data/
[root@backup ~]# chown rsync.rsync /data/
[root@backup ~]# cat /etc/rsyncd.conf 
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
[data]
path = /data
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

atomLg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值