Cluster03 - HAProxy服务器 、 Keepalived+LVS、Keepalived+haproxy

一、Haproxy服务器

1.1 HAProxy概述

1.1.1 HAProxy简介

•  它是免费、快速并且可靠的一种解决方案
•  适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理
•  提供高可用性、负载均衡以及基于TCP和HTTP应用的代理

Cluster03 - HAProxy服务器 、 Keepalived+LVS、Keepalived+haproxy_第1张图片

1.1.2 衡量负责均衡器性能的因素

•  Session rate 会话率
–  每秒钟产生的会话数
•  Session concurrency 并发会话数
–  服务器处理会话的时间越长,并发会话数越多
•  Data rate 数据速率
–  以MB/s或Mbps衡量
–  大的对象导致并发会话数增加
–  高会话数、高数据速率要求更多的内存

1.1.3 HAProxy工作模式

•  mode http
–  客户端请求被深度分析后再发往服务器
•  mode tcp
–  客户端与服务器之间建立会话,不检查第七层信息
•  mode health
–  仅做健康状态检查,已经不建议使用

1.2 HTTP协议解析

1.2.1 HTTP解析

•  当HAProxy运行在HTTP模式下,HTTP请求(Request)和响应(Response)均被完全分析和索引,这样便于创建恰当的匹配规则

1.2.2 HTTP事务模型

•  HTTP协议是事务驱动的
•  每个请求(Request)仅能对应一个响应(Response)
•  常见模型:
–  HTTP close
–  Keep-alive
–  Pipelining

  • HTTP三种事物模型详解

•  HTTP close
–  客户端向服务器建立一个TCP连接
–  客户端发送请求给服务器
–  服务器响应客户端请求后即断开连接
–  如果客户端到服务器的请求不只一个,那么就要不断的
去建立连接
–  TCP三次握手消耗相对较大的系统资源,同时延迟较大

•  Keep-alive
–  一次连接可以传输多个请求
–  客户端需要知道传输内容的长度,以避免无限期的等
待传输结束
–  降低两个HTTP事务间的延迟
–  需要相对较少的服务器资源

•  Pipelining
–  仍然使用Keep-alive
–  在发送后续请求前,不用等前面的请求已经得到回应
–  适用于有大量图片的页面
–  降低了多次请求之间的网络延迟

1.2.3 HTTP头部信息

•  请求头部信息
–  方法:GET
–  URI:/serv/login.php?lang=en&profile=2
–  版本:HTTP/1.1

–  请求头包含许多有关的客户端环境和请求正文的有用
信息,如浏览器所使用的语言、请求正文的长度等

Cluster03 - HAProxy服务器 、 Keepalived+LVS、Keepalived+haproxy_第2张图片

•  响应头部信息
–  版本:HTTP/1.1
–  状态码:200
–  原因:OK

Cluster03 - HAProxy服务器 、 Keepalived+LVS、Keepalived+haproxy_第3张图片

1.3 HAProxy配置实例

1.3.1 项目拓扑图

Cluster03 - HAProxy服务器 、 Keepalived+LVS、Keepalived+haproxy_第4张图片

1台haproxy
192.168.4.10

2台应用服务器
201.1.1.102
201.1.1.103
[root@rs1 ~]# ip a del dev lo 201.1.1.101/32

二、配置HAProxy负载均衡集群

2.1 安装软件

[root@ds ~]# yum install haproxy

2.2 修改配在文件

2.2.1 配置文件说明

•  HAProxy配置参数来源
–  命令行:总是具有最高优先级
–  global部分:全局设置进程级别参数
–  代理声明部分

•  配置文件可由如下部分构成:
–  default
为后续的其他部分设置缺省参数
缺省参数可以被后续部分重置
–  frontend
描述接收客户端侦听套接字(socket)集
–  backend
描述转发链接的服务器集
–  listen
把frontend和backend结合到一起的完整声明

2.2.2 /etc/haproxy/haproxy.cfg参数说明

