LAMP实验(基于DNS的负载均衡)

LAMP实验(基于DNS的负载均衡)



在Linux下的DNS实现Bind中,可以对A记录设置多个解析,从而实现简单的负载均衡,此种方法配置简单,但由于DNS缓存问题,会导致被访问的服务器故障时,切换时间变长。


实验环境

1. 实验拓扑图

Alt text
2. 实验介绍
本实验演示搭建LAMP,DNS设置多条A记录实现DNS轮询,对客户端的请求分配不同的IP地址,实现简单负载均衡,为了保证两台httpd的相应的资源相同,我们使用NFS文件共享,将资源存放于NFS服务器上。

然后在此基础上搭建个人博客wordpress

准备工作

  • 如上图所示准备6台虚拟机,安装CentOS6操作系统
  • Client上安装pssh,通过pssh管理其他虚拟机,快速部署实验环境
  • 关闭防火墙,SElinux

实验步骤


步骤一:安装并配置HTTPD、PHP

安装HTTPD和PHP
172.18.17.12172.18.17.13 服务器上安装以下软件

  • httpd
  • php
  • php-mysql
[10@root ~]# pssh -H '172.18.17.12' -H '172.18.17.13' yum -y install httpd php php-mysql
[1] 03:59:44 [SUCCESS] 172.18.17.13
[2] 03:59:44 [SUCCESS] 172.18.17.12


启动HTTPD服务,并测试
启动 172.18.17.12172.18.17.13 上的httpd服务

[10@root ~]# pssh -H '172.18.17.12' -H '172.18.17.13' service httpd start
[1] 04:02:45 [SUCCESS] 172.18.17.13
[2] 04:02:45 [SUCCESS] 172.18.17.12

测试是否能够访问PHP动态资源

  1. 172.18.17.12172.18.17.13 和服务器 /var/www/html 下面新建测试的php脚本
# 172.18.17.12
[12@root ~]# cat /var/www/html/index.php
<?php
echo "HTTPD-PHP-Server";
echo '<br>';
echo "Server-IP:172.18.17.12";
echo '<br>';
?>
# 172.18.17.13
[13@root ~]# cat /var/www/html/index.php
<?php
echo "HTTPD-PHP-Server";
echo '<br>';
echo "Server-IP:172.18.17.13";
echo '<br>';
?>
  1. 使用客户端浏览器测试

Alt text

Alt text




步骤二:安装并配置MySQL

安装mysql数据库
172.18.17.15上安装mysql-server

yum -y install mysql-server

启动mysql服务

service mysqld start

执行初始化安全脚本,提高MySQL的安全性

[15@root ~]# mysql_secure_installation
...
Enter current password for root (enter for none): <=输入当前mysql密码,没有就直接回车
...
Set root password? [Y/n] y <=设置root用户密码
New password:
Re-enter new password: <=再次输入密码
...
Remove anonymous users? [Y/n] y <=是否删除匿名用户
...
Disallow root login remotely? [Y/n] n <=是否禁止root远程登录mysql
...
Remove test database and access to it? [Y/n] y <=是否删除mysql中的测试数据库
...
Reload privilege tables now? [Y/n] y <=是否立即使上面的配置生效
...

登录mysql,创建远程登录的用户 zhubiao,并创建数据库 blog,为后面的实验做准备

[15@root ~]# mysql -uroot -p
Enter password:
...
mysql> create database blog;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on blog.* to 'zhubiao'@'172.18.17.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

172.18.17.12172.18.17.13 两台主机上分别添加测试代码

# 172.18.17.12
[12@root ~]# cat /var/www/html/mysql_connect_test.php
<?php
$conn = mysql_connect("172.18.17.15","zhubiao","123");
if($conn){
echo "mysql connection successfull";
}else{
die('mysql connection failed: '.mysql_error());
}
?>
# 172.18.17.13
[13@root html]# cat /var/www/html/mysql_connect_test.php
<?php
$conn = mysql_connect("172.18.17.15","zhubiao","123");
if($conn){
echo "mysql connection successfull";
}else{
die('mysql connection failed: '.mysql_error());
}
?>

客户端浏览器上测试数据库是否能连接成功

Alt text

Alt text




步骤三:安装nfs,实现资源共享

安装NFS
172.18.17.15
安装nfs-utils

yum -y install nfs-utils

