实现NFS服务
实际应用场景架构图:
解读:web1服务器提供wordpress应用进行挂载的根目录,将NFS服务器存放的wordpress资源映射到根目录下,如果web1负载过大要提升性能增加web2那么可以采用同样的方法进行映射到web2提供给wordpress的根目录.
好处:实现了负载均衡与性能上的提升。
NFS配置文件:
/etc/exports
/etc/exports.d/*.exports
开始正题👇:
坑点说明:
1)NFS服务器共享的文件默认root_squash(压榨root),即客户机对挂载到本地的NFS服务器共享文件如果以root身份进行操作时实际上是以NFS服务器上的普通账号进行工作(这就是压榨root),如果创建一个文件或上传文件那么这个文件的所有者在NFS服务器上则是普通账号而不是root。
解决方案:在NFS服务器配置文件中拒绝掉共享文件的默认 root_squash > no_root_squash功能。
2)当客户机对挂载到本地的NFS服务器共享文件如果以普通账号身份进行操作、创建、上传文件时,账号UID与NFS服务器上的某个账号UID相同,那么普通账号将会被映射NFS服务器上的某个账号,导致文件的所有者可能不是这个普通账号。
3)当NFS服务器的某个共享文件共享给两个或者多个客户机时,倘若客户机1以普通账号对共享文件进行操作、那么客户机2就会因所有者问题而无法对这个共享文件进行操作(原因:账号UID不同所导致)
解决方案:在NFS服务器配置文件中对这个共享文件开启all_squash(包括root),可以指定压榨成某个特定系统账号,类似于vsftpd中的guest(将所有登录vsftpd服务器的系统、匿名账号映射成某个guest账号),压榨后各个客户机操作NFS服务器共享文件时使用的都是同一个系统账号也就不存在UID不一致而导致无法访问对方修改过的文件这一问题。(非常适合此章的应用场景)
总结:以上情况说明的一个现象就是客户机与NFS服务器所创建的系统账号不仅名字要一致并且UID GID也要相同。
1.安装软件包:nfs-utils(包括服务器和客户端,CentOS8 最小化安装时默认没有安装)
yum -y install nfs-utils
2.将NFS服务器启动并设为开机自启。
systemctl enable --now nfs-server
systemctl start nfs-server
<启动NFS服务后会开启很多的端口并且每次重启端口都会变化(因此不适合在公网使用容易受到攻击)>
3.在NFS服务器上创建wordpress资源的存放目录。
mkdir /data/wordpress
4.打开NFS的配置文件,共享某个文件并开启所有账号压榨功能(包括压榨root即便root已关闭压榨功能)、压榨成NFS服务器已经创建的账号UID=1000 GID=1000。
PS:如果多个客户机和服务器所创建账号UID GID一致并且只使用该账号对此共享文件进行操作那么即不用以下 4、5、6 配置(基于坑点 2、3和总结)。
<配置说明>
1)rw:此文件设置为读写权限
2)no_root_squash:不压榨root账号(如果开启全压榨功能则无效)
3)*:此共享文件共享给所有人
4)10.0.0.0/24 :此共享文件共享给某个特定网段的host
5)10.0.0.20 :此共享文件共享给某个特定的用户
6)anonuid和anongid :指明匿名用户映射为NFS服务器特定用户UID和组GID(账号名称为apache),而非nobody(如果压榨账号默认映射为nobody所以需要指明),可配合all_squash使用
/data/wordpress *(rw,no_root_squash,all_squash,anonuid=1000,anongid=1000)
/data/wordpress 10.0.0.0/24(rw,no_root_squash,all_squash,anonuid=1000,anongid=1000)
/data/wordpress 10.0.0.20(rw,no_root_squash,all_squash,anonuid=1000,anongid=1000)
<实际应用,将存放wordpress资源的文件进行共享对象(所有人)并设置rw权限取消root压榨>
5.通过NFS服务提供的命令读取NFS配置文件(免重启),查看NFS服务器的文件共享情况。
exportfs=共享文件系统
exportfs -r #重新读取NFS配置文件
exportfs -v #查看已经共享的文件和详细配置
<可以看到上述配置都已应用>
6.将共享文件的所有者和所属组修改成NFS配置文件中设定的apache账号,否则此共享文件的所有者是root或是其他账号时,客户机账号被压榨后使用特定的账号操作文件时会因权限问题而被拒绝。
<web1通过命令查看NFS服务器文件是否已经共享>
showmount -e 10.0.0.10 #查看远程NFS服务器共享文件是否成功共享。
7.WEB1(rpm安装的Apache)挂载NFS共享文件 /data/wordpress 到 /var/www/html
mount 10.0.0.10:/data/wordpress /var/www/html
8.在被挂载的目录下创建一个文件后返回NFS服务器观察其所有者所属组是否为apache
<客户机现象>
<NFS服务器现象>
总结:可以看到创建的文件的确为UID GID同时是1000的apache账号。
补充:
客户机mount的NFS服务器共享文件只是临时挂载,要想永久mount还得写入配置文件中。
vim /etc/fstab
mount -a #写完配置后进行挂载
10.0.0.10:/data/wordpress /var/www/html nfs _netdev 0 0
配置解读:
nfs:表示网络文件系统
_netdev:标注这是一个网络资源,如果网络不通则不会挂载,避免因网络故障却一直挂载而无法挂载的情况发生。
——————————————————至此基本WA+NFS的小框架已实现————————————————————
👇👇👇👇👇 👇👇👇👇👇👇👇👇👇👇 接下来实现WAMP +NFS+DNS 👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
架构图:
PS:
1)值得注意的是wordpress文件虽然存放于NFS服务器上,但Mysql授权账号时并非是授权给NFS服务器而是WEB1与WEB2,因为NFS的共享文件挂载到WEB1和WEB2后是由WEB服务器上的fastcgi程序(进程)去访问Mysql而不是wordpress文件的本身去访问Mysql。
2)节约时间采用rpm安装Apache php-fpm MYSQL
进入正题👇:
1.在Mysql服务器上创建一个wordpress的database及授权一个用于php-fpm连接Mysql名为wordpress的账号(用于WEB服务器上跑的wordpress通过php-fpm进程连接数据库)。
create database wordpress;
create user wordpress@'10.0.0.20' identified by '123456';
grant all on wordpress.* to wordpress@'10.0.0.20';
create user wordpress@'10.0.0.30' identified by '123456';
grant all on wordpress.* to wordpress@'10.0.0.30';
2.到官网下载wordpress压缩包在NFS服务器中并解压,解压后将wordpress文件夹内的文件迁移至先前已经处于共享状态的 /data/wordpress 文件夹下,因为共享文件夹启动了压榨功能并且压榨后指定的账号为apache,因此移动到的共享文件夹下的文件要修改所有者和所属组(否则客户机访问时会因UID不一致问题而无权限访问)。
unzip wordpress-5.7.2-zh_CN.zip
mv /root/wordpress/* /data/wordpress/
chown -R apache:apache /data/wordpress/
3.在两台WEB服务器上以rpm方式安装php-fpm及相关包(WEB服务器上已通过rpm形式安装Apache)、并启动php-fpm服务。
yum -y install php-fpm php-mysqlnd php-xml php-json
systemctl enable --now php-fpm
systemctl start php-fpm
4.安装DNS并修改其配置文件。
yum -y install bind
1)打开主配置文件,将只监听本机的53端口和加密功能注释掉(关闭)
vim /etc/named.conf
2)打开域名解析区域配置文件,配置需要进行解析的域名。
vim /etc/named.rfc1912.zones
zone "cql.top" IN {
type master;
file "cql.top.zone";
};
1)配置需要进行解析的域名
2)因为这是第一个DNS服务器所以类型为master
3)这是数据库文件(需要进行配置),当此域名需要进行解析时则会查询数据库中是否有该域名的解析结果,从而反馈给客户端解析结果。
3)创建 cql.top 域名的数据库文件,
vim /var/named/cql.top.zone
$TTL 1D
@ IN SOA ns1 admin ( 10 1H 10M 1W 3H )
ns ns1
ns1 A 10.0.0.55
www A 10.0.0.20
www A 10.0.0.30
* A 10.0.0.20
* A 10.0.0.30
@ A 10.0.0.20
@ A 10.0.0.30
4)配置完后使用命令检查配置文件是否出错,并启动DNS服务。
named-checkconf
systemctl enable --now named
rndc reload #如果启动DNS后再修改数据库配置用rndc reload 加载配置文件(切勿使用systemctl restart named :不仅无法重启named还会关闭端口53是个BUG)
5.搭建完DNS服务器后进行测试,客户机上使用dig命令输入全域名,指定DNS服务器的IP进行解析看是否能够成功解析。
<解析成功(其他非全域名解析和泛域名都能成功就不贴图了)>
||
6.浏览器中输入该域名访问wordpress程序,连接数据库并创建管理员账号。
7.进入wordpress中发表文章。
1)如果能够成功上传图片等,则表示WEB服务器对挂载的共享文件(10.0.0.10:/data/wordpress)进行操作成功时被NFS服务器通过all_quash压榨成指定账号,并且共享文件夹的所有者和所属组也都是这个压榨后的指定账号(因为之前已经更改此文件夹所有者和所属组都为这个指定账号,如果压榨失败那么使用的账号的UID则NFS服务器上的共享文件夹所有者所属组UID不同则没有上传图片的权限)。
2)发布docker头像后返回NFS服务中存放wordpress资源的文件夹,查看是否已经保存该图片
tree /data/wordpress/wp-content/
3)查看当前浏览器所访问的是WEB1还是WEB2,查到结果后stop掉观察另一台是否能够正常访问并且之前的上传的资源和配置是否保留。
<OK,当前浏览器访问的是WEB1(10.0.0.20)将其stop,通过域名再次进行访问wordpress程序>
systemctl stop httpd php-fpm
4)能够正常访问,同样再次发表文章后查看NFS服务器的共享目录是否能够存放上传的资源。
<发表文章>
<查看NFS服务器存放wordpres资源的文件夹发现上传你的资源确实存在>
==========================================================
遇到的问题:
1.虚拟机因为环境问题(之前的php74相关包残留,有些配置没有清楚),导致Apache挂载共享文件时浏览器报错出现503,查看日志出现以下报错。
[Mon Jul 12 03:27:24.082396 2021] [proxy:error] [pid 5778:tid 139963228210944] (2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /var/opt/remi/php74/run/php-fpm/www.sock (*) failed
[Mon Jul 12 03:27:24.082490 2021] [proxy_fcgi:error] [pid 5778:tid 139963228210944] [client 10.0.0.1:61694] AH01079: failed to make connection to backend: httpd-UDS
报错信息:显示httpd无法连接php74的unix套接字(这里显示的是php74但是我安装的是php-fpm,无法连接套接字那么挂载到httpd根目录下的wordpress程序也就无法云运行起来)。
解决方案:
1)因为另一台WEB服务器也安装了php-fpm(状况正常)对比双方的配置文件。
2)通过 yum -y remove php74* 关于php74的包都给删除。
3)通过 find /* -name php74* 命令配合通配符找到所有关于php74的文件进行删除。
4)重启php-fpm httpd 服务器就可以正常访问了。
2.DNS服务器搭建好后,linux中使用dig测试可以解析、windows宿主机中将VM8的DNS服务器地址改为搭建成功的DNS服务器(10.0.0.55)后cmd也能够ping成功但是当使用浏览器解析域名时则失败。
解决方案:将开启的VPN客户端关闭。
优化之处:
1)发表文章后发现时间不对劲,可以搭建NTP,让WEB服务器与其连接。
2)php配置文件中的资源限制可根据生产环境进一步设置(实验中没有设置可参考以往php-fpm文章)。
3)在生产中可以将wordpress中关于php的程序文件放置WEB服务器根目录中,这样就不用每次启动都通过网络的方式去运行这些程序(慢),而一些上传目录(例如wp_content)则放置NFS服务器的共享文件夹中用于WEB服务器mount。
操作思路:在WEB服务器的根目录下创建一个wp_content 的文件夹用来挂载NFS服务器共享文件夹 /data/wordpress/wp_content 下的wp_content目录,而NFS服务器共享文件夹下关于wordpress的php程序则移动到WEB服务器的根目录下(PS:永久挂载)。
posted on 2021-07-10 23:05 1251618589 阅读(15) 评论(0) 编辑 收藏 举报