HAproxy七层负载均衡集群

HAproxy

特点
  • 支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
  • 支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。
  • 性能非常优秀,基于事件驱动的链接处理模式及单进程处理模式(和Nginx类似)让其性能卓越。
    • 处理模式
      • 单进程处理模式
        • 所有客户端连接全部都由同一个服务进程来处理,目标就是等待连接,来一个分配一个,主要消耗cpu,
      • 多线程处理模式
        • 多线程模式消耗内存,会限制并发而且多线程需要进程间通信,也会消耗相当多的cpu资源
  • 拥有一个功能出色的监控页面,实时了解系统的当前状况。
  • 功能强大的ACL支持,给用户极大的方便。

示例

  • 拓扑
    请添加图片描述

  • 环境

    • Client
      • 192.168.145.15/24 (真实机做客户端)
    • HAproxy
      • 192.168.145.16/24
    • HTML A
      • 192.168.145.136/24
    • HTML B
      • 192.168.145.137/24
    • PHP 1
      • 192.168.145.145/24
    • PHP 2
      • 192.168.145.155/24
  • HTML A & HTML B

[root@localhost ~]# yum install httpd
  • 分别创建测试页面 index.html ,开启服务

  • PHP1 & php2(192.168.145.145/24 ,192.168.145.155/24 )

 [root@localhost ~]# yum install httpd php -y
  • 分别创建测试页面 index.php ,开启服务
 vim /var/www/html/index.php
  • php1
