haproxy+keepalived

1. haproxy[适合压力大的web站点]

1.1介绍

HAProxy则更加专注于提供高性能TCP和HTTP反向代理和负载均衡能力
HAProxy 是一款TCP/HTTP 反向代理负载均衡服务器软件,可工作在OSI模型中的四层传输层以及七层应用层。HAProxy特别适用于那些负载压力大的web站点,这些站点通常需要会话保持或七层处理。HAProxy运行在时下的服务器上,可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全地整合进现有的系统架构中,同时可以保护web服务器不被暴露到网络上。HAproxy允许用户定义多组服务代理,代理由前端和后端组成,前端定义了服务监听的IP及端口,后端则定义了一组服务器及负载均衡的算法。通过服务代理将流量由前端负载均衡至后端服务器节点上。

1.2 核心功能

  • 负载均衡、会话保持
    在多个服务器间实现四层或者七层负载均衡,支持多种负载均衡算法,并且根据Hash或者cookies方式实现会话保持
  • 健康检查
    支持TCP/HTTP两种后端服务器健康检查模式。
  • 统计监控
    接受访问特定端口实现服务监控,并提供代用用户认证机智的服务状态报告页面
  • SSL卸载
    可以解析HTTPS报文并将请求解密为HTTP向后端服务器传输。
  • 其他功能
    在HTTP请求或响应报文中添加、修改、删除首部信息;HTTP请求重写与重定向;根据访问控制路由或阻断请求。

3.2 负载均衡调度算法

调度算法可以在haproxy配置文件中设置。支持配置多组后端服务组,每个组可以分别之定义中调度算法。以下是HAproxy支持的集中调度算法。
1.轮询
带有权重的轮询调度算法。支持权重的运行时调整,支持慢启动(在刚启动时缓慢接收大量请求),仅支持最大4095个后端活动主机。
2.静态轮询
静态轮询算法,不支持权重的运行时调整及慢启动,但后端主机数量无限制。
3.最少连接
4.源地址哈希
5.URI哈希
6.URL参数哈希
7.HTTP首部哈希

2.keepalived

2.1 介绍

Keepalived既可以实现负载均衡也可以实现高可用。
Keepalived工作在OSI模型中的四层传输层。最初是为了管理并监控linux虚拟服务器(LVS)集群中各服务节点的状态,后来有加入路由冗余协议(VRRP)来实现高可用功能。
Keepalived同时运行于主服务器(Master)和备服务器(Backup)之上,所有的服务器上运行的Keepalived之间通过VRRP交互,VRRP设计目的是为了解决静态路由单点故障问题,保证个别节点宕机时,整个网络可以不间断的运行。

2.2 核心功能

  • 管理LVS负载均衡软件
    Keepalived最初是专为解决LVS的问题而诞生的。因此,Keepalived和LVS可紧密结合。
  • 实现对LVS集群节点健康检查
    当LVS集群中某个节点服务器发生故障时,Keepalived服务会自动将失效的节点从正常队列中剔除,并将请求调度到别的正常的节点服务器上,从而保证用户访问不受影响。当故障节点被修复后,Keepalived服务又会自动切换回来。
  • 网络服务高可用功能
    Keepalived可以实现任意两台主机之间,如Master服务器和Backup服务器间的故障转移和自动切换。假设某个服务是不能停机的,如LVS负载均衡、Nginx反向代理服务器等,可以利用Keepalived保证其高可用性。

2.3高可用原理(matser和backup节点之前心跳检测)

keepalived的高可用服务的故障切换转移是通过VRRP机制来实现的。在Keepalived服务正常运行时,Master节点会不断向Backup节点发送(多播方式)心跳信息,用以通知Master节点的存活状态。当Master节点发生故障时,就无法发送心跳信息,Backup节点也就无法检测到来自Master的心跳信息,于是调用自身的接管程序,接管Master的资源和服务。当Master恢复时,Backup又会释放Master故障时自身接管的资源和服务,恢复到原来的备用角色。无论Master如何切换,对外都应该提供相同的服务IP地址,该IP也称作虚拟地址VIP。客户端并不需要因Master的改变而修改自己的配置,对他们来说这种切换是透明的。

3.haproxy+keepalived架构

由于HAProxy会存在单点故障问题,可以由Keepalived来为HAProxy提供高可用服务,而HAProxy提供四层或七层高性能负载均衡及反向代理服务,两者共同实现高可用负载均衡,结构如图1所示。
在这里插入图片描述

