反向代理负载均衡之haproxy

在上篇安装的nginx的机器环境上将nginx停掉

/usr/local/nginx/sbin/nginx -s stop
在linux-node2上编译安装haproxy作为反向代理服务器
[[email protected]-node1 ~]# cd /usr/local/src
[[email protected] src]# wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.2.tar.gz
[[email protected] src]# tar zxf haproxy-1.6.2.tar.gz
[[email protected] src]# cd haproxy-1.6.2
[[email protected] src]# make TARGET=linux2628 PREFIX=/usr/local/haproxy-1.6.2
[[email protected] src]# make install
[[email protected] ~]# cp /usr/local/sbin/haproxy /usr/sbin/
[[email protected] ~]# haproxy -v
HA-Proxy version 1.6.2 2015/12/25
Copyright 2000-2015 Willy Tarreau <[email protected]>

编辑Haproxy启动脚本

cd /usr/src/haproxy-1.6.2/

cp examples/haproxy.init /etc/init.d/haproxy

chmod 755 /etc/init.d/haproxy

针对配置文件的路径创建以下文件

useradd -r haproxy

mkdir /etc/haproxy

mkdir /var/lib/haproxy

mkdir /var/run/haproxy

编辑haproxy配置文件,配置log,并启动

cd /etc/haproxy/
cat haproxy.cfg
global #全局配置,在所有配置段中都生效
   log 127.0.0.1 local3 info #记录日志,,info是日志级别
   chroot /var/lib/haproxy
   user haproxy
   group haproxy
   daemon
defaults #默认配置,可以被前端和后端继承
   log global  #使用global的log设置
   mode http   #使用http模式,也可以使用tcp模式
   option httplog  #启动http请求的log
   option dontlognull  #在日志中不记录空连接(空连接:健康检查的链接)
   timeout connect 5000  #长连接超时时间
   timeout client 50000 #客户端连接超时
   timeout server 50000  #RS连接超时
frontend www_check-blog_com #前端配置 + 一个配置段的名字(最好不要乱写,和项目直接相关最佳)
   mode http   #使用http模式,也可以使用tcp模式
   bind *:80  #监听80端口
   stats uri /haproxy?stats  #状态页面dashboard
   default_backend www_check-blog_com_backend  #对应的backend名称
backend www_check-blog_com_backend  #对应的frontend的default_backend
#source cookie SERVERID  #算法,source相当于ip hash
   option httpchk GET /index.html  #检测url
   balance roundrobin   #使用rr负载均衡方式
   server linux-node1 192.168.230.129:8080 check inter 2000 rise 3 fall 3 weight 5
   server linux-node2 192.168.230.128:8080 check inter 2000 rise 3 fall 3 weight 1 #RS健康检测时间间隔2秒,重试三次,失败三次不可用,权重1
[[email protected] haproxy]# vim /etc/rsyslog.conf
?  15 $ModLoad imudp  #打开注释
?  16 $UDPServerRun 514   #打开注释
?  74 local3.*     /var/log/haproxy.log  #local3的路径
[[email protected] haproxy]# /etc/init.d/rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
[[email protected]-node2 haproxy]# /etc/init.d/haproxy start
Starting haproxy:                                          [  OK  ]

浏览器访问

更改配置文件的检查url,对url检查页面进行测试

[[email protected] haproxy]#  sed -i ‘s/index\.html/chuck-blog.html/g‘ haproxy.cfg
 [[email protected] haproxy]# /etc/init.d/haproxy restart
Shutting down haproxy:                                     [  OK  ]
Starting haproxy:                                          [  OK  ]

下面是检测url和uri的几种方式

option httpchk
option httpchk <uri>
option httpchk <method> <uri>
option httpchk <method> <uri> <version>

将页面改回来

[[email protected] haproxy]#  sed -i ‘s/chuck-blog.html/index\.html/g‘ haproxy.cfg
 [[email protected] haproxy]# /etc/init.d/haproxy restart
