任务背景
由于业务驱动,为了提⾼⽤户的访问效率,现需要将原有web服务器上的静态资源文件分离出来,单独保存到⼀台文件服务器上。
任务要求
1、⼀台应⽤服务器web-server部署apache,静态⽹⻚资源存放在另外⼀台
NFS服务器上。
2、对于NFS服务器上保存的静态资源实⾏实时备份(inotify + rsync)
任务拆解
web-server(192.168.2.11)服务器的配置
# web-server服务器的作用是发布nginx服务的web项目,(挂载)共享存储的
静态资源。
1、环境准备:
[root@web-server ~]# systemctl stop firewalld
[root@web-server ~]# setenforce 0
[root@web-server ~]# vim /etc/selinux/config
2、配置一个本地的nginx仓库
[root@web-server ~]#yum -y install --downloadonly --downloaddir=./soft/ nginx
# 只下载不安装,其中--downloadonly 选项表示只进行下载操作,不进行安装。
--downloaddir=./soft 则指定了下载的软件包保存的目录为当前目录下的 soft
文件夹。
[root@web-server ~]#tree ./soft/
3、创建本地仓库,安装createrepo,使用createrepo生成仓库文件
# createrepo 是一个用于创建 YUM 软件仓库的命令行工具。它的主要作用是根
据指定目录中的 RPM 软件包生成元数据,包括软件包的依赖关系、版本信息等,
以便yum客户端能够正确地解析和安装所需的软件。
[root@web-server ~]#yum -y install createrepo
4、soft目录中生成一个repodata目录
# 举例:现有一个目录 /opt/packages ,其中包含了一些 RPM 软件包,此时我
们可以在该目录下运行 createrepo /opt/packages命令来创建软件仓库。在
/opt/packages 目录下生成一些元数据文件,如 repodata 目录,其中包含了
repomd.xml 等重要的配置和描述文件。
[root@web-server ~]#createrepo ./soft/ # 把soft⽂件夹做成⼀个本地的自建仓
库
5、检测soft目录中是不是保存是了一个repo
[root@web-server ~]#cd ./soft/
[root@web-server ~]#tree ./soft/
6、在/etc/yum.repos.d/新建一个repo文件,文件名为nginx
[root@webserver ~]#vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx
baseurl=file:///root/soft
gpgcheck=0
enable=1
7、建立缓存
[root@webserver ~]#yum clean all
[root@webserver ~]#yum makecache
8、安装nginx,找到nginx的资源文件,查看是否安装
[root@webserver ~]#yum list installed|grep nginx
[root@webserver ~]#rpm -ql nginx
9、目前不用修改nginx,只需发布一个简单的项目
[root@webserver ~]#/usr/share/nginx/html/
[root@webserver ~]#tree /usr/share/nginx/html/
10、启动服务
[root@webserver ~]#which nginx
/usr/sbin/nginx
[root@webserver ~]#ls -l /usr/sbin/nginx
11、启动服务之前先关闭防火墙,检查服务是否启动
[root@webserver ~]#systemctl status firewalld
[root@webserver ~]#nginx
ps -aux|grep nginx # 查看进程号
ss -lntpu|grep nginx
12、远程访问,向web页面中添加图片和视频,上传图片和视频到
[root@webserver ~]#/usr/bin/nginx/html/
13、修改/usr/bin/nginx/html/index.html,在本地物理机上使用scp上传
scp -p22 aaa.png root@192.168.2.201:/usr/share/nginx/html/
14、检查文件是否已经存在
[root@webserver ~]#ls /usr/share/nginx/html/
15、编辑html文件,
[root@webserver ~]#vim /usr/share/nginx/html/index.html
<img src="a.png" /><!--插入图片--> # 153行
<!--插入视频--> # 154
<video>
<source src="ppt.mp4" />
</video>
最后访问web浏览器,进行测试
nfs-server(192.168.2.10)的具体配置
概述:NFS(Network File System)网络文件系统。主要⽤于linux系统上实现
文件共享的⼀种协议,其客户端主要是Linux;没有⽤户认证机制,且数据在⽹
络上传送的时候是明文传送,⼀般只能在局域⽹中使⽤;⽀持多节点同时挂载及
并发写⼊。
企业应⽤:为集群中的web server提供前端端存储
该服务包括的组件:
RPC(Remote Procedure Call Protocol):远程过程调⽤协议,它是⼀种通过⽹络
从远程计算机程序上请求服务,不需要了解底层⽹络技术的协议。
安装步骤:
1、安装rpcbind nfs-tools
# 负责NFS的数据传输,远程过程调⽤tcp/udp协议端⼝;nfs-utils:控制共享哪些
⽂件,权限管理。
[root@nfs-server ~]#yum -y install nfs-utils.x86_64 rpcbind.x86_64
# NFS服务相关软件包
nfs-utils-1.2.3-26.el6.x86_64 nfs服务的⼀个脚本控制⼯具(服务端与客户端)
nfs4-acl-tools-0.3.3-6.el6.x86_64 acl 工具包
nfs-utils-lib-1.1.5-4.el6.x86_64 nfs 库文件
[root@nfs-server ~]# rpm -q rpcbind
rpcbind-0.2.0-11.el6.x86_64
[root@nfs-server ~]# rpm -aq|grep ^nfs
nfs-utils-1.2.3-39.el6.x86_64
nfs-utils-lib-1.1.5-6.el6.x86_64
nfs4-acl-tools-0.3.3-6.el6.x86_64
2、准备目录,/share编辑配置文件
[root@nfs-server ~]#mkdir /share # 创建共享⽬录及⽹站的静态资源文件
[root@nfs-server ~]#touch /share/passwd
[root@nfs-server ~]#tree /share/
3、将之前下载的图片、视频文件传过去
[root@nfs-server ~]#scp root@192.168.2.11:/usr/share/nginx/html/a.png /share/
[root@nfs-server ~]#scp root@192.168.2.11:/usr/share/nginx/html/ppt.mp4
/share/
4、配置文件:(# man 5 exports,帮助文档)
[root@nfs-server ~]#vim /etc/exports
共享目录 共享选项(同步|异步)
/share *(rw,sync|async)
# 共享主机:
* :代表所有主机
192.168.0.0/24:代表共享给某个⽹段
192.168.0.0/24(rw) 192.168.1.0/24(ro) :代表共享给不同⽹段
192.168.0.254:共享给某个IP
*.itcast.com:代表共享给某个域下的所有主机
# 共享选项:
ro:只读
rw:读写
sync:实时同步,直接写⼊磁盘
async:异步,先缓存在内存再同步磁盘
anonuid:设置访问nfs服务的⽤户的uid,uid需要在/etc/passwd中存在
anongid:设置访问nfs服务的⽤户的gid
root_squash :默认选项 root⽤户创建的⽂件的属主和属组都变成nfsnobody,
其他⼈nfs-server端是它自己,client端是nobody。
no_root_squash:root⽤户创建的⽂件属主和属组还是root,其他⼈server端是
它⾃⼰uid,client端是nobody。
all_squash: 不管是root还是其他普通⽤户创建的⽂件的属主和属组都
是nfsnobody。
说明:
anonuid和anongid参数和all_squash⼀起使⽤。
all_squash表示不管是root还是其他普通⽤户从客户端所创建的⽂件在服务器端
的拥有者和所属组都是nfsnobody;服务端为了对⽂件做相应管理,可以设置
anonuid和anongid进⽽指定⽂件的拥有者和所属组。
[root@nfserver ~]# ss -antlp|grep rpcbind
LISTEN 0 128 *:111 *:* users:(("rpcbin",pid=3612,fd=8))
[root@nfs-server ~]# service rpcbind start # 启动服务检查端口是否监听
Starting rpcbind: [
OK ]
[root@nfserver ~]# systemctl start rpcbind
[root@nfs-server ~]# service nfs start
[root@nfserver ~]# systemctl start nfs
5、回到webserver主机,创建目录/usr/share/nginx/html/static/(此目录用来挂载
nfs-server服务器的数据)
[root@webserver ~]#mkdir /usr/share/nginx/html/static/
[root@webserver ~]#mount -t nfs 192.168.2.201:/share(对方目录)
/usr/share/nginx/html/static(自己目录) # 挂载nfs-server的文件
[root@webserver ~]#ls /usr/share/nginx/html/static/ # 查看挂载目录,nfs拿到
了一个文件的链接,不是真实的文件。
a.png passwd ppt.mp4/
6、文件的测试(测试结果:只能下载不能上传)
(1)测试可读:
# 向/share目录中添加数据
[root@nfserver ~]#echo “今天天气适合睡觉” > /share/a.txt
# 回到web服务器,修改index.html文件,从static目录中引用图片和视频
[root@webserver ~]#vim /usr/share/nginx/html/index.html
<img src="static/a.png" /><!--插入图片--> # 153行
<!--插入视频--> # 154
<video>
<source src="static/ppt.mp4" /> # 此时读取到的挂载目录中文件(nfs服务
器的文件)
</video>
然后进行查看web-server服务器时候已经更新
[root@webserver ~]#ls /usr/share/nginx/html/static/
浏览器进行访问192.168.2.11:/static/a.txt:
今天天气适合睡觉
(2)在static目录中添加文件,查看nfs-server服务器中的文件是否被更新
[root@webserver ~]#touch /usr/share/nginx/html/static/b.txt # 权限不足,无法
创建
客户端访问常见的问题:
[root@client ~]# showmount -e 192.168.2.11
clnt_create: RPC: Port mapper failure - Unable to receive:
errno 113 (No route to host)
原因:
1. nfs-server端rpcbind服务没开
2. ⽹络问题
3. 防⽕墙问题
bakserver服务器的配置
备份静态文件(指令:scp cp rsync): 备份是复制一份文件,共享是获取文件链接
# 当nfs(192.168.2.10)的share目录中的文件发生改变(新增、修改、删除、属性
发生改变)时备份到bakserver中。
步骤分解:
(1)创建备份主机bakserver(192.168.2.12)
(2)停用selinux和firewalld
[root@bakserver ~]#systemctl stop firewalld
[root@bakserver ~]#setenforce 0
(3)要想支持rsync备份同步,依次bakuphost和nfs-server主机都安装rsync
[root@nfs-server ~]#yum -y install bakuphost
(4)在nfs主机上安装inotify-tools监听/share目录
[root@nfs-server ~]#yum -y install inotify-tools
(5)先同步一份到bakup主机的tmp目录下
[root@nfs-server ~]#rsync -av /share/ root@192.168.2.12:/tmp/
(6)需要输入密码才会同步,为了自动化,设置免密
[root@nfs-server ~]#ls ~/.ssh/
known_hosts
[root@nfs-server ~]#ssh-keygen # 生成
[root@nfs-server ~]#ls ./.ssh
Id_rsa id_rsa.pub known_hosts
[root@nfs-server ~]# cd ~/.ssh/
# 将公钥添加到对方家目录的authorizer_key文件中,也可使用scp将id_rsa.pub
文件上传到bakserver主机,手工将文件中的字符串复制到authorizer_key文件中.
[root@nfs-server .ssh]#ssh-copy-id -i id_rsa.pub root@192.168.2.12
[root@nfs-server ~]#ssh root@192.168.2.12
[root@bakserver ~]# # 免密登录成功
确定全部都免密,实时rsync是否能免密备份
[root@nfs-server ~]#rsync -av /share/ root@192.168.2.12:/tmp/
(7)backserver主机上创建/backup
# 解决不需要交互有两种方案,其⼀可以配置免密登录;其二可以在backup机
搭建rsync服务。
[root@bakserver ~]#mkdir /backup
(8)nfs-server主机上创建一个脚本rn.sh,添加x权限,执行脚本
[root@nfs-server ~]#vim rn.sh
#!/bin/bash
inotifywait /share -mrq -e modify,create,delete,attrib,move|while read events
do
rsync -av --delete/share/ root@192.168.2.12:/bakup/
echo "`date +%F\ %T`出现事件$events" >> /var/log/rsync.log 2>&1
# 输出日志
done
[root@nfs-server ~]#chmod +x rn.sh # 脚本增加执行权限
[root@nfs-server ~]#nohup ./rn.sh& # 放入后台运行
[root@nfs-server ~]#cat nohup.out # 启动
[root@nfs-server ~]#touch /share/abc.txt
[root@nfs-server ~]#jobs -l # 查看后台任务
[root@nfs-server ~]#touch /share/abc.abc
[root@bakserver ~]#ls /bakup
abc abc.abc a.png ppt.mp4
backup备份机查看数据同步情况:
[root@bakserver ~]# ll
drwxr-xr-x 2 root root 4096 Dec 30 07:31 abc
-rw-r--r-- 1 root root 25 Dec 30 02:48 abc.abc
samba文件共享
一、概述:
1、SMB(Server Message Block)协议实现文件共享,也称为CIFS(Common
Internet File System);
2、它是Windows和类Unix系统之间共享文件的⼀种协议;
3、客户端主要是Windows;支持多节点同时挂载以及并发写⼊;
4、主要⽤于windows和Linux下的⽂件共享、打印共享;
5、实现匿名与本地⽤户文件共享
6、samba服务的主要进程:
smbd进程:控制发布共享⽬录与权限;负责⽂件传输——TCP 139、445
nmbd进程:⽤于名称解析netbios——UDP 137 138;基于NETBIOS协议
获得计算机名称——>解析为相应IP地址,实现信息通讯。
7、NetBIOS是Network Basic Input/Output System的简称,⼀般指⽤于局域⽹通
信的⼀套API。
## 需求:搭建⼀个SAMBA服务,共享⼀个⽬录/samba/share,客户端使⽤user01/123通过windows或者Linux可以在该⽬录⾥创建⽂件删除⽂件。
二、基于window的samba文件共享:
1、配置过程:
环境准备:
关闭防火墙和selinux;配置yum源;软件三步曲。
(1)在backuphost主机上安装samba
[root@bakserver ~]#yum -y insatll samba
[root@bakserver ~]#rpm -qa|grep samba
samba-3.6.9-164.el6.x86_64 # 服务端软件包
samba-common-3.6.9-164.el6.x86_64
samba-winbind-3.6.9-164.el6.x86_64
samba-client-3.6.9-164.el6.x86_64
samba-winbind-clients-3.6.9-164.el6.x86_64
samba4-libs-4.0.0-58.el6.rc4.x86_64
(2)修改配置文件
[root@bakserver ~]#vim /etc/samba/smb.conf
# 了解配置⽂件:
[global] # 全局选项
workgroup = MYGROUP # 定义samba服务器所在的⼯作组
server string = Samba Server Version %v # smb服务的描述
log file = /var/log/samba/log.%m # ⽇志⽂件
max log size = 50 # ⽇志的最⼤⼤⼩(KB)
security = user # 认证模式:share匿名|user⽤户密码|server外部服务器⽤
户密码
passdb backend = tdbsam # 密码格式
load printers = yes # 加载打印机
cups options = raw # 打印机选项
[homes] # 局部选项(共享名称)
comment = Home Directories # 描述
browseable = no # 隐藏共享名称
writable = yes # 可读可写
[printers] # 共享名称
comment = All Printers # 描述
path = /var/spool/samba #本地的共享目录
browseable = no 隐藏
guest ok = no ——> public = no 需要帐号和密码访问
writable = no ——> read only =yes 不可写
printable = yes 打印选项
[share]
path = /dir1
guest ok = no
writable = yes
# 修改部分——行尾追加:
[smb_share]
comment = samba service
path = /samba/share
guest ok = no
writable = yes
(3)设置用户user01,samba认证123密码
[root@bakserver ~]#useradd user01
[root@bakserver ~]#smbpasswd -a user01 #window要访问bakup中的文件,使
用user01,密码为123
(4)启动名称管理
[root@bakserver ~]#systemctl start nmb.server
[root@bakserver ~]#systemctl start smb.server
(5)为共享文件添加写权限,执行完后在window
[root@bakserver ~]#setfacl -m u:user01:rwx /bakup
三、基于Linux实现文件共享
环境准备:
关闭防火墙和selinux;配置yum源;软件三步曲。
[root@web-server ~]#yum -y install samba-client # 安装客户端
[root@web-server ~]#smbclient -L 192.168.2.12 -U user01
[root@web-server ~]#smbclient //192.168.2.12/smb_share -U user01 #window
中写的路径
smb:\>mkdir aaa
smb:\>echo “aaaa” > aaa.txt
smb:\>quit
[root@web-server ~]#yum -y install cifs-utils
[root@web-server ~]#mkdir yy
[root@web-server ~]#mount.cifs -o user=user01,pass=123 //192.168.2.12/smb_share
~/yy/ # 挂载
[root@web-server ~]#ls -l yy/
遇到的问题:windows下如果⽆法访问,请查看是否开启了smb客户端程序。
访问控制方面的问题:
没有mount.cifs命令,请安装cifs-utils-4.8.1-19.el6.x86_64
# 控制读写权限
writable = yes/no
readonly = yes/no
# 如果资源可写,但只允许某些⽤户可写,其他都是只读
write list = admin, root, @staff(⽤户组)
read list = mary, @students
# 控制访问对象
valid users = tom,mary,@itcast
invalid users = tom
注意:以上两个选项只能存在其中⼀个
# 网络访问控制
hosts deny = 192.168.0. 拒绝某个⽹段
hosts allow = 192.168.0.254 允许某个IP
hosts deny = all 拒绝所有
hosts allow = 192.168.0. EXCEPT 192.168.0.254 允许某个⽹段,但拒绝某个单个IP
注意:deny和allow同时存在,allow优先
# 总结
1、 ftp 局域⽹和外⽹都可以
2、 nfs 局域⽹ 挂载⽅式访问 mount.nfs
3.、samba 局域⽹ 直接访问(smbclinet) 挂载的⽅式mount.cifs