4.安装与配置

4.1安装相关软件

yum install -y keepalived  haproxy

4.2keepalived高可用配置[全局+vrrp实例段+脚本段]

vi /etc/keepalived/keepalived.conf

1.全局段定义(global_defs)
全局段定义允许用户设置全局相关信息,例如通知信息、关键参数配置等,该段配置在Master节点和Backup节点上应当一致。

global_defs {
   notification_email {
     sysadmin@example.com  
   }
   notification_email_from  noreply@example.com  
   smtp_server  127.0.0.1  
   smtp_connect_timeout  60  
   vrrp_mcast_group4  224.0.0.18
}

notification_email定义报警邮件地址,当服务切换时发送报警邮件。
notification_email_from定义发件人信息,
smtp_server和smtp_connect_timeout分别定义了SMTP服务器及相应的连接超时时间,
vrrp_mcast_group4为VRRP IPv4多播地址,默认为224.0.0.18,如果同一局域网内有多组Keepalived时需要指定不同多播地址。

2.VRRP实例段定义(vrrp_instance)
这部分主要用来定义具体服务的实例配置,包括Keepalived主备状态、接口、优先级、认证方式和VIP信息等,每个VRRP实例可以认为是Keepalived服务的一个实例或作为一个业务服务,在一组Keepalived服务配置中,VRRP实例可以有多个。
注意,存在于Master节点中的VRRP实例配置在Backup节点中也要有一致的配置(除了节点角色、优先级不同),这样才能实现故障切换转移。

vrrp_instance R1{
state  MASTER  
interface  eth0  
virtual_router_id  50
priority  100  
    advert_int  1
    authentication {
        auth_type PASS
        auth_pass passwd
    }
    virtual_ipaddress {
        10.230.137.100
}
    track_script {
        chk_haproxy
    }
nopreempt
preempt_delay 2
}

vrrp_instance配置段定义了一个VRRP实例并设定实例名称;

state设定初始VRRP实例角色,配置先要为该实例所在的Keepalived服务器设定其角色,在Master服务器上设置为“MASTER”,在Backup服务器上则设置为“BACKUP”;

priority优先级设定,范围1-254,数字越大,表示实例优先级越高,在同一个VRRP实例里,Master节点优先级要高于Backup节点;

virtual_router_id虚拟路由ID标识,范围0-255,Master和Backup节点配置中相同VRRP实例的虚拟路由ID标识必须一致,否则将出现脑裂问题;

advert_int用来同步通知间隔,Master节点和Backup节点之间通信检查的时间间隔,单位是秒。

角色相关信息设定完毕后就要开始配置VIP并绑定至指定的网络接口上,在virtual_ipaddress中配置VIP,可以配置多个VIP,VIP将绑定至interface参数配置的网络接口上。

authentication认证配置段作用于同一个VRRP实例的MASTER和BACKUP之前的通信,具体的配置内容有auth_type认证类型,auth_pass认证密码,认证类型有PASS(Simple Passwd)和AH(IPSEC),官方推荐PASS,验证密码为明文方式,最多8位。同一个VRRP实例的MASTER和BACKUP使用相同的密码才能正常通信。

当添加nopreemp关键字时表示设置高可用模式为非抢占模式,如果去掉此关键字则为默认的抢占模式。抢占模式是指当高优先级节点恢复后会抢占低优先级节点成为MASTER,非抢占模式允许低优先级节点继续担任MASTER,preempt_delay用来设置抢占延迟,单位秒,范围0~1000,发现低优先级MASTER后多少秒开始抢占。

4.3 HAproxy相关配置

vim  /etc/haproxy/haproxy.cfg

1.全局段定义(global)
全局参数配置将配置于所有HAproxy服务器上

global                               
log  /dev/log local0 info             
chroot    /var/lib/haproxy
pidfile    /var/run/haproxy.pid
maxconn     4000
user      haproxy                      
group     haproxy                        
daemon    

log设置全局日志配置,语法为log

,上例中指定使用本机上的syslog服务中的local0日志设备,记录日志等级为info的日志。
chroot设置HAProxy工作目录,
pidfile设置HAProxy的pid文件位置,
maxconn设置每个HAProxy进程可用的最大连接数,
user及group设置HAProxy进程所属的用户及用户组,
daemon关键字表示以守护进程方式运行haproxy。

2.默认段定义(defaults)
默认段的作用是为后续前端代理及后端代理设置默认值

