架构简介: 这里其实就是使用的LAMP+NFS组合,将结构化数据存储在mysql数据库服务器中(例如论坛用户数据,文字内容等等),非结构化数据(例如附件数据,多媒体文件)存储在NFS服务器上的文件系统中;其具体架构为:2台web服务器,1台NFS服务器,1台mysql服务器,1台DNS服务器;如下图所示

web服务器1:172.16.20.241,CentOS6 web服务器2:172.16.20.242,CentOS6 DNS服务器:172.16.20.244,CentOS6 mysql服务器:172.16.20.243,CentOS7 NFS服务器:172.16.20.245,CentOS7

具体配置: 1、NFS服务器配置,172.16.20.245:

[root@localhost ~]# yum install  nfs-utils -y
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# mkdir /web          // 创建一个目录用于存放wordpress并导出
[root@localhost ~]# unzip wordpress-4.7.4-zh_CN.zip
[root@localhost ~]# cp -r wordpress 
[root@localhost ~]# vim /etc/exports
/web/wordpress    172.16.20.241(rw,no_root_squash) 172.16.20.242(rw,no_root_squash)    // 导出wordpress目录,并设置root用户允许访问,因为必须要以root用户的身份运行,才能安装wordpress
[root@localhost ~]# chown -R :apache /web/wordpress      // 由于wordpress用于httpd服务,因此apache用户需要有此目录的读写权限
[root@localhost ~]# chmod -R g+rw /web/wordpress
[root@localhost ~]# systemctl restart nfs        // 重启服务使exports导出的目录生效
[root@localhost ~]# showmount -e 172.16.20.245    //  使用此命令可以查看目标主机已导出的目录
Export list for 172.16.20.245:
/web/wordpress 172.16.20.242,172.16.20.241
[root@localhost ~]# 

2、mysql服务器配置,172.16.20.243:

[root@localhost ~]# yum install mysql-server -y  //这里使用rpm包简易安装,更专业的做法是使用二进制格式安装,将mysql数据存放到一个单独的磁盘中,便于管理和容灾
[root@localhost ~]# mysql
mysql> create database web;     //创建wordpress用的数据库
Query OK, 1 row affected (0.00 sec)

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> grant all privileges on web.* to 'user1'@'%' identified by 'redhat';     //给web数据库授权一个专用用户user1并设置密码,这里可能会有人想,直接用root用户就行了;但是这样是不安全的,而且rpm包安装的mysql默认是禁止root用户远程登录,并且直接以root用户登陆数据库也非常的不安全
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;    //手动刷新权限表,使新作出的更改立即生效
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user,password from user;
+-----------------------+-------+-------------------------------------------+
| host                  | user  | password                                  |
+-----------------------+-------+-------------------------------------------+
| localhost              | root  |                                           |
| localhost.localdomain | root  |                                           |
| 127.0.0.1             | root  |                                           |
| localhost             |       |                                           |
| localhost.localdomain |       |                                           |
| %                     | user1 | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
+-----------------------+-------+-------------------------------------------+
6 rows in set (0.00 sec)
// 这里可以看出我们新建的user1用户已经生效了
mysql> 

3、DNS服务器配置,172.16.20.244:

[root@localhost ~]# yum install bind -y
[root@localhost ~]# vim /etc/named.ca
修改以下选项
listen-on port 53 { 172.16.20.244; 127.0.0.1; };
allow-query { any; };
dnssec-enable no;
dessec-validation no;
[root@localhost ~]# vim /etc/named.rfc1912.zones
添加如下行
zone "gumpti.com" IN {
              type master;
							file "gumpti.com.zone";
};
//  添加一个主区域
[root@localhost ~]# vim /var/named/gumpti.com.zone
$TTL 1D
$ORIGIN gumpti.com.
@             IN              SOA             ns1.gumpti.com.     admin.gumpti.com   (
																										  2017120201
																											1M
																											5M
																											7D
																											1D )
								 IN              NS               ns1.gumpti.com.
								 IN              NS               www.gumpti.com.
ns1           IN              A                  172.16.20.244
www         IN              A                  172.16.20.241
www         IN              A                  172.16.20.242
[root@localhost ~]# service named start
[root@localhost ~]# dig -t A www.gumpti.com @172.16.20.244         //查看A记录是否生效

; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.3 <<>> -t A www.gumpti.com @172.16.20.244
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 215
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.gumpti.com.			IN	A

;; ANSWER SECTION:
www.gumpti.com.		86400	IN	A	172.16.20.241
www.gumpti.com.		86400	IN	A	172.16.20.242

;; AUTHORITY SECTION:
gumpti.com.		86400	IN	NS	www.gumpti.com.
gumpti.com.		86400	IN	NS	ns1.gumpti.com.