[root@haproxy haproxy]# vim haproxy.cfg


    
    
    
    
  1. global    
  2.     log     127.0 .0 .1    local2             ###[err    warning    info    debug]    
  3.     chroot    /usr/local/haproxy    
  4.     pidfile    / var/run/haproxy.pid     ###haproxy的pid存放路径
  5. maxconn     4000                     ###最大连接数,默认4000    
  6.     user    haproxy    
  7.      group    haproxy    
  8.     daemon                             ###创建1个进程进入deamon模式运行  
  9. defaults    
  10. mode    hEp                 ###默认的模式mode    {    tcp|hEp|health    }    log    global            ###采用全局定义的日志
  11. opIon    dontlognull         ###不记录健康检查的日志信息
  12. opIon    hEpclose         ###每次请求完毕后主动关闭hEp通道
  13. opIon    hEplog             ###日志类别hEp日志格式
  14. opIon    forwardfor         ###后端服务器可以从HEp    Header中获得客户端ip    
  15. opIon    redispatch         ###serverid服务器挂掉后强制定向到其他健康服务器
  16. Imeout    connect     10000     #如果backend没有指定,默认为10s    
  17. Imeout    client     300000     ###客户端连接超时
  18. Imeout    server     300000     ###服务器连接超时
  19. maxconn         60000         ###最大连接数
  20. retries         3             ###3次连接失败就认为服务不可用,也可以通过后面设置 
  21. listen stats
  22.     bind 0.0 .0 .0: 1080             //监听端口
  23.     stats refresh 30s             //统计页面刷新时间
  24.     stats uri /mystats             //统计页面url密码
  25.     stats realm Haproxy manager      //统计页面密码框上提示文本
  26.     stats auth admin:admin         //统计页面上用户名和密码
  27. listen websrv 0.0 .0 .0: 80             //定义监听后端的web
  28.     cookie SERVERID rewrite
  29.     balance roundrobin
  30.     server web1 192.168 .4 .11: 80 cookie app1inst1 check inter 2000 rise 2 fall 5     // inter 2000 每2s检查一次   rise  2 检测2次成功才认为成功   fall  5  检测5次失败才认为失败
  31. server web2 192.168 .4 .12: 80 cookie app1inst2 check inter 2000 rise 2 fall 5      // inter 2000 每2s检查一次   rise  2 检测2次成功才认为成功   fall  5  检测5次失败才认为失败

2.3 启动服务

[root@svr1    ~]#    systemctl    start    haproxy    

2.4 监控HAProxy状态

2.4.1 在真机浏览器输入  http://192.168.4.10:1080/stats

Cluster03 - HAProxy服务器 、 Keepalived+LVS、Keepalived+haproxy_第5张图片

2.4.2 在真机浏览器输入  http://192.168.4.10  观察轮询现象

Cluster03 - HAProxy服务器 、 Keepalived+LVS、Keepalived+haproxy_第6张图片刷新————>Cluster03 - HAProxy服务器 、 Keepalived+LVS、Keepalived+haproxy_第7张图片     

2.5 开启haproxy日志功能

所有的日志由rsyslog进行管理

为了配置haproxy的日志,需要修改/etc/rsyslog.conf.
支持远端日志功能修改配置文件:
host80 ~]# vim /etc/rsyslog.conf
ModLoadimudp M o d L o a d i m u d p 【 把 这 两 行 注 释 取 消 】 UDPServerRun 514
local2.*        /var/log/haproxy.log
类型.级别

2.5.1 重启rsyslog和haproxy

systemctl restart rsyslog
systemctl restart haproxy

ls  /var/log/haproxy.log

2.6 后端服务器的日志里显示客户端的ip

后端服务器日志要显示客户端真实IP,这个客户端IP是存放在请求头里面的【可以通过curl -I IP地址查看】。而不显示代理服务器IP,可以通过修改httpd配置文件实现。
vim /etc/httpd/conf/httpd.conf
196   LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined

systemctl restart httpd
tail -f /var/log/httpd/access_log

二、keepalived + lvs

2.1 Keepalived概述

Keepalived概述

•  调度器出现单点故障,如何解决?
•  Keepalived实现了高可用集群,这种高可用是通过提供VIP来实现的
•  Keepalived最初是为LVS设计的,专门监控各服务器节点的状态
•  Keepalived后来加入了VRRP(虚拟路由冗余协议)功能,防止单点故障

Keepalived运行原理
•  Keepalived检测每个服务器节点状态
•  服务器节点异常或工作出现故障, Keepalived将故障节
点从集群系统中剔除
•  故障节点恢复后,Keepalived再将其加入到集群系统中。还能实现邮件报警
•  所有工作自动完成,无需人工干预

健康的主机会定时发送多波信号,发送多波信号是为了检测集群关系的,当一个keepalive坏了的时候,另外一个可以夺取对方资源。继续发送多波信号

2.2 Keepalived+LVS拓扑

•  使用Keepalived高可用解决调度器单点失败问题
•  主、备调度器上配置LVS
•  主调度器异常时,Keepalived启用备用调度器调度器

Cluster03 - HAProxy服务器 、 Keepalived+LVS、Keepalived+haproxy_第8张图片

常用的HA集群
keepalived
rhcs
pacemaker + corosync 

1. 环境的准备
rs1:201.1.1.102
rs2:201.1.1.103
ds1:201.1.1.100
ds2:201.1.1.99
vip:201.1.1.101
client:201.1.1.254

