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

方案

上篇文章讲到了负载均衡的相关理论知识,这篇文章我打算讲讲实践方法以及实践中遇到的问题

方案:haproxy http层负载均衡

安装一个haproxy服务,两个web服务

haproxy:192.168.1.227:80

web1 http://192.168.1.226:8081/login

web2 http://192.168.1.246:8888/login

web服务自行准备,文章中就不说了

负载均衡算法为轮询调度

会话保持实现方式为cookie识别,插入cookie

优点:

1 配置简单

2 提供会话保持功能

3 性能不错

安装与配置

安装

tar -zxvf haproxy-1.49.tar.gz   
cd haproxy-1.4.9  
make TARGET=linux26 PREFIX=/haproxy  
make install PREFIX=/haproxy创建日志目录
mkdir /home/haproxy/logs/
创建配置文件目录
mkdir /etc/haproxy/

PREFIX=/haproxy : 安装目录前缀

启动程序将安装在 /haproxy/sbin/haproxy

配置

global  log 127.0.0.1   local3  #log 127.0.0.1  local1 notice  #log loghost    local0 info  maxconn 4096#chroot /usr/local/haproxy#chroot /home/haproxy  uid 502 gid 502daemon  nbproc 1  pidfile /home/haproxy/logs/haproxy.pid  #debug  #quiet  defaults  log     global mode    http  option  httplog  option  dontlognull  option  forwardfor  option  redispatch log     127.0.0.1 local3retries 3  maxconn 32000  balance roundrobin  stats   uri     /haproxy-stats  contimeout      5000  clitimeout      50000  srvtimeout      50000  listen web_proxy *:80appsession JSESSIONID len 52 timeout 3h#插入cookie的方式cookie SRV insert indirect nocache#模式有http tcp healthmode httpstats enablestats hide-version#查看状态stats uri /haproxy-statsstats refresh 10smonitor-uri /haproxy_test#负载均衡方案:轮调balance roundrobinoption httpclose#后端可以获取客户端的真实ipoption forwardfor#健康检查option httpchk HEAD /login HTTP/1.0#option  httpchk GET /ping.jsp #后端真实服务server  webA 192.168.1.226:8081 cookie A check  server  webB 192.168.1.246:8888 cookie B check

这里注意配置检查地址

option httpchk HEAD /login HTTP/1.0

启动

/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg

查看进程

ps -ef|grep haproxy

关闭进程

kill –9 pid

查看监控页面

http://192.168.1.227/haproxy-stats

如下图:注意状态一栏显示200,如果不是则表示web服务器未启动,或者健康检查链接不可访问

image

测试

然后打开不同的浏览器,模拟用户访问

http://192.168.1.227/login/

会看到

image

 

image

证明请求被分发到不同的web服务器了

查看cookie

image

cookie被加入了SRV=A

会话保持的流程

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

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

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

总结

该方案解决的问题

1.负载均衡,并解决web服务的单点故障

2.会话保持

存在的缺点

1.web服务器的session保存存在单点故障,即其中一台web服务器宕机之后,存储在上面的session也会丢失

2.负载均衡服务器存在单点故障

下一篇文章将讨论如何解决以上2个缺点

 

上篇文章 大型网站系统架构的演进(三)如何提高网站的高可用和高性能

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

下篇文章 大型网站系统架构的演进(五)深入探讨web应用高可用方案

转载于:https://www.cnblogs.com/tangyanbo/p/4409841.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Python]使用 lambda 函数

From:http://woodpecker.org.cn/diveintopython/power_of_introspection/lambda_functions.html 4.7. 使用 lambda 函数 4.7.1. 真实世界中的 lambda 函数 Python 支持一种有趣的语法,它允许你快速定义单行的最小函数。这些叫做 lambda 的函数,是从 Li…

mysql修改子分区_创建MySQL子分区方法

创建MySQL子分区方法发布时间:2020-05-26 15:11:15来源:51CTO阅读:216作者:三月本文主要给大家介绍创建MySQL子分区方法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还…

const char * array[]和char * const array[]

