NFS示例应用

​ 所谓的NFS可不是Need For Speed这款游戏,这里的NFS全称是Network file system,直接翻译的话就是网络文件系统,这是一项从古老的Unix上流传下来的文件共享用的一种技术。现在基本上被广泛集成到Linux系统的各个发行版中(集成于内核)。今天呢,我们用这个东西实现一个功能,大概如下:现有两台HTTP服务器,一台数据库服务器,一台DNS服务器,以及一台NFS服务器和一台客户机。当客户机访问HTTP服务的时候通过DNS解析到任一台HTTP服务器,HTTP接收到请求之后通过NFS的共享服务读取网站数据,并执行对应的PHP程序,PHP程序连接数据库。大致如此。

大体流程

  1. 准备6台虚拟机,划分对应的功能。
  2. 规划IP,并确保主机可以互通
  3. 确保防火墙以及SELinux处于关闭状态
  4. 安装对应的软件包
  5. 根据不同的服务器功能配置对应的服务
  6. 启动测试

具体实现

  1. 六台主机分别划分如下:

    客户端: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

  2. 在对应的主机上安装对应的软件包

    两台HTTP服务器安装httpd,php-fpm,php-mysql,nfs-utils

    DNS服务器安装bind

    MySQL服务器安装MySQL

    NFS服务器安装nfs-utils

    客户端不需要安装应用

  3. 配置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
  4. 配置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服务器上的信息要和这里的对应。确保可以连通。

  5. 配置MySQL服务器

    需要配置的不多,创建上一步中的数据库及用户即可。执行以下几条SQL命令

    MariaDB [(none)]>create database wpblog;
    MariaDB [(none)]>grant all on wpblog.* 'forwp'@'192.168.11.%' identified by 'weizdll';

    注意是在MySQL中执行。并非shell命令。在其他主机上执行MySQL的远程连接进行测试。

  6. 配置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 协议 ,转载请注明出处!