创建yum源、NFS共享存储
1. YUM源的提供方式
1.1 配置本地源仓库
cd /etc/yum.repos.d/vim local.repo[local] // 仓库类别name=local // 仓库名称baseurl=file:///mnt // 指定 URL 访问路径为光盘挂载目录enabled=1 // 开启此 yum 源,此为默认项,可省略gpgcheck=0 // 不验证软件包的签名mount /dev/sr0 /mnt // 把光盘挂载到 /mnt 目录下(前提虚拟机是光盘挂载)yum clean all && yum makecache //清理 yum 缓存并更新yum repolist //检查
1.2 配置ftp源
创建yum远程ftp站点的源,即使客户端没有yum源也可以远程使用服务端的yum源
服务器配置:
1 )安装 vsftpd 服务端软件
2 )创建并制作 yum 远程 ftp 站点的源
3 )启动 ftp 服务
rpm -qa|grep vsftpdyum -y install vsftpdmkdir /var/ftp/centos7 # 创建挂盘挂载目录mount /dev/sr0 /mnt # 镜像挂载cp -rf /mnt/* /var/ftp/centos7/ & //& 在后台运作mkdir /var/ftp/other # 在/var/ftp/other下 创建目录 repodata 数据文件cd /var/ftp/other/createrepo -g /mnt/repodata/repomd.xml ./ # 建立仓库数据文件systemctl start vsftpd
客户端配置:
1 )创建远程 yum 源的配置文件
2 ) yum 安装软件验证结果
客户端配置:
cd /etc/yum.repos.dmkdir bakmv *.repo bak //把yum源放到备份里,现在使用不了yumvim /etc/yum.repos.d/centos7.repo[centos7] # 仓库类别name=centos7 # 仓库名称 ( 说明 )baseurl=ftp://192.168.190.30/centos7 #URL 访问路径enabled=1 # 启用此软件仓库gpgcheck=1 # 验证软件包的签名gpgkey=ftp://192.168.190.30/centos/RPM-GPG-KEY-CentOS-7#GPG 公钥文件的位置,RPM-GPG-KEY-CentOS-7在服务端/var/ftp/centos7文件下[other]name=otherbaseurl=ftp://192.168.10.17/otherenabled=1 # 启用此软件仓库gpgcheck=0 # 验证软件包的签名yum clean all //清理缓存并更新yum makecacheyum repolist //检查
服务端:192.168.190.30
客户端:192.168.190.15
把yum源放入bak后,仍能使用yum install。说明客户端能远程使用服务端的yum源。
还可以网站访问客户端/var/ftp
ftp://192.168.190.30/centos7ftp://192.168.190.30/other
1.3 配置http服务源
跟配置ftp源过程一样
服务端:
我们需要安装 http 服务,所以我们需要先搭建一个本地源
# 首先创建一个文件用来挂载镜像
yum -y install httpdmkdir /var/www/html/centos7 # 创建镜像目录mount /dev/sr0 /mnt # 镜像挂载cp -rf /mnt/* /var/www/html_centos7/ & # 拷贝镜像文件mkdir /var/www/html/other # 在/var/www/html/other下 创建目录 repodata 数据文件createrepo /var/www/html/otherls /var/www/html/other/repodata #查看生成的repodata文件systemctl start httpd
生成 YUM 源索引:进入软件包所在目录,使用 createrepo 命令生成 YUM 源所需的索引文件:
这将在 /var/www/html/centos7 目录下生成一个名为 repodata 的子目录,里面包含有关软件包的索
引信息。
centos7.repo就是http的网络源
客户端:
cd /etc/yum.repos.dmkdir bakmv *.repo bak //把yum源放到备份里,现在使用不了yumvim /etc/yum.repos.d/centos7.repo[centos7]name=centos7 # 我们 yum 源命名baseurl=http://192.168.190.30/centos7 # 是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件enabled=1 # 启用 yum 源, 0 为不启用, 1 为启用gpgcheck=1 # 检查 GPG-KEY , 0 为不检查, 1 为检查gpgkey=http://192.168.190.30/centos7/RPM-GPG-KEY-CentOS-7[other]name=otherbaseurl=http://192.168.190.30/otherenabled=1gpgcheck=0yum clean all # 清除 yum 缓存yum makecache # 缓存本地 yum 源中的软件包信息yum repolist # 查看源软件包
服务端:192.168.190.30
客户端:192.168.190.15
在把yum源放进bak的情况下,仍能使用yum install 。说明客户端能远程使用服务端的yum源。
还可以访问网站 http://192.168.190.30/centos
http://192.168.190.30/other
正常情况呢,就是执行 yum repolist 以后有我们定义的 http 源名称,且有相应的数量,如果数量为 0 ,则哪个步骤出问题了,如下,我有本地源和http 源。
1.4 centOS7 清华源
vim CentOS7-Base-tsinghua.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch
/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$basea
rch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
1.5 阿里源
下载地址: wget http://mirrors.aliyun.com/repo/Centos-7.repo
vim CentOS7-Base-aliyun.repo # 编辑阿里云 yum 网络源
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
注:其他网络源
1 ) http://ftp.sjtu.edu.cn/centos # 上海交大,但服务器位于北京,中国教育网网络中心,我看像是朝
阳区那边的 IP ,以前在那边上过 班,下载速度高达十 M 。 北方用户与教育网用户推荐,速度飞快。
2 ) http://centos.ustc.edu.cn , # 中国科技大学,服务器位于合肥。 南方用户推荐。
3 ) http://mirrors.sohu.com/ , sohu 的开源镜像服务器,服务器位于山东省联通。 速度飞快,全国用
户推荐,经常用 FireFox 下载 CD 镜像
1.6 yum 命令
yum 常用的操作命令:
yum -y install 软件名 # 安装、升级软件包, “-y” 选项表示自动确认
yum -y remove 软件名 # 卸载软件包,可自动解决其依赖关系
yum -y update 软件名 # 升级软件包
yum list # 查询软件包列表
yum list installed # 查询系统中已安装的软件包
yum list available # 查询仓库中尚未安装的软件包
yum list updates # 查询可以升级版本的软件包
案列搜索 RPM 包(两种方法)
yum search vim
yum list|grep "vim"
yum info 软件名 # 查询软件包的描述信息
yum info httpd
yum search [all] 关键词 # 根据某个关键词来查找相关的软件包
yum search all httpd
yum whatprovides 命令 # 查询命令属于哪个软件包
yum whatprovides netstat
下载 RPM 包而不安装
# yum install 包名 -y --downloadonly
# yum reinstall -y bash --downloadonly # 下载已安装过的 rpm 包
# yum install 包名 -y --downloadonly --downloaddir=/tmp/ # 下载 RPM 包到指定目录
yum history 查看历史记录来找到它所依赖的包,然后删除,
如: yum history list 列出最近的历史
yum history info id 列出某次的详细信息,
yum history undo id 撤销某次更改
yum history help 查看帮助
yum history redo 加入序号重新执行序号里的操作
2、NFS共享存储
2.1 NFS功能、端口号
NFS 是 Network File System 的缩写及网络文件系统。 NFS 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS ( Network File System 网络文件服务), 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。 NFS 也是 NAS 存储设备必然支持的一种协议。
NAS存储:
NFS 服务的实现依赖于 RPC( 远程过程调用)机制,以完成远程到本地的映射过程。
在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务,前者用于 NFS共享发布和访问,后者用于 RPC 支持。手动加载 NFS 共享服务时,应该先启动 rpcbind,再启动 nfs 。
nfs端口号2049
RPC端口号111
特点:
采用 TCP/IP 传输网络文件
安全性低
简单易操作
适合局域网环境
常见的文件服务器有 NFS 、 GFS ( gluster fs )、 FastDFS NFS 系统和 Windows 网络共享、网络驱动器类似, 只不过windows 用于局域网, NFS 用于企业集群架构中, 如果是大型网站,会用到更复杂的分布式文件系统FastDFS 、 glusterfs 、 HDFS 、 ceph 。
2.2 为什么要使用共享存储
1. 实现多台服务器之间数据共享
2. 实现多台服务器之间数据一致
2.3 NFS应用场景
负载均衡:在计算机网络中,它负责将用户请求均匀地分配给多台服务器,这样就不会让任何一台服务器过于忙碌,从而保证了服务的快速响应和稳定性。
实际应用中,共享存储是重要的组成部分。如果没有共享存储,网站就变成了单点的架构
2.3.1 应用场景1——集群没有共享存储
1 、 A 用户上传图片经过负载均衡,负载均衡将上传请求调度至 WEB1 服务器上。
2 、 B 用户访问 A 用户上传的图片,此时 B 用户被负载均衡调度至 WEB2 上,因为 WEB2 上没有这张图片,所以B 用户无法看到 A 用户传的图片。
2.3.2 应用场景2——集群有共享存储
1 、 A 用户上传图片无论被负载均衡调度至 WEB1 还是 WEB2, 最终数据都被写入至共享存储。
2 、 B 用户访问 A 用户上传图片时,无论调度至 WEB1 还是 WEB2 ,最终都会上共享存储访问对应的文件,这样就可以访问到资源了。
2.4 NFS实现原理 *
1 、假如访问的是 NFS 客户端,先调用不同的函数(例如 Read() 函数,读功能、 Write() 函数,写功能、Create()函数,创建功能、 Remove() 函数、删除功能、 Rename() 函数,重命名功能)对数据进行处理。
2 、调用完函数后,首先 NFS客户端会建立TCP连接,通过TCP/IP的方式传递给NFS 服务端,连上远端的服务器。 RPC( 远程过程调用)机制,以完成远程到本地的映射过程。
3 、接着 NFS 服务端接收到请求后, NFS 服务器会做 3 步系列操作(环环相扣,先映射端口,然后验证是否能登录服务器,最后验证文件使用权限),如下: 首先,调用portmap 进程进行端口映射。
接着,调用 Rpc.nfsd 进程来验证 NFS 客户端是否拥有对应的权限连接 NFS 服务端。
最后,调用 Rpc.mount 进程来验证客户端是否拥有对应的文件使用权限;
4、完成以上三步之后相当于拿到令牌,去找NFS服务器,服务端放行访问本地文件系统,通过内核调用磁盘,然后把数据返回给客户端
客户端发起查看 file 信息的指令( ls file )给内核,内核通过 NFS 模块得知此文件并不是本地文件系统中的文件,而是在远程NFS 主机上的一个文件 客户端主机的内核通过 RPC 协议把查看 file 信息的指令(系统调用)封装成 rpc 请求通过 TCP 的 111 端口发送给NFS 服务端主机的 portmapper NFS服务端主机的 portmapper ( RPC 服务进程)告诉客户端说 NFS 服务端的 mountd 服务在某某端口
上,你去找它验证因为mountd 在提供服务时必须要向 portmapper 注册一个端口号,所以 portmapper 是知道其工作于哪个端口的客户端得知服务端的mountd 进程端口号后,通过已知的服务端 mountd 端口号请求验证mountd收到验证请求后验证发起请求的客户端是否在允许访问此 NFS 文件系统的客户端列表中,在则允许访问(发放一个令牌,持令牌去找nfsd ),否则拒绝访问验证通过后客户端持mountd 发放的令牌去找服务端的 nfsd 进程,请求查看某文件服务端的nfsd 进程发起本地系统调用,向内核请求查看客户端要查看的文件的信息服务端的内核执行nfsd 请求的系统调用,并将结果返回给 nfsd 服务nfsd进程收到内核返回的结果后将其封装成 rpc 请求报文并通过 tcp/ip 协议返回给客户端
为什么先启用rpcbind
把端口号和用户绑定,这样才能确定是哪个用户
先启动rpc服务,因为nfs要向rpc注册端口
2.5 NFS文件共享系统实验步骤
# 配置思路
1 、安装 nfs 和 rpcbind 软件
2 、修改配置文件设置共享
3 、创建共享目录
4 、开启服务
5 、客户端验证共享目录可访问
服务端192.168.190.30:
rpm -q rpcbind nfs-utilsyum install -y nfs-utils rpcbindmkdir -p /opt/web #递归创建目录,否则后面刷新时可能无法导出目录vim /etc/exports #NFS 的配置文件为 /etc/exports ,文件内容默认为空(无任何共享)/opt/web 192.168.190.0/24(rw,sync,no_root_squash)
常用选项:
rw 表示允许读写
ro 表示为只读 sync 表示同步写入到内存与硬盘中
no_root_squash 表示当客户机以 root 身份访问时赋予本地 root 权限(默认是
root_squash ),如果不加那么客户端无法在里面编辑或写入文件,因为默认以 nfsnobody 的权限
root_squash 表示客户机用 root 用户访问该共享目录时,将 root 用户映射成匿名用户
其它常用选项:
all_squash 所有访问用户都映射为匿名用户或用户组
async 将数据先保存在内存缓冲区中,必要时才写入磁盘,速度快但会丢失数据
subtree_check (默认) 若输出目录是一个子目录,则 nfs 服务器将检查其父目录的权限
no_subtree_check 即使输出目录是一个子目录, nfs 服务器也不检查其父目录的权限,这样可以提高效率
systemctl start rpcbind // 需要 先启动rpc服务,因为nfs要向rpc注册端口systemctl start nfssystemctl enable rpcbindsystemctl enable nfs[root@localhost web]# netstat -anpu | grep rpcudp 0 0 0.0.0.0:111 0.0.0.0:*24525/rpcbind[root@localhost web]# rpcinfo -p localhost // 查看 nfs 向 rpc 注册的端口信息program vers proto port service100000 4 tcp 111 portmapper100000 3 tcp 111 portmapper100000 2 tcp 111 portmapper100000 4 udp 111 portmapper100000 3 udp 111 portmapper100000 2 udp 111 portmapper100024 1 udp 55627 status……[root@localhost web]# exportfs -v // 验证结果/web192.168.190.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)exportfs -r // 刷新结果[root@localhost web]# showmount -e localhost //验证共享Export list for localhost:/web 192.168.190.0/24
切换到客户端192.168.190.15:
rpm -q rpcbind nfs-utilsyum install -y nfs-utils rpcbindshowmount -e 192.168.190.30 // 客户端验证共享Export list for 192.168.245.100:/web 192.168.245.0/24mount -t nfs 192.168.190.30:/opt/web /var/www/html //将共享目录挂载到网页目录ls /var/www/html //里面应该没有内容echo "this is kgc " > /var/www/html/index.html //客户端修改主页文件cat /var/www/html/index.html // 服务器端 /opt/web 里会同步信息yum -y install httpdsystemctl start httpd // 启动 web 服务curl 127.0.0.1 // 成功访问主页内容或curl 192.168.190.15 //客户端ipthis is kgc //此时可以在页面访问192.168.190.15
在服务端 /opt/web/index.html 查看同步信息:
同理可得,服务端写入或修改内容,客户端也会同步
修改 /etc/fstab 实现自动挂载:
df -h # 查看挂载情况vim /etc/fstab #永久挂载192.168.190.30:/opt/web /var/www/html nfs defaults,_netdev 0 0
defaults,_netdev 说明这是一个网络设备
注意: NFS 客户端与服务器端的耦合度是非常高的,如果客户端正在挂载使用,服务器端 NFS 服务突然间停掉了,那么在客户端就会出现执行 df -h 命令卡死的现象。这个时候使用 umount 命令是无法直接卸载的,需要加上 -lf 才能卸载
-l 表示解除正在繁忙的文件系统, -f 表示强制。
[root@server web]# systemctl stop nfs //在 服务器端模拟 nfs 挂掉[root@client ~]# umount /var/www/html // 客户端卸载时会卡住df -h[root@client ~]# umount -lf /var/www/html // 加 lf 参数成功卸载
服务端模拟挂掉nfs,但同步信息还在
客户端:
解挂载之后客户端网页无法登录
[root@server web]# systemctl start nfs //在 服务器端模拟 nfs 挂掉[root@client ~]# mount -t nfs 192.168.190.30:/opt/web /var/www/html //重新挂载df -h
服务端开启nfs:
客户端重新挂载:
重新挂在之后,客户端网页显示信息
其他 nfs 文件:
/var/lib/nfs/etab 记录 NFS 分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息