LAMP实验(基于DNS的负载均衡)
LAMP实验(基于DNS的负载均衡)
在Linux下的DNS实现Bind中,可以对A记录设置多个解析,从而实现简单的负载均衡,此种方法配置简单,但由于DNS缓存问题,会导致被访问的服务器故障时,切换时间变长。
实验环境
1. 实验拓扑图
2. 实验介绍
本实验演示搭建LAMP,DNS设置多条A记录实现DNS轮询,对客户端的请求分配不同的IP地址,实现简单负载均衡,为了保证两台httpd的相应的资源相同,我们使用NFS文件共享,将资源存放于NFS服务器上。
然后在此基础上搭建个人博客wordpress
准备工作
- 如上图所示准备6台虚拟机,安装CentOS6操作系统
- Client上安装pssh,通过pssh管理其他虚拟机,快速部署实验环境
- 关闭防火墙,SElinux
实验步骤
步骤一:安装并配置HTTPD、PHP
安装HTTPD和PHP
在 172.18.17.12
和 172.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.12
和 172.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动态资源
- 在
172.18.17.12
和172.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>';
?>
- 使用客户端浏览器测试
步骤二:安装并配置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.12
和 172.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());
}
?>
客户端浏览器上测试数据库是否能连接成功
步骤三:安装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.12
和172.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
通过客户端浏览器完成后续的搭建
步骤五:安装DNS实现轮询
安装DNS
172.18.17.11
上安装bind
yum -y install bind
配置DNS
- 修改配置文件
/etc/name.conf
使DNS服务监听所有端口,响应所有主机的查询请求
# 将 /etc/name.conf文件中的下面两行注释掉
//listen-on port 53 { 127.0.0.1; };
//allow-query { localhost; };
- 定义DNS区域
[11@root ~]# tail -n 5 /etc/named.rfc1912.zones
//www.zhubiaook.com
zone "zhubiaook.com" IN {
type master;
file "zhubiaook.com.zone";
};
- 定义解析库文件
[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
- 启动named服务
[11@root named]# service named start
Starting named: [ OK ]
步骤六:测试
- 测试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
...
- 浏览器上测试
END