从上篇文章到这篇文章,中间用了一段时间准备,主要是想把东西讲透,同时希望大家给与一些批评和建议,这样我才能有所进步,也希望喜欢我文章的朋友,给个赞,这样我才能更有激情,呵呵。

由于本篇要写的内容有点多,我就分为几篇博客进行了详细描述。

Haproxy提高web应用的高可用

上一篇文章讲到了haproxy+tomcat的方案,文章地址:大型网站系统架构的演进(四)http层负载均衡之haproxy实践篇(一)

大家可以先温习一下,

文中提到了高可用,该集群方案也可以提高应用系统的高可用,如果tomcat应用出现故障,或者tomcat应用服务器出现故障,haproxy会检测到(这里指的是定期心跳检查),并将应用从可用列表中删除,打开监控页面http://192.168.1.227/haproxy-stats

可以看到有2个web应用运行,如果将webA停掉,可以看到webA显示down

这样客户端请求就不会分发给webA,下面模拟一下webA宕机的情况

这里对sessionId增加了一个后缀做标记

webA:jvm3

webB:jvm2

1. webA正常的情况,客户请求被分发到webA

此时产生的sessionId为jvm3

2. 停掉webA,刷新浏览器

可以看到请求被转发到webB

也就是说web应用出现故障,haproxy会做切换,因此可以保证web应用的高可用。

Haproxy本身的高可用

如果haproxy本身出现故障,那么网站将不可用,所以我们接下来要做的事情就是解决haproxy单点故障的问题。

我们可以运用虚拟ip技术,将haproxy部署在2台服务器上,一台做为master,正常运营,一台为backup,

当master出现问题的时候,接管master。

首先有一个虚拟ip暴露给客户端,虚拟ip对应的mac地址为master服务器,

用户向虚拟ip发送一个请求,该请求会被分发到master服务器上,当master出现故障时,被backup检测到,则backup成为master,

且发送消息将arp缓存虚拟ip对应的mac地址backup的mac地址,这样发送到虚拟ip的报文会被转发到backup 。

架构图:

该方案解决了haproxy单点故障的问题,具体用keepalived实现,详细请参考文章:

Keepalived 实现双机热备

Keepalived + haproxy双机高可用方案

如果想实践的朋友,请按照上面2篇文章安装和配置haproxy和keepalived

系统分布如下:

ha主机 192.168.1.227:80

ha备机 192.168.1.246

keepalived 主机 192.168.1.227

keepalived备机 192.168.1.246

web1 http://192.168.1.226:8081/login

web2 http://192.168.1.246:8888/login

虚拟ip 192.168.1.99

安装好haproxy和keepalived后,启动haproxy和keepalived

Haproxy访问地址:

http://192.168.1.99/haproxy-stats

注意pid为9644,这是master上的haproxy

应用访问地址

http://192.168.1.99/login/

注意sessionId的后缀为jvm3

查看虚拟ip1.99对应的mac地址

接下来,我们停掉master上的haproxy服务

kill -9 9644

查看haproxy http://192.168.1.99/haproxy-stats

发现haproxy的pid变成backup机器上的了

刷新web的访问页面http://192.168.1.99/login/

发现sessionId没有变化

查看虚拟ip1.99对应的mac地址

mac地址已经变为backup机器上的了

如果我们直接关闭主机服务器或者关闭主机的keepalived,发现测试结果也是一样的

因此该方案实现了haproxy的高可用,解决了haproxy的单点故障问题。

会话保持问题

那么这里我还要提出一个疑问,为什么sessionId也没有变化呢?

也就是说切换到backup服务器的haproxy之后,

可以保持用户的会话,那么它是怎么实现的呢?

这里就要回到上篇文章讲的负载均衡时保持会话的策略

会话保持的流程

1.客户端首次请求,经过haproxy到web服务端时,web服务端set-cookie并响应到haproxy

2.haproxy在cookie后插入SRV=A,并响应客户端

3.客户端第二次请求,经过haproxy时,haproxy将srv后缀去掉,然后请求服务端

这种保持会话的方法是无状态的,也就说主要haproxy配置的负载均衡策略相同,不管在哪台机器上运行

将得到同样的结果

上篇文章 大型网站系统架构的演进(四)http层负载均衡之haproxy实践篇(一)

目录 大型网站系统架构的演进目录

下篇 大型网站系统架构实践(六)深入探讨web应用集群Session保持