defaults
mode      http    
log        global
option      httplog
option      dontlognull  
    option      http-server-close  
    option forwardfor   except 127.0.0.0/8 
    option     redispatch  
    retries     3 
timeout http-request        10s  
timeout queue             1m
timeout connect           10s 
timeout client             1m 
timeout server             1m
timeout http-keep-alive      10s
timeout check             10s

mode表示HAproxyd的工作模式,设置TCP时为4层模式,设置https时为7层模式。log设置日志输出方式,配置为global表示将采用全局段log的配置。
option httplog 关键字表示记录HTTP详细日志,包括HTTP请求、session状态、连接数等。
option dontlognull关键字表示日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接,官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要设置该参数,因为设置后互联网上的恶意扫描或其他动作就不会被记录下来。

option http-server-close关键字表示每次请求完毕后主动关闭HTTP通道。

option forwardfor关键字表示应用程序想记录发起请求的客户端的IP地址,需要在HAProxy上配置此选项,这样HAProxy会把客户端的IP信息发送给服务器,在HTTP请求中添加"X-Forwarded-For"字段启用 X-Forwarded-For,在requests头部插入客户端IP发送给后端的server,使后端server获取到客户端的真实IP。

option redispatch关键字表示当使用了cookie时,HAProxy将会将其请求的后端服务器信息插入到cookie中,以保证会话的持久性,如果后端的服务器服务不可用,但客户端的cookie是不会刷新的,设置此参数会将客户的请求强制定向到另外一个后端服务器上,以保证服务的正常。

retries定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用。

timeout为前缀的关键字指定了一些关于请求、连接、响应的最大超时时间,单位默认为毫秒,也可以加入后缀s(秒),m(分钟),h(小时),d(天)来指定。http-request设置HTTP请求超时时长,queue设置一个请求在队列里的超时时间,connect设置最大与服务端建立连接的时长,client设置客户端最大非活动时长,server设置服务端最大非活动时长,http-keep-alive设置最大等待新请求的空闲时长,check设置检测超时时长。

3.前端代理定义(frontend)
前端代理配置定义一个服务监听,用于接收用户请求并将请求转发给后端代理,可以定义多个前端代理。

frontend  main
mode  http
bind  :80                      
    default_backend  nginx

frontend前端代理配置段定义一组前端服务并启动服务监听,同时设置代理名称。
mode设置工作模式,如果此参数未被设定则引用默认配置段配置的模式。
bind设置监听地址及端口,地址为空或者表示绑定至所有服务器的网络接口。
default_backend指定默认后端代理进行流量转发。

4.后端代理定义(backend)
用于接收前端代理

4.4 实际环境中haproxy和keepalived配置

master-server:

vi /etc/haproxy/haproxy.cfg
listen webha80
bind 0.0.0.0:80
mode http
option httplog
log global
maxconn 3000
balance roundrobin
#配置nginx-web服务器
server node1 10.67.51.234:80 weight 1 rise 2 fall 3
server node2 10.67.51.235:80 weight 2 rise 2 fall 3
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id hk1
}

vrrp_instance VI_1 {
 state MASTER
 interface ens160
 virtual_router_id 50
 mcast_src_ip 10.67.51.239
 priority 100
 advert_int 1

    virtual_ipaddress {
      10.67.51.254
    }
 nopreempt
}

backup-server:

vi    /etc/haproxy/haproxy.cfg
listen webha80
bind 0.0.0.0:80
mode http
option httplog
log global
maxconn 3000
balance roundrobin
server node1 10.67.51.234:80 weight 1 rise 2 fall 3
server node2 10.67.51.235:80 weight 2 rise 2 fall 3
vi /etc/keepalived/keepalived.conf
global_defs {
   router_id hk2
}

vrrp_instance VI_1 {
 state BACKUP
 interface ens160
 virtual_router_id 50
 mcast_src_ip 10.67.51.244
 priority 90
 advert_int 1

    virtual_ipaddress {
      10.67.51.254
    }
 nopreempt

4.5 启动相关服务

systemctl start keepalived
systemctl enable keepalived

4.6 测试

1.通过VIP 访问web,轮询访问
在这里插入图片描述

在这里插入图片描述

2.测试
将其中一台master-server down掉,测试VIP 会不会漂移至backup上,并且访问web页面也是正常。
测试成功

3.测试将master重启之后,VIP 会不会继续飘到master上。
会的

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值