整个架构简单拓扑图如下所示:
其中:
192.168.10.66与192.168.10.6两台主机提供httpd服务
192.168.10.27与192.168.10.87两台主机提供varnish缓存服务
192.168.10.17与192.168.10.77两台主机安装HAProxy实现客户端请求的调控
192.168.10.7主机安装mariadb,提供数据存储服务
服务器与客户端连接ip地址为172.16.10.99/16,
一.httpd服务
1.分别于192.168.10.6与192.168.10.66主机上安装httpd程序,因为此处httpd只需要提供简单web服务,故不需要修改配置文件。但是需要在DocumentRoot目录中(/var/www/html)添加对应主页文件便于演示效果
其中192.168.10.6主机上主页文件index.html内容为
server of host 6
响应的192.168.10.66主机上只需要把6改为66即可
启动服务后,使用同一网段主机检测httpd服务是否运行正常
2.分别在192.168.10.6与192.168.10.66主机上安装php,php-mysql程序,实现httpd与php以及mysql的连接,在主配置文件中DirectoryIndex行最后添加index.php,在DocumentRoot目录中(/var/www/html)添加php主页文件index.php,内容如下:
192.168.10.66主机上相似,但index.php内容中需要将6修改为66
3.在192.168.10.7主机上启动mariadb服务,并添加douhua用户与密码,命令为;
MariaDB [(none)]> grant all on test.* to 'douhua'@'172.16.%.%' identified by 'passwd';
4.开启浏览器,分别访问192.168.10.6与192.168.10.66主机,检测mysql是否正常连接
http://192.168.10.6/index.php
二.varnish服务器的相关配置
1.分别在192.168.10.27和192.168.10.87主机上安装varnish程序
2.修改192.168.10.27主机上配置文件/etc/varnish/default.vcl
1)添加两台后端服务器,内容为
另一台则将192.168.10.6更改为192.168.10.66即可
2)定义组调配方式,是否需要缓存
其中vcl_init段将后端服务器定义为组,以及添加了调度算法,因为是缓存服务器,后端服务器压力相对较少,因只需要使用轮询即可。vcl_recv中定义如果是以admin开始的URL直接去后端服务器请求数据,不由缓存服务器提供。此处可以添加其他规则,来实现更加精准的调控
3)添加响应首部项目,便于效果验证
其中if段表示如果varnish匹配到了客户端请求的资源,则在响应报文首部添加hit-result,且结果为HIT,否则为MISS,添加ipaddr行表示经由的varnish服务器,此处表示了响应的varnish服务器
3.192.168.10.87主机上配置文件与192.168.10.27类似
4.在后端服务器主页目录中添加admin目录,并添加测试网页
5.启动varnish服务,并打开服务器查看结果
http://192.168.10.27:6081
查看响应首部可以看到刚才添加的两个响应首部,以及页面内容变化
三.HAProxy实现负载均衡
1.在192.168.10.17与192.168.10.77主机上分别安装HAProxy程序
2.设定前端面向客户端的相关配置,如下图所示:
注:bind一行表示绑定的端口,接下来两行定义了两个acl规则,以“dynamic”和以“.php”结尾的URL;如果满足上述条件则使用“dong”组后端服务器,其他则使用默认的“webservers”组服务器;rspadd则是在响应报文中添加一行,显示了反代方式。
3.设定后端服务器,如下图所示
注:balance定义算法,其他算法包括source,uri,leastconn等;server则定义了后端服务器以及权重。本次架构中“dong”组仅仅使用了一台服务器,如果有需要可以自行添加多台并定义算法。
4.启动haproxy服务,开启浏览器输入对应ip验证是否正常访问:
http://192.168.10.17
四.利用keepalived实现HAProxy的高可用
1.在192.168.10.17与192.168.10.77主机上分别安装keepalived程序包
2.编辑配置文件(/etc/keepalived/keepalived.conf)内容如下:
注:
1)global_defs段定义了邮件发送的相关配置,此处不做详细说明
2)vrrp_script段定义了每隔1S检测本机haproxy服务是否正在运行,如果服务停止了,则priority值减少5,若正常,该脚本正常退出
3)vrrp_instance段定义监控的具体配置
state:定义当前虚拟路由器状态,如果是主服务器则为MASTER,否则为BACKUP。
priority:定义了当前虚拟路由的优先级
virtual_ipaddress:定义了虚拟路由IP地址
track_script:调用之前定义的脚本实现监控
4)192.168.10.17与192.168.10.77主机上配置文件中需要修改优先级和state
3.启动keepalived服务,并访问
http://172.16.10.99
五.总结
通过以上四个步骤可以简单搭建一个利用HAProxy实现负载均衡的LAMP架构。上述架构中,除mariadb服务器之外,其他任何一台服务器down机,该系统仍然可以运行。因为增加了varnish缓存功能,静态资源的访问直接通过缓存提供,可以极大减轻后端服务器的压力。另外在实现动静分离的时候,可以在HAProxy服务器,与varnish服务器两处实现。具体在何处实现应该根据实际情况确定,且实验中分离条件较为简陋,实际生产中应增加其他多个条件,从而增减缓存命中率,提供系统的效率。