int main() {char abc[] "abc";char def[] "def";char * const array[] {"abc", "def"};char * const array2[] {abc, def};const char * array3[3] {"abc", "def"};//char * const array3[2]; //error,定义…

日志处理(二) 日志组件logback的介绍及配置使用方法(转)

本文转自:http://www.cnblogs.com/yuanermen/archive/2012/02/13/2348942.html http://www.cnblogs.com/yuanermen/archive/2012/02/13/2349609.html 一、logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logba…

TNS-03505 oracle用户可以tnsping通,普通用户tnsping报错

From: http://zxf261.blog.51cto.com/701797/750308 今天碰到了一个有趣的问题 oracle用户可以tnsping通&#xff0c;普通用户tnsping报错 用普通用户tnsping数据库的时候报 TNS-03505: Failed to resolve name 而用oracle用户tnsping数据库的时候却可以ping通 <34 linux-si…

python package安装包_安装Python包(第三方库)

检查python版本如果“提示 python 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。”&#xff0c;可能有2种原因1、进入的目录不对 (切换目录后再查看)C:\Users\zhangXXXX>pythonpython 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。C:…

Windows2003+SQL2000的集群安装手册

1 集群服务器安装及配置 步骤节点1节点2存储注释安装配置系统上电上电断电检查所有共享总线上的存储设备是否都已经断电&#xff0c;给各节点上电。1.1 安装Windows Server 2003操作系统 在服务器1和服务器2分别独立安装Windows Server 2003操作系统。安装要开始安装过程&#…

wpf全局异常

在App.xaml文件中 添加DispatcherUnhandledExceptionEventArgs 新增对应事件 转载于:https://www.cnblogs.com/ChenRihe/p/4421049.html

shell执行oracle存储过程,获得存储过程返回值

From: http://www.flatws.cn/article/program/oracle/2011-06-27/32316.html 同事做一个小的etl调度&#xff0c;需要将存储过程执行情况进行返回并控制其后续依赖是否执行&#xff0c;本人只是将调用执行存储过程的shell脚本中存储过程输出参数返回&#xff0c;并没有写具体的…

一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来!...

package com.pb.demo1;import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** 一群人围成一圈从123报数&#xff0c;如果报到3就退出该圈中&#xff0c;直到最后一个人留下来&a…

动画基础01

在silverlight动画中&#xff0c;动画类型被分为两类&#xff1a;From/To/By&#xff08;线性插值动画&#xff08;Linear Interpolation&#xff09;和关键帧动画 &#xff08;Key-frame Animation&#xff09;。 1.From/To/By 动画&#xff0c;也称为线性插值动画&#xff08…

async中series的实现 javascript构件

//同步流程 var seriesfunction(arr){function async(i){arr[i](function(){if(1i<arr.length){async(1i)}})}async(0) } //demo var back1function(callback){setTimeout(function(){cc.log(21)callback()},1000) }series([back1,back1,back1])转载于:https://www.cnblogs.…

Bash中执行存储过程或普通的SQL命令

演示&#xff1a; 在bash中执行一个存储过程和一个普通的SQL语句 0. 前提条件&#xff1a; 数据库&#xff1a;Oracle10g 表&#xff1a;oracle自带的emp表&#xff0c;默认有数据如下&#xff1a; 1. 在bash中执行oracle存储过程 首先&#xff0c;在oracle中建立一个存储过…

用c语言调用动态库

动态加载是在程序运行时用dlopen,dlsym函数进行的。静态加载发生在程序装载时。1.1 用c语言静态方式调用动态库libsthc.so&#xff1a;/** ctest.c* Testing program for libsthc.so library //测试程序为在c语言中调用libsthc.so库* in c languange* */#include "libsth…

hdu3555 Bomb 数位dp

//3555 //题意&#xff1a;统计 1 到 n 中包含 49 的数的个数 1 #include "bits\stdc.h"2 using namespace std;3 __int64 dp[22][3];4 5 int main()6 {7 int i;8 dp[0][0] 1;9 for(i 1; i < 20; i) { 10 dp[i][0] dp[i - 1][0] * 10 - dp…