我们在NFS服务上配置共享存储区域,挂载到两台httpd服务器上,从而实现两台服务器共用同一资源。httpd服务器上默认使用apache账户启动处理用户请求的进程,为了使两台httpd服务器对NFS上的资源可读、可写。此处我们在NFS服务器上创建一个系统用户apache,将httpd服务器上访问共享资源的用户全部映射为apache用户,如此就只需给apache用户读写权限即可。

创建apache账户

useradd -r -u 666 -s /sbin/nologin apache

创建共享目录

mkdir /app/web

修改NFS配置文件实现共享

[14@root ~]# cat /etc/exports
/app/web 172.18.17.0/24(rw,all_squash,anonuid=666)

启动nfs服务
nfs服务依赖于rpcbind服务记录端口,启动nfs服务之前先启动rpcbind服务

[14@root ~]# service rpcbind start
Starting rpcbind: [ OK ]
[14@root ~]# service nfs start
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]

查看一下共享路径

[14@root ~]# exportfs -v
/app/web 172.18.17.0/24(rw,wdelay,root_squash,all_squash,no_subtree_check,anonuid=666,sec=sys,rw,root_squash,all_squash)

apache用户/app/web目录的读、写、执行权限

setfacl -m u:apache:rwx /app/web


172.18.17.12172.18.17.13上将NFS共享文件目录 /app/web 挂载到 /var/www/html目录下

挂载nfs文件系统需使用到mount.nfs命令,该命令属于nfs-utils包中的一个命令,所以我们首先得安装nfs-utils

# 安装nfs-utils
[10@root ~]# pssh -H '172.18.17.12' -H '172.18.17.13' yum -y install nfs-utils
[1] 05:42:51 [SUCCESS] 172.18.17.13
[2] 05:42:51 [SUCCESS] 172.18.17.12
# 挂载
[10@root ~]# pssh -H '172.18.17.12' -H '172.18.17.13' mount.nfs 172.18.17.14:/app/web /var/www/html/
[1] 05:43:56 [SUCCESS] 172.18.17.12
[2] 05:43:56 [SUCCESS] 172.18.17.13



步骤四:搭建wordpress

通过上面的操作,现在两台httpd服务器通过nfs文件共享实现保证响应数据的相同,下面我们将wordpress安装包安装到NFS服务器上。这里所谓的安装就是把wordpress解压到NFS服务上的/app/web目录下即可。

# 解压
[14@root web]# pwd
/app/web
[14@root web]# unzip wordpress-4.8.1-zh_CN.zip
# 给apache读、写、执行权限
[14@root web]# ls
wordpress wordpress-4.8.1-zh_CN.zip
[14@root web]# setfacl -m u:apache:rwx /app/web/wordpress

通过客户端浏览器完成后续的搭建

Alt text




步骤五:安装DNS实现轮询

安装DNS
172.18.17.11上安装bind

yum -y install bind

配置DNS

  1. 修改配置文件/etc/name.conf 使DNS服务监听所有端口,响应所有主机的查询请求
# 将 /etc/name.conf文件中的下面两行注释掉
//listen-on port 53 { 127.0.0.1; };
//allow-query { localhost; };
  1. 定义DNS区域
[11@root ~]# tail -n 5 /etc/named.rfc1912.zones
//www.zhubiaook.com
zone "zhubiaook.com" IN {
type master;
file "zhubiaook.com.zone";
};
  1. 定义解析库文件
[11@root named]# cat /var/named/zhubiaook.com.zone
$TTL 3H
IN SOA dns1 zhubiaook.gmail.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 172.18.17.11
www A 172.18.17.12
www A 172.18.17.13
# 修改属主,属组为named
[11@root named]# chown named:named zhubiaook.com.zone
  1. 启动named服务
[11@root named]# service named start
Starting named: [ OK ]



步骤六:测试

  1. 测试DNS轮询
    172.18.17.15 NFS服务器共享目录/app/web 下创建测试文件index.php
[14@root web]# cat /app/web/index.php
<?php
echo $_SERVER['SERVER_ADDR'];
echo "\n";
?>

在客户端172.18.17.10上将DNS地址指向DNS服务器172.18.17.11

[10@root ~]# cat /etc/resolv.conf
nameserver 172.18.17.11

在客户端172.18.17.10上测试

[10@root ~]# curl http://www.zhubiaook.com/index.php
172.18.17.13
[10@root ~]# curl http://www.zhubiaook.com/index.php
172.18.17.12
[10@root ~]# curl http://www.zhubiaook.com/index.php
172.18.17.13
[10@root ~]# curl http://www.zhubiaook.com/index.php
172.18.17.12
...
  1. 浏览器上测试

Alt text


END