What is NFS?
The Network File System (NFS) is a mechanism for storing files on a network. It is a distributed file system that allows users to access files and directories located on remote computers and treat those files and directories as if they were local.
NFS is a client-server protocol. An NFS server is a host that meets the following requirements:
An NFS client is a host that meets the following requirements:
The process of setting up NFS service includes the following three steps, whether on an enterprise file server or on a local workstation:
Setting up an NFS client machine to access an NFS server can be done manually, using the mount command or using an NFS configuration file -- /etc/exports. Each line in the NFS config file contains a mount point, an IP address or a host domain name and any configuration metadata needed to access the file system.
network file system (网络文件系统)
可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。NFS可以将远程的计算机磁盘挂载到本地,读写文件像访问本地磁盘一样操作
1、安装
yum install nfs-utils
2、修改配置文件
首先创建/opt/www目录, 在这下面创建index.html文件 文件内容"this is test nfs"
再添加exports配置,nfs的配置:vim /etc/exports
添加如下行:
/opt/www 192.168.98.0/24(rw,no_root_squash)
表示共享/opt/www目录,192.168.98.0/24这个网段的主机都可以通过nfs来访问我本地的/opt/www目录
括号()里面的表示选项,rw表示读写。
/etc/exports
文件控制哪些文件系统被导出到远程主机,并指定选项。它遵循以下语法规则:
#
)开始一行。\
)换行长行。导出的文件系统的每个条目都有以下结构:
export host(options)
您还可以指定多个主机以及每个主机的特定选项。要做到这一点,在同一行中列出主机列表(以空格分隔),每个主机名带有其相关的选项(在括号中),如下所示:
export host1(options1) host2(options2) host3(options3)
在这个结构中:
export 导出的目录
host 导出要共享的主机或网络
options 用于主机的选项
生效配置:
exportfs -a
或者重启服务
3、启动nfs服务:
[root@b www]# service nfs start
4、在另外一台机器上测试:
[root@C ~]# showmount -e 192.168.98.133
Export list for 192.168.98.133:
/opt/ww 192.168.98.0/24
出现返回结果,表示ok。
5、挂载网络文件
[root@kafka-3 ~]# mkdir /mnt2
[root@kafka-3 ~]# mount -t nfs 192.168.98.133:/opt/ww /mnt2
[root@kafka-3 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17811456 7460784 10350672 42% /
devtmpfs 919504 0 919504 0% /dev
tmpfs 931624 0 931624 0% /dev/shm
tmpfs 931624 18032 913592 2% /run
tmpfs 931624 0 931624 0% /sys/fs/cgroup
/dev/sda1 1038336 148548 889788 15% /boot
tmpfs 186328 0 186328 0% /run/user/0
192.168.98.133:/opt/ww 17811456 7462656 10348800 42% /mnt2
===================================================
软链接 vs 硬链接
软链接相当于快捷方式,原文件为实际的文件,没了,软链接也找不到文件
硬链接是在原文件的基础上,使i_nlink+1,没有占用实际的空间
硬链接+1
每个文件创建号之后都会维护两个计数器,i-count(记录有多少个程序在使用这个文件)
i-nlink(记录这个文件的硬链接数)
硬链接不能跨文件系统(跨分区),也不能对目录(文件夹)进行硬链接
软链接就是创建了一个新的文件,文件本身就是源文件的文件名,可以跨文件系统(分区)
为什么目录不能进行硬链接,因为目录在创建时,被系统分给了一个固定的硬链接.在目录内
还有一个硬链接..指向上一层目录,而目录的硬链接如果在另一文件,则..文件会相互冲突,形成循环
软链接只认文件名,硬链接则只认inode号
软链接和硬链接的区别?
从文件系统的角度,文件有:1.目录项 2.inode 3.block
链接数:inode被目录项链接的次数
软链接有自己的目录项,自己的inode和block,block里存放的是原文件的文件名
硬链接有自己的目录项,但指向的是源文件的inode和block。
ln命令新建软和硬链接---》表面现象
软链接:删除原文件,链接文件不可使用
硬链接:删除原文件,链接文件可以继续使用
不能给文件夹建立硬链接,文件可以
为什么?
文件=目录项+inode+block
看创建文件的时候,是否有新的目录项,新的inode使用,新的block使用
底层原理:
硬链接:不同的目录项,相同的inode和block
软链接:不同的目录项,不同的inode和block,但是软链接的block里存放的是链接的文件名
============================
为什么linux文件系统的使用空间和剩余空间之和不是总的空间大小
答案是linux有一种策略,它会默认为root用户保留5%的容量作为应急使用,比如某些关键性的应用如数据库突然占满空间,这部分预留的空间能保证数据库不会立即crash.
===========================
用户态和内核态是操作系统的两种运行状态
内核态:处于内核态的CPU可以访问任意的数据,包括外围设备,比如网卡,硬盘等,处于内核态CPU可以从一个程序切换到另一个程序,并且占用CPU不会发生抢占情况,一般处于特权级0的状态我们称之为内核态。
用户态:处于用户态的CPU只能受限的访问内存,并且不允许访问外围设备,用户态的CPU不允许独占,也就是说CPU能够被其他程序获取。
内存里被划分成了两块空间,用户空间(user space)和内核空间(kernel space)
操作系统的进程在内核空间里运行,它们称作内核态(进程的一种状态)
用户运行应用程序的进程在用户空间里,它们称为用户态
正常来说,用户空间要比内核空间大的,
用户态的进程如何切换为内核态?
在系统调用,中断和异常时,会切换
共同点:运行的内核里的代码
为什么要有用户态和内核态呢?
主要是访问能力限制的考量,计算机中有一些比较危险的操作,比如设置时钟,内存清理,这些都需要在内核态下完成,如果随意进行危险操作,极容易导致系统崩坏。
============================
用户进行文件读写操作时,操作系统做了什么?
1、用户输入命令,shell解释器会解析这条命令
2、shell会去PATH变量里面,也就是磁盘里面查找里面的命令,
3、shell告诉内核命令的位置,让内核去创建进程运行这条命令
4、内核运行:
1.查看内存是否有足够的空间
2.创建PCB(进程控制块),加载代码,整个进程进入就绪队列
5、进行cpu上下文切换,一个进程进cpu,一个进程出cpu。
6、进程进行读写操作时,比如cat命令,找到文件对应的文件描述符,
7、根据文件名查找目录项,找到inode号,找到block,找到对应的数据块
8、将数据读入内存,返回结果给shell解释器
9、解释器展示最终结果
nginx,热升级,不重启,如何版本升级?
nginx热启动:
nginx.conf -->修改了配置文件后,重载生效,nginx -s reload
master会起新的worker去接受新的链接,旧的worker服务完当前的客户后自动关闭
nginx热升级:
修改旧的nginx二进制程序的名字,拷贝新的nginx二进制程序进旧的目录下
检查新版nginx是否能运行
进行一次nginx -s reload 重载一次配置
数据一致性问题:
使用nfs,让backend服务器都到nfs服务器里获取数据,这样就可以达到数据一致性,随便访问那台后端服务器看到的内容都是一样的
1.搭建nfs服务器
yum install nfs-utils -y
service nfs restart
vim /etc/exports
[root@nfs ~]# mkdir /data
[root@nfs ~]# cat /etc/exports
/data 192.168.2.0/24(rw,no_root_squash,no_all_squash,sync)
[root@nfs ~]#
[root@nfs ~]# exportfs -r
nfs的工作原理
nfs没有自己去监听某个端口,而是外包给rpcbind相关的服务的
rpc是什么?
说说用户是如何去访问nfs服务的,重点是过程?
[root@web1 yum.repos.d]# yum install nfs-utils -y
root@web1 yum.repos.d]# mount -t nfs 192.168.2.155:/data /usr/local/sclilin99/html/
2.backend服务器挂载到nfs共享的目录获取数据
nfs来解决数据一致性问题,是否是最佳的?
1.速度
IOPS--》磁盘是否快的指标
2.稳定性--》是否容易丢失数据
3.高可用--》冗余,备份
4.成本
NFS是在传统的tcp/ip的协议的网络里使用的
FC
ISISC
一体机:200万台 --》有钱的公司
一台廉价的服务器+nfs-utils软件 + 100Mb/s--》文件共享NFS
cpu、内存、磁盘、网络带宽
SAN/NAS
IOPS(Input/Output Operations Per Second)是一个用于计算机存储设备(如硬盘(HDD)、固态硬盘(SSD)或存储区域网络(SAN))性能测试的量测方式,可以视为是每秒的读写次数。和其他性能测试一样,存储设备制造商提出的IOPS不保证就是实际应用下的性能。
存储区域网络 (Storage Area Network, SAN) 是企业最常用的存储网络架构,要求高吞吐量和低延迟的业务关键型业务往往采用这类架构运行。
HBA卡: 光纤接口卡
NAS(Network Attached Storage)网络存储基于标准网络协议实现数据传输,为网络中的Windows / Linux / Mac OS 等各种不同操作系统的计算机提供文件共享和数据备份。
比较便宜使用tcp/ip网络协议,在日常的生活和工作里使用,例如:可以将所有手机,电脑里的图片集中存储。
小型带系统的存储设备
99.9999%
高可用 High Availability --->HA: 不会出现单点故障,有备份,高度可用 --》稳定性
灾备的代价: 有备份,多花钱--》花钱消灾