天天看点

基于HAProxy+Varnish实现动静分离、负载均衡的高可用集群

        在实际的生产使用过程中,一个基本的能够应对日均百万PV的网络,一般会具有以下几种结构。
这其中每种结构担负了不同的角色。 代理服务器,负责进行请求调度,实现了负载均衡。 KeepAlived配置代理服务器实现了高可用。 缓存服务器,实现了资源的缓存,提高了请求的命中率,加快了访问速度。 动静分离,减轻后端服务器压力,提高资源访问速度。 数据库主从复制,读写分离,降低了数据库的压力 运维监控系统,实时监控系统运行状态。 自动化运维控制系统,批量管理大量服务器。 版本控制系统,在应用的迭代过程中有着至关重要的作用。
        下面,我们来模拟实现一个简单的网络集群结构。下面是这个结构的网络拓扑图。
实验环境介绍

序号

担任角色

主机名

地址

功能描述

A

互联网客户端

windows

172.18.2.22

充当互联网用户进行网络访问

B

代理服务器

haproxy

VIP 172.18.3.77;DIP 192.168.22.77

对网络请求进行调度,实现均衡负载

C

缓存服务器

varnish 1

192.168.22.33

针对网络请求进行缓存,同时对后端服务器进行动静分离,并提供均衡负载

D

varnish 2

192.168.22.44

E

静态web服务器

staticweb1

192.168.22.100

提供静态的网络服务,例如html,js,css之类

F

staticweb2

192.168.22.101

提供静态的网络服务,例如html,js,css之类

G

动态web服务器

dynamicweb1

192.168.22.200

提供动态的网络服务,例如PHP,jsp等

H

dynamicweb2

192.168.22.201

I

数据库服务器

database

192.168.22.128

提供数据库服务,供应用程序进行读写操作

实验过程中,首先关闭SELinux和防火墙策略
        在主机A上安装HAProxy,并对其进行配置。
        将HAProxy配置好以后,重启一下服务。然后在浏览器中输入 <code>http://172.18.3.77:9099/hastats</code>,就可以查看到HAProxy的调度管理界面。  此时,如果Varnish服务器已经配置成功了的话,就会显示出如下界面。
        此时,在配置好HAProxy服务器之后,就可以对varnish缓存服务器进行配置了。主要修改的文件为下面两个。Varnish1 与Varnish2的配置文件一致,将IP修改为自己对应的IP就可以了。 <code>/etc/varnish/default.vcl</code>,varnish 的默认配置文件 <code>/etc/varnish/varnish.params</code>,varnish 的一些默认参数。
其中<code>/etc/varnish/default.vcl</code>的配置内容,如下。
        对varnish的参数文件进行修改。这样便于让代理服务器知道应该将请求调度给谁。
        在上面的配置完成之后,在varnishadm控制台界面调用<code>backend.list</code>命令就能够查看,后端服务器的健康状态了。
        因为我们的后端服务器还没有进行配置,所以四个服务器都是处于宕机状态。
        使用yum来安装Httpd软件包就可以。安装之后,启动服务,确保80端口已经打开。此时再在Varnish服务器上调用<code>backend.list</code>命令就可以查看到已经又两个服务器处于Healthy状态了。
        在数据库服务器上,安装数据库服务,同时建立给WordPress应用程序使用的数据库表和用户。
安装 httpd php php-mysql
        安装wordpress,将wordpress 解压到http默认路径下,并修改WordPress的数据库配置文件。
修改目录权限
创建varnish健康性检查页面
在浏览器地址栏输入 <code>http://172.18.3.77/wordpress/index.php</code>,此时站点访问成功。
1、架构优点 HAProxy为缓存服务器提供了负载均衡,使用了uri调度算法,保证了同样路径的请求能够被调度到同样的主机上,提高了缓存的命中率。 HAProxy提供了web管理界面,能够更直观的进行调度管理和管控 Varnish的缓存机制,以及动静分离等技术,提高了web服务器的负载能力,从而使系统能够应对高并发量的请求 数据库的主从复制,也是企业实际生产应用中使用较多的生产策略,这样能够实现网络请求的频繁读写,对降低了数据库服务器的压力。
2、尚且不足 用户上传的静态资源如何存储到静态服务器中,文件的分布式存储与数据同步是这个结构需要解决的一个重要问题 HAproxy做负载均衡,没有冗余能力,容易出现单点故障,最好配合KeepAlived实现高可用。 如果用户在访问过程中,建立了Session会话,会话行为应该如何保持

继续阅读