php1111111
  • php2
 php222222
  • 安装HAproxy(192.168.145.16)
 yum install epel-release -y 
 yum install haproxy -y
  • 修改配置文件(192.168.145.16)
 [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
  • haproxy 配置中分成五部分内容

    • global: 设置全局配置参数,属于进程的配置,通常是和操作系统相关。

    • defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件;

    • frontend:接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend;

    • backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器;

    • Listen :frontend和backend的组合体。

      ######## 全局配置信息 #########
      ######参数是进程级的,通常和操作系统相关#######
      
      	global
      		log 127.0.0.1 local3 info	   #日志服务器
      		maxconn 4096				   #最大连接数
      		uid nobody					   #用户身份
      		gid nobody					   #组身份
      		daemon						   #守护进程方式后台运行
      		nbproc 1						   #工作进程数量
      		
      ####### ###########默认设置 ###################
      #####这些参数是配置 frontend,backend,listen 组的 ###########		
      	defaults                    #这些参数可以被利用配置到frontend,backend,listen组件   
      		log		   global
      		mode	   http	    #工作模式 http ,tcp 是 4 层,http是 7 层	
      		maxconn 2048		#最大连接数
      		retries 	3			    #3 次连接失败就认为服务器不可用
      		option	redispatch	#如果 cookie 写入了 serverId 而客户端不会刷新 cookie,当serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
      		stats	uri  /haproxy	#使用浏览器访问 http://192.168.145.16/haproxy,可以看到服务器状态
      		stats auth           wing:123     #用户认证,客户端使用elinks浏览器的时候不生效
      		contimeout	5000          #连接超时时间,单位毫秒ms
      		clitimeout	    50000        #客户端超时
      		srvtimeout	    50000        #服务器超时
      		
      		
      	frontend http-in
      		bind 0.0.0.0:80                           #监听端口
      		mode http
      		log global
      		option httplog			                 #日志类别 http 日志格式
      		option httpclose		                 #打开支持主动关闭功能,每次请求完毕后主动关闭http通道	,ha-proxy不支持keep-alive,只能模拟这种模式的实现	
      	    acl php url_reg  -i  \.php$			 #acl <ACL名字>  <类型>  <大小写>  <规则>
      	    acl html url_reg  -i  \.html$		  	 #use_backend  <服务器组>  if  <ACL名字>
      	    use_backend php-server if  php
      	    use_backend html-server if  html
      	    default_backend html-server		 #默认使用的服务器组
      	
      
      	backend php-server
      		mode http
      		balance roundrobin			            #负载均衡的方式
      		option httpchk GET /index.php		#健康检查
      		cookie SERVERID insert indirect nocache	#客户端的 cookie 信息,允许插入serverid到cookie中,此处cookie号不同
      		server php-A 192.168.145.145:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5
      		server php-B 192.168.145.155:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5
      		#cookie 1 标识 serverid 为 1
      		#check inter 2000          检测心跳频率
      		#rise 2     2 次正确认为服务器可用
      		#fall 5      5 次失败认为服务器不可用
      	
      	backend html-server
      		mode http
      		balance roundrobin
      		option httpchk GET /index.html
      		cookie SERVERID insert indirect nocache
      		server html-A 192.168.145.136:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
      		server html-B 192.168.145.137:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5		
      
      

注解:

gloab:全局配置
log:日志配置
maxconn:最大连接限制(优先级低)
uid:用户
gid:组用户
deamon:守护进程运行
nbproc :haproxy进程数,该值的设置应该和服务器的CPU核心数一致,比如设置为 16,即常见的2颗8核心CPU的服务器,即共有16核心,则可以将其值设置为:<=16 ,创建多个进程数,可以减少每个进程的任务队列,但是过多的进程数也可能会导致进程的崩溃。
pidfile /run/haproxy.pid :haproxy进程ID存储位置

defaults:针对(listen和backend块进行设置没如果块中没设置,则使用默认设置)默认配置
log:日志使用全局配置
mode:模式7层LB
maxconn:最大连接数(优先级中)
retries:健康检查。3次连接失败就认为服务不可用
option:服务不可用后的操作,重定向到其他健康服务器
contimeout	:(重传计时器)定义haproxy将客户端!!!请求!!!转发至后端服务器,所等待的超时时长
clitimeout:(向后长连接)haproxy作为客户,和后端服务器之间!!!空闲连接!!!的超时时间,到时候发送fin指令
srvtimeout	:(向前长连接)haproxy作为服务器,和用户之间空闲连接的超时时间,到时候发送fin指令
option abortonclose  :当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接


stats uri /admin?stats:设置统计页面的uri为/admin?stats
stats realm Private lands:设置统计页面认证时的提示内容
stats auth admin:password:设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可
stats hide-version:隐藏统计页面上的haproxy版本信息

frontend:前端配置块。面对用户侧
bind:面对用户监听地址和端口
mode:http模式的LB
log:日志使用全局配置

option httplog:默认日志格式非常简陋,仅包括源地址、目标地址和实例名称,而“option httplog参数将会使得日志格式变得丰富许多,其通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的首部及cookie、“frontend”、“backend”及服务器名称,当然也包括源地址和端口号等。

option http close: 每次请求完毕后,关闭http通道

 acl html url_reg  -i  \.html$  :1. 访问控制列表名称html。规则要求访问以html结尾的url时
 use_backend html-server if  html   :2.如果满足acl html规则,则推送给后端服务器 html-server
 default_backend html-server  3:默认的后端服务器是 html-server

backend html-server:后端服务器名称为  html-server
mode http:模式为7层代理
balance roundrobin:算法为轮训
option httpchk GET /index.html     :允许用http协议检查server 的健康
cookie SERVERID insert indirect nocache:轮询的同时,根据插入的cookie SERVERID  的值来做会话保持,将相同的用户请求,转发给相同的真实服务器。
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5:cookie 3 服务器ID,避免rr算法将客户机请求转发给其他服务器 ,对后端服务器的健康状况检查间隔为2000毫秒,连续2次健康检查成功,则认为是有效的,连续5次健康检查失败,则认为服务器宕机
server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

vim /etc/hosts

192.168.145.136 web1
192.168.145.137 web2
192.168.145.145 php1
192.168.145.155 php2
  • 关于haproxy时间格式配置说明

    • 一些包含了值的参数表示时间,如超时时长。这些值一般以毫秒为单位,但也可以使用其它的时间单位后缀。

        us: 微秒(microseconds),即1/1000000秒;
        ms: 毫秒(milliseconds),即1/1000秒;
        s: 秒(seconds);
        m: 分钟(minutes);
        h:小时(hours);
        d: 天(days);
      

  • 启动HAproxy

 [root@haproxy ~]# systemctl restart haproxy.service
  • 查看日志信息
cat /var/log/messages
  • 查看HAproxy状态
 [root@localhost conf]# firefox http://localhost/haproxy
  • 在客户端访问 HAproxy 测试
 [root@localhost ~]#  elinks --dump http://192.168.145.16
 [root@localhost ~]#  elinks --dump http://192.168.145.16/index.html
 [root@localhost ~]#  elinks --dump http://192.168.145.16/index.php
- 配置域名解析

  - vim /etc/hosts

    192.168.145.16 haproxy

- windows客户端缓存问题,会导致看到的是同一个网站。

  - http://192.168.145.16
  • 5.测试HAproxy状态

    • 客户端浏览器输入http://haproxy地址/haproxy
      在这里插入图片描述
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值