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 ~]
/data/ 172.16.1.0/24(rw,sync,all_squash)
注释:
/data
172.16.1.0/24
rw
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 ~]
/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)
检查是否有65534的用户存在
[root@nfs ~]
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
客户端挂载:
web01:
1.需要安装nfs-utils。不需要启动nfs服务
yum install -y nfs-utils
查看服务端共享的目录
[root@web01 ~]
Export list for 172.16.1.31:
/data 172.16.1.0/24
2.挂载:
[root@web01 ~]
[root@web01 ~]
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]
172.16.1.31:/data/ /mnt nfs defaults 0 0
4.重启客户端服务器
reboot
backup:
1.需要安装nfs-utils。不需要启动nfs服务
yum install -y nfs-utils
查看服务端共享的目录
[root@web01 ~]
Export list for 172.16.1.31:
/data 172.16.1.0/24
2.挂载:
[root@web01 ~]
[root@web01 ~]
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]
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 ~]
[root@nfs ~]
[root@nfs ~]
www:x:666:666::/home/www:/sbin/nologin
2.修改配置文件/etc/exports指定匿名用户
[root@nfs ~]
/data/ 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
3.重启nfs服务生效
[root@nfs ~]
4.修改/data的属主和属组
[root@nfs ~]
5.客户端测试
[root@backup mnt]
[root@backup mnt]
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
sersync实时同步
实时同步概述
什么是事实同步?
实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器
为什么要实时同步?
保证数据的连续性,减少人力维护成本,解决NFS单点故障。
实时同步工具选择
sersync+RSYNC、inotify+rsync
inotify是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便的实现文件异动告警,增量备份,并针对目录或者文件的变化及时作出响应。rsync+inotify可以实现触发式实时同步增量备份。
sersync是国人基于rsync+inotify-tools开发的工具,保留了优点的同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。
实时同步实践
角色 | 外网(NAT) | 内网IP | 安装工具 |
---|
web01 | eth0:10.0.0.7 | eth1:172.16.1.7 | |
nfs-server | eth0:10.0.0.31 | eth1:172.16.1.31 | rsync客户端+inotify-tools+sersync |
backup | eth0:10.0.0.41 | eth1:172.16.1.41 | rsync服务 |
NFS服务器:
[root@backup ~]
[root@nfs ~]
[root@nfs tools]
[root@nfs tools]
[root@nfs tools]
[root@nfs tools]
[root@nfs tools]
[root@nfs sersync]
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]
[root@nfs sersync]
[root@nfs sersync]
[root@nfs sersync]
[root@nfs sersync]
或者
[root@nfs sersync]
BACKUP:
[root@backup ~]
drwxr-xr-x 2 root root 6 Apr 10 22:10 /data/
[root@backup ~]
[root@backup ~]
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