大型网站系统架构实践(五)深入探讨web应用高可用方案的更多相关文章

  1. 大型网站系统架构实践(六)深入探讨web应用集群Session保持

    原理 在第三,四篇文章中讲到了会话保持的问题,而且还遗留了一个问题,就是会话保持存在单点故障, 当时的方案是cookie插入后缀,即haproxy指负责分发请求,应用服务自行保持用户会话,如果应 用服 ...

  2. 大型网站系统架构实践(四)http层负载均衡之haproxy实践篇(一)

    方案 上篇文章讲到了负载均衡的相关理论知识,这篇文章我打算讲讲实践方法以及实践中遇到的问题 方案:haproxy http层负载均衡 安装一个haproxy服务,两个web服务 haproxy:192 ...

  3. 大型网站技术架构(3):WEB 前端性能优化

    上次说到了性能优化策略,根据网站的分层架构,可以大致的分为 web 前端性能优化,应用服务器性能优化,存储服务器性能优化三大类 这次来说一下 web 前端性能优化,一般来说,web 前端就是应用服务器 ...

  4. 大型网站系统架构演化之路【mark】

    前言 一 个成熟的大型网站(如淘宝.天猫.腾讯等)的系统架构并不是一开始设计时就具备完整的高性能.高可用.高伸缩等特性的,它是随着用户量的增加,业务功能的 扩展逐渐演变完善的,在这个过程中,开发模式. ...

  5. Java面试题精选,大型网站系统架构你不得不懂的10个问题

    作者:JavaGuide(公众号) 下面这些问题都是一线大厂的真实面试问题,不论是对你面试还是说拓宽知识面都很有帮助.之前发过一篇8 张图读懂大型网站技术架构 可以作为不太了解大型网站系统技术架构朋友 ...

  6. P9架构师讲解从单机至亿级流量大型网站系统架构的演进过程

    阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架 ...

  7. 阿里P9架构师讲解从单机至亿级流量大型网站系统架构的演进过程

    阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架 ...

  8. 【转】分布式环境下5种session处理策略(大型网站技术架构:核心原理与案例分析 里面的方案)

    前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Ngin ...

  9. 《大型网站系统与JAVA中间件实践》读书笔记-大型网站架构演进

    大型网站架构演进 大型网站是一种很常见的分布式系统,除了海量数据和高并发的访问量,本身业务和系统也复杂. 大型网站的架构演进 我们现在常用的大型网站都是从小网站一步一步发展起来的,这个过程中会 有一些 ...

随机推荐

  1. Eclipse 启动Tomcat 超时报错的解决方案

    在用eclipse开发项目  用tomcat发布项目的时候  会提示超时, Server Tomcat v7.0 Server at localhost was unable to start wit ...

  2. Backbone模型

    现在进入最关键的组件 - 模型.模型用来存储应用的所有数据,以及直接和数据操作相关的逻辑.Backbone中的模型类是Backbone.Model,它包含了数据存储,数据验证,以及数据发生变动时触发相 ...

  3. Web Storage API : LocalStroage

    这是一篇详细介绍详细介绍详细介绍_(:з」∠)_ 背景: 当你访问一个页面,并不是丢到服务器,等待用户访问就可以了的.从输入网址到显示网页的全过程,可以参考这里 简单来说,在输入url按下回车键后,首 ...

  4. 虚拟机下Ubuntu没有GUI图形界面,解决方法

    先说下快捷键,CLI切换到GUI:Ctrl+Alt+F7: GUI切换到CLI:Ctrl+Alt+F1. 今天折腾虚拟机时,打开Ubuntu后显示的是命令行界面,按快捷键后并没转换到图形界面,而是一直 ...

  5. 如何做好presentation

    1.全心投入 要么不做,要做就做好 承诺自己会花时间好好准备自己的演讲,投入专注的精力. 人们可以通过练习使自己成为很好的演讲者. 2分析你的观众 他们想听什么? 3.组织你的想法 让语言简单 让观众 ...

  6. java如果读取xml内容

    本文介绍的是使用dom4j方式读取,如需要其他方式可自行百度. 1.首先导入dom4j的jar包:http://www.dom4j.org/dom4j-1.6.1/ 2.准备xml文件 <?xm ...

  7. 【MVC 4】2.使用 Razor

    作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> Razor 是微软 MVC3 引入的视图引擎的名称,并在MVC 4 中进行了修订.视图引擎处理 A ...

  8. 这一路走来,冷暖自知 (附算法demos)

    最近半年多,除了“一键修图”算法之外我还做了其他什么算法? 1.实时单图HDR算法(颜色矫正,智能曝光) 2.多图曝光融合HDR算法(最高支持八百万像素左右) 3.模拟热能探测算法 4.防伪探测算法 ...

  9. 【每天一题ACM】 斐波那契数列(Fibonacci sequence)的实现

    最近因为一些原因需要接触一些ACM的东西,想想写个blog当作笔记吧!同时也给有需要的人一些参考 话不多说,关于斐波那契数列(Fibonacci sequence)不了解的同学可以看看百度百科之类的, ...

  10. Centos7开启防火墙并且使MYSQL外网访问开放3306端口

    http://www.cnblogs.com/kreo/p/4368811.html CentOS7默认防火墙是firewalle,不是iptables #先检查是否安装了iptables servi ...