;; ADDITIONAL SECTION:
ns1.gumpti.com.		86400	IN	A	172.16.20.244

;; Query time: 24 msec
;; SERVER: 172.16.20.244#53(172.16.20.244)
;; WHEN: Wed Dec 06 15:11:42 CST 2017
;; MSG SIZE  rcvd: 123

// 再执行一次dig命令查看两条A记录的轮询效果是否生效
[root@localhost ~]# dig -t A www.gumpti.com @172.16.20.244 

; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.3 <<>> -t A www.gumpti.com @172.16.20.244
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27457
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.gumpti.com.			IN	A

;; ANSWER SECTION:
www.gumpti.com.		86400	IN	A	172.16.20.242
www.gumpti.com.		86400	IN	A	172.16.20.241

;; AUTHORITY SECTION:
gumpti.com.		86400	IN	NS	ns1.gumpti.com.
gumpti.com.		86400	IN	NS	www.gumpti.com.

;; ADDITIONAL SECTION:
ns1.gumpti.com.		86400	IN	A	172.16.20.244

;; Query time: 0 msec
;; SERVER: 172.16.20.244#53(172.16.20.244)
;; WHEN: Wed Dec 06 15:13:24 CST 2017
;; MSG SIZE  rcvd: 123

[root@localhost ~]# 

4、配置WEB服务器1,172.16.20.241:

[root@localhost ~]# showmount -e 172.16.20.245
Export list for 172.16.20.245:
/web/wordpress 172.16.20.242,172.16.20.241
[root@localhost /]# mkdir /www/wordpress -pv
[root@localhost ~]# mount -t nfs 172.16.20.245:/web/wordpress /www/wordpress/  
//  挂载NFS服务器172.16.20.245导出的/web/wordpress到本地的/www/wordpress目录
[root@localhost ~]# yum install httpd php php-mysql -y
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
修改如下行
DocumentRoot "/www/wordpress/"
<Directory "/www/wordpress/">
[root@localhost ~]# cp /www/wordpress/wp-config-sample.php /www/wordpress/wp-config.php
[root@localhost ~]# vim /www/wordpress/wp-config.php
// 修改wordpress的配置文件
define('DB_NAME', 'web');     // 指定wordpress使用的数据库为web数据库
define('DB_USER', 'user1');   // 指定wordpress使用的连接数据库的用户为user1
define('DB_PASSWORD', 'redhat');   // 指定wordpress使用的用户user1的密码
define('DB_HOST', '172.16.20.243');   // 指定wordpress使用的数据库的服务器IP
[root@localhost ~]# service httpd start

5、配置WEB服务器2,172.16.20.242:

[root@localhost ~]# showmount -e 172.16.20.245
Export list for 172.16.20.245:
/web/wordpress 172.16.20.242,172.16.20.241
[root@localhost /]# mkdir /www/wordpress -pv
[root@localhost ~]# mount -t nfs 172.16.20.245:/web/wordpress /www/wordpress/  
//  挂载NFS服务器172.16.20.245导出的/web/wordpress到本地的/www/wordpress目录
[root@localhost ~]# yum install httpd php php-mysql -y
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
修改如下行
DocumentRoot "/www/wordpress/"
<Directory "/www/wordpress/">
[root@localhost ~]# service httpd start
// 已经在WEB1上修改过wordpress的配置文件,这里WEB1和WEB2都是挂载的NFS服务器上的wordpress目录,使用的同一份wordpress文件

6、查看配置效果 将客户端主机的DNS服务器设置为172.16.20.244 然后在浏览器中输入地址www.gumpti.com 成功显示wordpress界面,会提示需要安装,安装并注册一个管理员账号,然后进入管理界面(实验中我注册的管理员账号为181) 点击“用户”按钮,添加一个用户(实验中我添加的是157) 然后发布几篇文章 保存后登陆另一台服务器172.16.20.242就可以查看到wordpress页面中有181用户发布的文章

也可以使用新添加的用户157登陆,也可以看到文章的发布

以上在WEB1上安装了wordpress并发布了文章,通过WEB2可以成功访问并看到相同的内容,并且可以使用不同的账号在WEB2中登陆,说明实验已经成功。

总结: LAMP+NFS的架构比较简单,但在实际生产环境中使用的并不多,更实用的是分布式文件系统而不是NFS,NFS性能有限,只是在小公司在过渡期中使用。 此次实验做的比较匆忙: 1、关于NFS导出的wordpress权限问题并没有做太多的研究 2、在WEB2中登陆后,网页地址依旧会跳转到WEB1,这里是还没有考究出原因,需要继续学习 3、DNS也只配置了正向解析域,没有配置反向解析域 后续再来继续填坑。 写的比较潦草,如有遗漏错误和争议之处,欢迎大家的批评指正和讨论,谢谢。