整个架构简单拓扑图如下所示:

使用HAproxy,keepalived实现简单LAMP架构的负载均衡与高可用_第1张图片

其中:

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,内容如下:

使用HAproxy,keepalived实现简单LAMP架构的负载均衡与高可用_第2张图片

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)添加两台后端服务器,内容为

      使用HAproxy,keepalived实现简单LAMP架构的负载均衡与高可用_第3张图片

     另一台则将192.168.10.6更改为192.168.10.66即可

    2)定义组调配方式,是否需要缓存

    使用HAproxy,keepalived实现简单LAMP架构的负载均衡与高可用_第4张图片

  其中vcl_init段将后端服务器定义为组,以及添加了调度算法,因为是缓存服务器,后端服务器压力相对较少,因只需要使用轮询即可。vcl_recv中定义如果是以admin开始的URL直接去后端服务器请求数据,不由缓存服务器提供。此处可以添加其他规则,来实现更加精准的调控

    3)添加响应首部项目,便于效果验证

使用HAproxy,keepalived实现简单LAMP架构的负载均衡与高可用_第5张图片

   其中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.设定前端面向客户端的相关配置,如下图所示:

使用HAproxy,keepalived实现简单LAMP架构的负载均衡与高可用_第6张图片


  注:bind一行表示绑定的端口,接下来两行定义了两个acl规则,以“dynamic”和以“.php”结尾的URL;如果满足上述条件则使用“dong”组后端服务器,其他则使用默认的“webservers”组服务器;rspadd则是在响应报文中添加一行,显示了反代方式。

  3.设定后端服务器,如下图所示

使用HAproxy,keepalived实现简单LAMP架构的负载均衡与高可用_第7张图片

  注: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)内容如下:

使用HAproxy,keepalived实现简单LAMP架构的负载均衡与高可用_第8张图片


  注:

    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服务器两处实现。具体在何处实现应该根据实际情况确定,且实验中分离条件较为简陋,实际生产中应增加其他多个条件,从而增减缓存命中率,提供系统的效率。