共计 3537 个字符,预计需要花费 9 分钟才能阅读完成。
网络文件系统(Network File System,NFS)是一种分布式文件系统协议,最初由 Sun Microsystems 公司开发,并于 1984[1] 年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。NFS 和其他许多协议一样,是基于 Open Network Computing Remote Procedure Call(ONC RPC) 协议之上的。NFS 在 RFCs 中是一个开放、标准的协议,任何人或组织都可以依据标准实现它。
其实 NFS 是通过 RPC(Remote Procedure Call) 叫做远程过程调用的方式来实现文件共享的,我们都知道如果一个进程想要用到某文件,需要同过系统调用向内核申请,而 RPC 就是将这一系统调用转换为通过网络向远端的另一主机发送文件的调用请求,这样就可以实现文件系统共享了。当然这也会产生很多问题,Client 和 NFS Server 之间的存储格式不兼容怎么办,用户怎样认证、用户权限如何限定等。
为了解决格式不兼容我们使用了半结构化数据,这种数据可以自己完整描述自己数据的意义,不需要对方去解析,如有:XML,JSON,RESTful 方式基于 http 传输。对于用户认证我们早先使用 NIS(Network Information System,2049/tcp,2049/udp),这种协议将用户认证调离到远端的服务器上,而不是在本地。但是这种认证方式并不是加密的,而且容易形成单点故障,所以现在不太常见了。我们现在用到的是 NFS 服务端的两个进程 idmapd 和 mountd。
idmapd:将远程用户映射为本地的 nfsnobody,而远程看到的还是自己的用户
mountd:在访问 nfs 之前进行用户验证,验证过之后给用户一个令牌,用户拿到令牌再进行数据访问,端口随机
我们这里对 NFS 已经有了一个比较简单的了解了,我们本文的题目是使用 LAMP 结合 NFS 构建简单的博客站点,那么我们在构建过程中在详细的给出 NFS 的搭建,我们先来看一下物理拓扑图:
这个拓扑是这么规划的:客户端通过 DNS 的轮训调度,能够让用户访问两台 web 服务器来实现负载均衡,而网页中的动态内容则通过 PHP Server 来处理,用户博客的账号信息存储在 MariaDB Server 上,而页面文件通过 NFS Server 共享的文件系统来存放。
OK,我们来一步步构建这个拓扑,大家看到图上一共有六个服务器,我这里使用的是虚拟机而且只有三台,所以我把这个拓扑给压缩一下:
DNS Server&&Web1:IPà192.168.23.132
PHP Server&&Web2:IPà192.168.23.130,192.168.80.129
NFS Server&&MariaDB Server:IPà192.168.80.130
网络我已经调试通了,每个 IP 都可以相互 ping 通。
1.DNS Server 已经建好,并且能够轮训调度两个 web 站点:
2
2. 配置 Web1/Web2 站点
编译安装 httpd-2.4 我在以前的博客中讲过了,就不再详细解释了,就看一下配置就好了。
我这里为了节省时间就没有再使用虚拟主机了。至于 PHP 服务器编译安装,然后一启动就好了,没有什么额外的配置,如果不太清楚可以去看我以前的博客
vim /etc/httpd24/httpd.conf
216 DocumentRoot “/web/blog”
217 ProxyRequests Off
218 ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.23.130:9000/web/blog/$1
219 <Directory “/web/blog”>
251 <IfModule dir_module>
252 DirectoryIndex index.php index.html
253 </IfModule>
381 AddType application/x-httpd-php .php
382 AddType application/x-httpd-php-source .phps
115 LoadModule proxy_module modules/mod_proxy.so
119 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
3. 配置 NFS
yum install nfs-utils
[root@db ~]# vim /etc/exports
/web/blog 192.168.23.132(rw,async,no_root_squash) 192.168.23.130(rw,async,no_root_squash) 192.168.80.129(rw,async,no_root_squash)
# 这里的 no_root_squash 可以不加,因为我在做实验时客户端的写权限一直有问题所以在做诸多尝试
# 还有一点需要提醒,我们可以建一个与 web server 上启动 httpd 进程的用户名和 ID 号相同的一个用户,然后给它设定 facl,或者上 httpd 进程的启动用户为 nobody
setfacl -R -m u:http:rwx /web/blog
tar xf /root/wordpress-4.2.2-zh_CN.tar.gz -C /web/
mv wordpress blog
cp wp-config-sample.php wp-config.php
vim wp-config.php
17 /** WordPress 数据库的名称 */
18 define(‘DB_NAME’, ‘blog’);
19
20 /** MySQL 数据库用户名 */
21 define(‘DB_USER’, ‘buser’);
22
23 /** MySQL 数据库密码 */
24 define(‘DB_PASSWORD’, ‘bpass’);
25
26 /** MySQL 主机 */
27 define(‘DB_HOST’, ‘192.168.80.130’);
4. 配置 MariaDB
cat ~/.mysql_history #查看 mysql 的历史命令
create database blog;
grant user buser@’192.168.%.%’ identified by ‘bpass’;
create user buser@’192.168.%.%’ identified by ‘bpass’;
grant all on blog.* to buser@’192.168.%.%’;
flush privileges;
# 这里因为我以前做过搭建 blog 的实验所以遗留了很多数据也产生了一堆的问题,所以我又删除了很多表,这里就体现出 phpMyadmin 的好用之处了
5. 在 Web1&Web2 挂载 NFS
mount -t nfs 192.168.80.130:/web/blog /web/blog/
vim /etc/fstab
192.168.80.130:/web/blog /web/blog nfs defaults,_netdev 0 0
# 开机自动挂载
6. 测试访问,并上传数据
我们稍微解释一下这个结果,因为我是使用物理机访问的,所以没有使用 DNS,但是我们在 DNS 的测试结果中看到了是可以实现负载均衡的。还有一点就是因为我的 PHP Server 和 Web2 在同一主机所以一旦登录就跳转到 Web2 的 IP 之上了,这里希望大家理解并不是 Web1 不可用。
OK,到此为止我们的小型博客网站就搭建好了,其实大部分的网站都是由小到大的,我们以后在此基础上不断的扩充就可以完成一系列高并发、高可靠的网站了。如有错误敬请指出。
LAMP 平台安装 Xcache 和 Memcached 加速网站运行 http://www.linuxidc.com/Linux/2015-06/118835.htm
CentOS 7 下搭建 LAMP 平台环境 http://www.linuxidc.com/Linux/2015-06/118818.htm
CentOS 6.5 系统安装配置 LAMP(Apache+PHP5+MySQL) 服务器环境 http://www.linuxidc.com/Linux/2014-12/111030.htm
Ubuntu 14.04 配置 LAMP+phpMyAdmin PHP(5.5.9) 开发环境 http://www.linuxidc.com/Linux/2014-10/107924.htm
Ubuntu 14.10 下安装 LAMP 服务图文详解 http://www.linuxidc.com/Linux/2014-12/110082.htm
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-08/121029.htm