2. 在2台调度器(99和100)上安装软件:
[root@ds1 yum.repos.d]# yum install keepalived
[root@ds1 yum.repos.d]#yum -y install ipvsadm.x86_64

健康检测测试:
停掉其中一个real server的httpd服务
HA的测试:
停掉主服务的keepalived服务

vip配置成不抢占,修改配置文件
state BACKUP
nopreempt

LVS+keepalive高可用 
环境准备
client:201.1.1.254
ds1:201.1.1.100
ds2:201.1.1.99
rs1:201.1.1.102
rs2:201.1.1.103

1.装包
[root@ds1 ~]# yum -y install kepalived
[root@ds2 ~]# yum -y install kepalived

2.修改配置文件(99和100)  
1)LVS1调度器设置Keepalived,并启动服务
[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
  notification_email {
    [email protected]                //设置报警收件人邮箱
  }
  notification_email_from ka@localhost    //设置发件人
  smtp_server 127.0.0.1                //定义邮件服务器
  smtp_connect_timeout 30
  router_id  ds1                        //设置路由ID号
}
vrrp_instance VI_1 {
  state BACKUP                           
  nopreempt                            //不抢占VIP
  interface eth0                        //定义网络接口
  virtual_router_id 50                    //主辅VRID号必须一致
  priority 100                          //服务器优先级
  advert_int 1
  authentication {
    auth_type pass
    auth_pass forlvs                       //主辅服务器密码必须一致
  }
  virtual_ipaddress {  201.1.1.101  }
}
virtual_server 201.1.1.101 80 {       //设置VIP为201.1.1.101
  delay_loop 6
  lb_algo wrr                          //设置LVS调度算法为RR
  lb_kind DR                               //设置LVS的模式为DR
  persistence_timeout 1
  protocol TCP
  
  real_server 201.1.1.102 80 {
    weight 1                          //设置权重为1
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
  }
  real_server 201.1.1.103 80 {
    weight 1                          //设置权重为1
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
  }
[root@lvs1 ~]# systemctl start keepalived
[root@lvs1 ~]# ipvsadm -Ln
curl http://201.1.1.101
debug:
1. ping 201.1.1.101
2.  在ds服务器,ipvsadm -ln,如果看不到规则,则:
   1)  检查keepalived配置文件
   2)检查real server的httpd服务是否启动
3. 检查real server是否绑定了vip,以及是否调整了内核参数

三、keepalived + haproxy

haproxy实现的是负载均衡的集群

keepalive实现的是高可用的集群

2台haproxy实现HA
2台应用服务器—httpd
1台client
haproxy1(ds1) – 201.1.1.100
haproxy2(ds2) – 201.1.1.99
vip: 201.1.1.101
rs1:201.1.1.102
rs2:201.1.1.103

2.修改配置文件(99和100)

global_defs {
   router_id directorServer2
}

vrrp_instance VI_1 {
    state SLAVE
    interface eth0
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.4.253
    }

}
通过脚本对haproyx做健康检查:
cat check_haproxy_status.sh 

!/bin/bash

curl -I localhost &> /dev/null
if [ $? -ne 0 ];then
    systemctl stop keepalived
fi

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id ds1
}
vrrp_script check_haproxy {
    script “/etc/keepalived/check_haproxy_status.sh”
    inerval 5
}
vrrp_instance VI_1 {
    state BACKUP
  ………
  ………
    track_script {
        check_haproxy
        }
}

四、集群调度软件对比

4.1 Nginx分析

•  优点
–  工作在7层,可以针对http做分流策略
–  正则表达式比HAProxy强大
–  安装、配置、测试简单,通过日志可以解决多数问题
–  并发量可以达到几万次
–  Nginx还可以作为Web服务器使用
•  缺点
–  仅支持http、https、mail协议,应用面小
–  监控检查仅通过端口,无法使用url检查

4.2 LVS分析

•  优点
–  负载能力强,工作在4层,对内存、CPU消耗低
–  配置性低,没有太多可配置性,减少人为错误
–  应用面广,几乎可以为所有应用提供负载均衡
•  缺点
–  不支持正则表达式,不能实现动静分离
–  如果网站架构庞大,LVS-DR配置比较繁琐

4.3 HAProxy分析

•  优点
–  支持session、cookie功能
–  可以通过url进行健康检查
–  效率、负载均衡速度,高于Nginx,低于LVS
–  HAProxy支持TCP,可以对MySQL进行负载均衡
–  调度算法丰富
•  缺点
–  正则弱于Nginx
–  日志依赖于syslogd,不支持apache日志

你可能感兴趣的:(linux运维工程师)