Shutting down haproxy:                                     [  OK  ]
Starting haproxy:                                          [  OK  ]

更改配置文件获取客户端的真实ip

在banckend配置段加入一个option

option forwardfor header X-REAL-IP #X-REAL-IP是自定义的一个名称

通过acl设置虚拟主机

一个前端可以对应多个后端,而实际生产环境建议一个frontend对应一个backend,并重载(生产不建议restart,restart会断开现有链接)

global
       log 127.0.0.1 local3 info
       chroot /var/lib/haproxy
       user haproxy
       group haproxy
       daemon
    defaults
       log global
       mode http
       option httplog
       option dontlognull
       timeout connect 5000
       timeout client 50000
       timeout server 50000
    frontend www_check-blog_com
       mode http
       bind *:80
       stats uri /haproxy?stats
       default_backend www_check-blog_com_backend #默认的backend
       acl is_other_check-blog_com hdr_end(host) other.heck-blog.com #is_other_check-blog_com:给此acl起一个名字;hdr_end(host):固定格式,用来识别host,如果没有匹配到acl,即访问default的bankcend
       use_backend other_check-blog_com_backend if is_other_check-blog_com
       #use_backend:关键词,使用哪个banckend;other_check-blog_com_backend:指定哪个backend的名称;if is_other_check-blog_com:用来判断acl,if 后面的名称是acl名称
       #如果acl中有这个is_other_check-blog_com名称,那就使用这个other_check-blog_com_backend
    backend www_check-blog_com_backend
    #source cookie SERVERID
       option forwardfor header X-REAL-IP
       option httpchk GET /index.html
       balance roundrobin
       server linux-node1 192.168.230.128:8080 check inter 2000 rise 3 fall 3 weight 1
    backend other_check-blog_com_backend
    #source cookie SERVERID
      option forwardfor header X-REAL-IP
      option httpchk GET /index.html
      balance roundrobin
      server linux-node2 192.168.230.129:8080 check inter 2000 rise 3 fall 3 weight 1
[[email protected] haproxy]# /etc/init.d/haproxy restart
Shutting down haproxy:                                     [  OK  ]
Starting haproxy:                                          [  OK  ]

本地hosts解析

192.168.230.128 www.check-blog.com  other.check-blog.com

在fortend添加acl,根据静态文件,设置不同的backend(类似于location),注释的两行和前两行意义相同,分别是通过url正则匹配和url的后缀匹配

