NFS示例应用
所谓的NFS可不是Need For Speed这款游戏,这里的NFS全称是Network file system,直接翻译的话就是网络文件系统,这是一项从古老的Unix上流传下来的文件共享用的一种技术。现在基本上被广泛集成到Linux系统的各个发行版中(集成于内核)。今天呢,我们用这个东西实现一个功能,大概如下:现有两台HTTP服务器,一台数据库服务器,一台DNS服务器,以及一台NFS服务器和一台客户机。当客户机访问HTTP服务的时候通过DNS解析到任一台HTTP服务器,HTTP接收到请求之后通过NFS的共享服务读取网站数据,并执行对应的PHP程序,PHP程序连接数据库。大致如此。
大体流程
- 准备6台虚拟机,划分对应的功能。
- 规划IP,并确保主机可以互通
- 确保防火墙以及SELinux处于关闭状态
- 安装对应的软件包
- 根据不同的服务器功能配置对应的服务
- 启动测试
具体实现
六台主机分别划分如下:
客户端:192.168.11.104
HTTP服务器:192.168.11.111,192.168.11.102
DNS服务器:192.168.11.106
MySQL服务器:192.168.11.105
NFS服务器:192.168.11.110
在对应的主机上安装对应的软件包
两台HTTP服务器安装httpd,php-fpm,php-mysql,nfs-utils
DNS服务器安装bind
MySQL服务器安装MySQL
NFS服务器安装nfs-utils
客户端不需要安装应用
配置DNS服务器
其实之前有博文说过DNS服务的配置,这里就在啰嗦一遍。首先,给你想要实现的网站随便一个域名,这里使用www.xyz.com。注意这个域名无所谓的。只要DNS里正确配置即可。需要配置的内容如下:
3.1 修改DNS主机上的/etc/named.conf文件,将以下两行内容注释掉。(行首添加//)
listen-on port 53 { 127.0.0.1; }; allow-query { localhost; };
并且将以下两项设置的值改为no,如下:
dnssec-enable no; dnssec-validation no;
3.2 在/etc/named.rfc1912.zones中添加如下内容:
zone "xyz.com" IN { type master; file "xyz.zone"; allow-transfer {192.168.11.105;}; };
请务必注意,语句中的 ; 分号,否则很容易出错。
3.3 复制一个模版文件
cp -a /var/named/named.localhost /var/named/xyz.zone
确保所属组为named,然后修改其中的内容如下:
$TTL 1D @ IN SOA main.xyz.com. hs.xyz.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS main main A 192.168.11.106 hsrv A 192.168.11.111 hsrv A 192.168.11.102 www CNAME hsrv
请注意第二行里main.xyz.com.里最后一个 . 这很容易被遗漏。
重启服务并进行测试没问题的话结果应该如下:
[root@cent744 ~]# dig xyz.com @192.168.11.106 ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> xyz.com @192.168.11.106 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65177 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;xyz.com. IN A ;; AUTHORITY SECTION: xyz.com. 10800 IN SOA main.xyz.com. hs.xyz.com. 0 86400 3600 604800 10800 ;; Query time: 0 msec ;; SERVER: 192.168.11.106#53(192.168.11.106) ;; WHEN: Mon Jun 25 20:17:26 CST 2018 ;; MSG SIZE rcvd: 80
配置NFS服务器
NFS服务主要用作文件共享,其可以将制定的目录共享出去,在目标主机通过挂载的方式访问。其突出优势是在目标主机访问文件和本地访问文件方式相同。且可以通过权限配置进行写操作。其工作原理很复杂,但具体表现出来就像是使用一个普通的文件系统,可以读写。数据也是存储在远程服务器。其具体实现也很很简单,配置内容如下:
4.1 在/etc/exports主配置文件中添加以下内容。
/data/www 192.168.11.0/24(rw)
使用setfacl命令给nfsnobody用户赋予/data/www的rwx权限。nfsnobody用户是目标主机以root身份连接过来之后使用的用户身份。然后将准备的站点放到/data/www目录下,这里使用WordPress进行演示。
setfacl -m u:nfsnobody:rwx /data/www tar xvf wordpress-4.7.4-zh_CN.tar.gz cp wordpress/* /data/www
考虑到来回切换太麻烦,这里直接更改一些WordPress的配置,将wp-config-sample.php重命名为wp-config.php并修改其中的以下内容。
/** WordPress数据库的名称 */ define('DB_NAME', 'wpblog'); /** MySQL数据库用户名 */ define('DB_USER', 'forwp'); /** MySQL数据库密码 */ define('DB_PASSWORD', 'weizdll'); /** MySQL主机 */ define('DB_HOST', '192.168.11.105');
这部分主要是关于WordPress连接数据库使用到的一些信息,包括数据库的名字,连接数据库的账号密码,还有数据库的主机。这些就够了。主要是确保在MySQL服务器上的信息要和这里的对应。确保可以连通。
配置MySQL服务器
需要配置的不多,创建上一步中的数据库及用户即可。执行以下几条SQL命令
MariaDB [(none)]>create database wpblog; MariaDB [(none)]>grant all on wpblog.* 'forwp'@'192.168.11.%' identified by 'weizdll';
注意是在MySQL中执行。并非shell命令。在其他主机上执行MySQL的远程连接进行测试。
配置HTTP服务器
终于到HTTP服务器了,虽然内容不是太多,但也是几台中配置最多的了,大概以下几步吧。
首先,在HTTP服务器上创建一个目录用来挂载网站的目录,然后将NFS服务器上共享出来的目录挂载到本地。使用showmount可以查看指定主机上的共享信息。(注意两台HTTP服务器的配置是相同的。)
mkdir -p /data/www/blog showmount 192.168.11.110 mount 192.168.11.110:/data/www /data/www/blog
不出什么意外的话你已经可以在本地的/data/www/blog目录中访问到刚才在NFS服务器解压的WordPress程序了。如果不能看到呢。
胜败乃兵家常事,大侠请从头检查
接下来应该是配置PHP了,emmm,启动php-fpm服务就行了。
修改两个HTTP服务器的配置文件。将网站的主目录指定为/data/www/blog,同时找到DirectoryIndex这一行,在后面添加上index.php。然后在添加以下两行重启HTTP服务即可。
ProxyRequests off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/www/blog
访问测试
这个就很简单了,修改下客户端的DNS,在/etc/resolv.conf中修改即可。然后启动浏览器访问www.xyz.com就行了,不出意外呢,就是安装WordPress的界面了。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!