acl is_static_reg url_reg /*.(css|jpg|png|js|jpeg|gif)$
use_backend other_chuck-blog_com_backend if is_static_reg 

第二种

#acl is_static_path path_end .gif .png .css .jpg .jpeg
#use_backend other_chuck-blog_com_backend if is_static_path

其他形式的acl,正则或者UA(可以理解为nginx的location),更多形式的acl,请浏览文档

http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#acl

  acl is_do_path url_reg /chuck.do
   use_backend other_chuck-blog_com_backend if is_do_path
   acl is_UA_path hdr_reg(User-Agent) -i andriod
   use_backend other_chuck-blog_com_backend if is_UA_path

haproxy的动态维护

在配置文件添加socket

[[email protected] ~]# head -8 /etc/haproxy/haproxy.cfg
global
   log 127.0.0.1 local3 info
   chroot /var/lib/haproxy
   user haproxy
   group haproxy
   daemon
   stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin #指定socket文件路径,权限,管理级别
   stats timeout 2m  #指定超时时间
安装socat
[[email protected]-node1 ~]yum install -y socat
使用help查看socat的事情
[[email protected]-node1 ~]# echo "help" |socat stdio /var/lib/haproxy/haproxy.sock
Unknown command. Please enter one of the following commands only :
  clear counters : clear max statistics counters (add ‘all‘ for all counters)
  clear table    : remove an entry from a table
  help           : this message
  prompt         : toggle interactive mode with prompt
  quit           : disconnect
  show backend   : list backends in the current running config
  show info      : report information about the running process   #查看所有信息
  show pools     : report information about the memory pools usage  #查看所有poll
  show stat      : report counters for each proxy and server  #显示状态
  show errors    : report last request and response errors for each proxy
  show sess [id] : report the list of current sessions or dump this session
  show table [id]: report table usage stats or dump this table‘s contents
  show servers state [id]: dump volatile server information (for backend <id>)
  get weight     : report a server‘s current weight #获得权重信息
  set weight     : change a server‘s weight #设置权重
  set server     : change a server‘s state, weight or address  #改变一个server的转态权重或地址
  set table [id] : update or create a table entry‘s data
  set timeout    : change a timeout setting
  set maxconn    : change a maxconn sett
  ing
  set rate-limit : change a rate limiting value
  disable        : put a server or frontend in maintenance mode #将一个server或者fortend置于维护模式
  enable         : re-enable a server or frontend which is in maintenance mode #启用一个维护状态的server或者frontend
  shutdown       : kill a session or a frontend (eg:to release listening ports)
  show acl [id]  : report avalaible acls or dump an acl‘s contents
  get acl        : reports the patterns matching a sample for an ACL  #获取acl
  add acl        : add acl entry  #加一个acl
  del acl        : delete acl entry  #删一个acl
  clear acl <id> : clear the content of this acl
  show map [id]  : report avalaible maps or dump a map‘s contents
  get map        : reports the keys and values matching a sample for a map
  set map        : modify map entry
  add map        : add map entry
  del map        : delete map entry
  clear map <id> : clear the content of this map
  set ssl <stmt> : set statement for ssl
查看info信息,内容值可以利用来监控
[[email protected]-node1 haproxy]# echo "show info" |socat stdio /var/lib/haproxy/haproxy.sock
Name: HAProxy
Version: 1.6.2
Release_date: 2015/11/03
Nbproc: 1
Process_num: 1
Pid: 14841
Uptime: 0d 0h03m44s
Uptime_sec: 224
Memmax_MB: 0
Ulimit-n: 4033
Maxsock: 4033
Maxconn: 2000
Hard_maxconn: 2000
CurrConns: 0
CumConns: 2
CumReq: 2
Maxpipes: 0
PipesUsed: 0
PipesFree: 0
ConnRate: 0
ConnRateLimit: 0
MaxConnRate: 0
SessRate: 0
SessRateLimit: 0
MaxSessRate: 0
CompressBpsIn: 0
CompressBpsOut: 0
CompressBpsRateLim: 0
Tasks: 8
Run_queue: 1
Idle_pct: 100
node: linux-node1.example.com
description:

关闭linux-node2主机

echo "disable server other_check-blog_com_backend/linux-node2" |socat stdio /var/lib/haproxy/haproxy.sock

可以看到linux-node2进入了维护(maintain)状态

打开linux-node2主机(只对现有的server生效,不能用来新增节点)

echo "enable server other_check-blog_com_backend/linux-node2" |socat stdio /var/lib/haproxy/haproxy.sock

可以看到linux-node2恢复正常

生产环境遇到的问题

haproxy的本地端口可能用尽,解决方案如下4条

1)更改local的端口范围,调整内核参数

[[email protected] ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000

2)调整timewait的端口复用,设置为1

[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_tw_reuse
0

3)缩短tcp_wait的时间,并不建议修改

[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
60

4)终极方案:增加为多个ip,自然端口数就够了

haproxy对比nginx

nginx

优点

1.web服务器,应用比较广泛

2.7层负载均衡,location设置复杂的基于HTTP的负载均衡

3.性能强大,网络依赖小

4.安装配置简单

缺点

1.健康检查单一

2.负载均衡算法少

3.不能动态管理

4.没有集群upstream的状态页面

haproxy

优点

1.专门做负载均衡

2.负载均衡算法多

3.性能》=nginx

4.通过和socket通信进行动态管理

5.有比较丰富的dashboard页面

6.强大的7层代理

缺点

1.配置没有nginx简单

2.应用没有nginx广泛

时间: 2024-10-03 22:29:15

反向代理负载均衡之haproxy的相关文章

反向代理负载均衡之nginx

一.集群 1.1 什么是集群 集群是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高可用性和可缩放性. 和传统的高性能计算机技术相比,集群技术可以利用各档次的服务器作为节点,系统造价低,可以实现很高的运算速度,完成大运算量的计算,具有较高的响应能力,能够满足当今日益增长的信息服务的需求. 而集群技术是一种通用的技术,其目的是为了解决单机运算能力的不足.IO能力的不足.提高服务的可靠性.获

Nginx实现反向代理负载均衡功能

反向代理软件Nginx:本身支持反向代理.负载均衡功能,属于L7层负载均衡.Nginx反向代理简单易用,受到大部分中小企业的青睐.LVS:支持L4层负载均衡,haproxy:支持L4.L7层负载均衡L4.L7是指OSI模型中的第四层和第七层:L4:TCP负载均衡:L7:http负载均衡nginx.lvs.haproxy区别参考资料https://www.cnblogs.com/ahang/p/5799065.htmlhttps://www.cnblogs.com/like-minded/p/51

Nginx实现反向代理负载均衡与静态缓存

介绍: Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.在连接高并发的情况下,Nginx是Apache服务器不错的替代品,能够支持高达50000个并发连接数的响应. 实验环境: Hostname IP 系统 规划 n2.preferred 192.168.1.2 Centos 6.5 Web server n3.preferred 192.168.1.3 Centos 6.5 Web server n6.preferred 192.168.1.6

Tomcat反向代理+负载均衡的四种方法配置

环境拓扑 环境说明: IP地址 功能描述 nginx or httpd 172.16.4.100 代理服务器,将用户请求分发到后端的Tomcat服务器实现反向代理和负载均衡 Tomcat-01 172.16.4.101 后端实际提供服务的服务器 Tomcat-02 172.16.4.102 后端实际提供服务的服务器 系统环境都如下所示: [[email protected] ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [[emai

反向代理负载均衡

使用代理服务器可 以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求 均匀转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web 服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式. 中文名 反向代理负载均衡 外文名 reverse-proxy load balancing 目录 1 概念 2 ngi

反向代理负载均衡-----nginx

一:集群 1.1:集群的概念 集群是一组相互独立的.通过高速网络互联的计算机,他们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高高可用和可伸缩性.和传统的高性能计算机技术相比,集群技术可以利用各档次的服务器作为节点,系统造价低,可以实现很高的运算速度,完成大运算量的计算,具有较高的响应能力,能够满足当今日益增长的信息服务的需求.而集群技术是一种通用的技术,其目的是为了解决单机运算能力不足.IO能力的不足,提高服务的可靠性.获得规模

如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器

Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动发现.它可以让我们更加专注于应用的开发,而不是基础架构.Weave 提供了一个如此棒的环境,仿佛它的所有容器都属于同个网络,不需要端口/映射/连接等的配置.容器中的应用提供的服务在 weave 网络中可以轻易地被外部世界访问,不论你的容器运行在哪里.在这个教程里我们将会使用 weave 快速并且简单

编译安装nginx并实现反向代理负载均衡和缓存功能

一.编译安装nginx 1.下载 [[email protected] ~]# wget http://nginx.org/download/nginx-1.10.0.tar.gz 2.解压 [[email protected] ~]# tar xf nginx-1.10.0.tar.gz [[email protected] ~]# cd nginx-1.10.0 3.安装依赖组件 [[email protected] nginx-1.10.0]# yum install pcre-devel

项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现

实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP:172.17.22.22 后端服务器 stasic-srv 组 rs02 RIP:172.17.1.7 后端服务器 stasic-srv 组 rs01 RIP:172.17.77.77 后端服务器 defautl-srv 组 rs02 RIP:172.17.252.111 后端服务器 defaut