haproxy+keepalived应用实战

1、四层与七层负载均衡的区别

所谓的四层就是 ISO 参考模型中的第四层。四层负载均衡也称为四层交换机,它主要是通过分析 IP 层及 TCP/UDP 层的流量实现的基于 IP 加端口的负载均衡。常见的基于四层的负

载均衡器有 LVS、 F5 等。以常见的 TCP 应用为例,负载均衡器在接收到第一个来自客户端的 SYN请求时,会通过设定的负载均衡算法选择一个最佳的后端服务器,同时将报文中目标 IP地址修改为后端服务器IP,然后直接转发给该后端服务器,这样一个负载均衡请求就完成了。从这个过程来看,一个TCP连接是客户端和服务器直接建立的,而负载均衡器只不过完成了一个类似路由器的转发动作。在某些负载均衡策略中,为保证后端服务器返回的报文可以正确传递给负载

均衡器,在转发报文的同时可能还会对报文原来的源地址进行修改

同理,七层负载均衡器也称为七层交换机,位于 OSI 的最高层,即应用层,此时负载均衡器支持多种应用协议,常见的有 HTTP、SMTP等。七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为“内容交换器”。比如,对于 Web服务器的负载均衡,七层负载均衡器不但可以根据“ IP+端口”的方式进行负载分流,还可以根据网站的 URL、访问域名、浏览器类别、语言等决定负载均衡的策略。例如,有两台

Web 服务器分别对应中英文两个网站,两个域名分别是 A、 B,要实现访问 A 域名时进入中文网站,访问 B 域名时进入英文网站,这在四层负载均衡器中几乎是无法实现的,而七层负

载均衡可以根据客户端访问域名的不同选择对应的网页进行负载均衡处理。常见的七层负载

均衡器有 HAproxy、 Nginx 等。这里仍以常应用为例,由于负载均衡器要获取到报文的内容,因此只能先代替后端服务器和客户端建立连接,接着,才能收到客户端发送过来的报文内容,然后再根据该

报文中特定字段加上负载均衡器中设置的负载均衡算法来决定最终选择的内部服务器。纵观整个过程,七层负载均衡器在这种情况下类似于一个代理服务器。

七层负载均衡代理实现原理

对比四层负载均衡和七层负载均衡运行的整个过程,可以看出,在七层负载均衡模式下,负载均衡器与客户端及后端的服务器会分别建立一次 TCP 连接,而在四层负载均衡模式下,

仅建立一次 TCP 连接。由此可知,七层负载均衡对负载均衡设备的要求更高,而七层负载均衡的处理能力也必然低于四层模式的负载均衡。

环境规划 centos6.7

172.16.80.132   haproxy+keepalived  master   vip  172.16.80.199

172.16.80.126   haproxy+keepalived  slave

172.16.80.125   提供web测试(apache  8080      nginx 80)

172.16.80.128   作为客户端访问测试

2、haproxy  keepalived 安装

[[email protected] ansible]# tree
.
├── hosts
├── roles
│ ├── haproxy
│ │ ├── defaults
│ │ ├── files
│ │ │ ├── haproxy-1.5.4-3.el6.x86_64.rpm
│ │ │ └── install_haproxy.sh
│ │ ├── handles
│ │ │ └── main.yml
│ │ ├── meta
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── templates
│ │ │ └── haproxy.cfg.j2
│ │ └── vars
│ ├── keepalived-master
│ │ ├── defaults
│ │ ├── files
│ │ │ ├── install_keepalived_master.sh
│ │ │ ├── keepalived-1.2.13-5.el6_6.x86_64.rpm
│ │ │ ├── lm_sensors-libs-3.1.1-17.el6.x86_64.rpm
│ │ │ └── net-snmp-libs-5.5-57.el6_8.1.x86_64.rpm
│ │ ├── handles
│ │ │ └── main.yml
│ │ ├── meta
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── templates
│ │ │ └── keepalived.conf.j2
│ │ └── vars
│ ├── keepalived-slave
│ │ ├── defaults
│ │ ├── files
│ │ │ ├── install_keepalived_slave.sh
│ │ │ ├── keepalived-1.2.13-5.el6_6.x86_64.rpm
│ │ │ ├── lm_sensors-libs-3.1.1-17.el6.x86_64.rpm
│ │ │ └── net-snmp-libs-5.5-57.el6_8.1.x86_64.rpm
│ │ ├── handles
│ │ │ └── main.yml
│ │ ├── meta
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── templates
│ │ │ └── keepalived.conf.j2
│ │ └── vars
│ └── zabbix-agent
│     ├── defaults
│     ├── files
│     │ ├── install_zabbix_agent.sh
│     │ ├── zabbix-agent-3.0.4-1.el6.x86_64.rpm
│     │ ├── zabbix-release-3.0-1.el7.noarch.rpm
│     │ └── zabbix.repo
│     ├── handlers
│     │ └── main.yml
│     ├── meta
│     ├── tasks
│     │ └── main.yml
│     ├── templates
│     │ └── zabbix_agentd.conf.j2
│     └── vars
│         └── all
├── site.yml
└── zabbix_host.yml

33 directories, 30 files

[[email protected] ansible]# ls
hosts  roles  site.yml  zabbix_host.yml
[[email protected] ansible]# cat hosts 
[zabbix-agent]
172.16.80.132
172.16.80.126

[haproxy]
172.16.80.132
172.16.80.126

[keepalived-master]
172.16.80.132

[keepalived-slave]
172.16.80.126
[[email protected] ansible]# cat site.yml 
- name: install zabbix agent
  hosts: zabbix-agent
  remote_user: root
  roles:
    - zabbix-agent

- name: install haproxy
  hosts: haproxy
  remote_user: root
  roles:
    - haproxy

- name: install keepalived
  hosts: keepalived-master,keepalived-slave
  remote_user: root
  roles:
    - keepalived-master
    - keepalived-slave

[[email protected] ansible]# ansible-playbook -i hosts site.yml 

PLAY [install zabbix agent] ****************************************************

TASK [setup] *******************************************************************
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [zabbix-agent : cp zabbix-agent-3.0.4-1.el6.x86_64.rpm to all client] *****
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [zabbix-agent : cp install_zabbix_agent.sh to all client] *****************
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [zabbix-agent : execute scripts to install zabbix agent] ******************
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [zabbix-agent : configure zabbix agent conf] ******************************
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [zabbix-agent : Start zabbix agent] ***************************************
ok: [172.16.80.132]
ok: [172.16.80.126]

PLAY [install haproxy] *********************************************************

TASK [setup] *******************************************************************
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [haproxy : cp haproxy-1.5.4-3.el6.x86_64.rpm to all client] ***************
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [haproxy : cp install_haproxy.sh to all client] ***************************
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [haproxy : execute scripts to install zabbix agent] ***********************
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [haproxy : configure haproxy conf] ****************************************
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [haproxy : Start haproxy] *************************************************
ok: [172.16.80.132]
ok: [172.16.80.126]

PLAY [install keepalived] ******************************************************

TASK [setup] *******************************************************************
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [keepalived-master : cp keepalived-1.2.13-5.el6_6.x86_64.rpm to all client] ***
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [keepalived-master : cp lm_sensors-libs-3.1.1-17.el6.x86_64.rpmm to all client] ***
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [keepalived-master : cp net-snmp-libs-5.5-57.el6_8.1.x86_64.rpm to all client] ***
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [keepalived-master : cp install_keepalived_master.sh to all client] *******
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [keepalived-master : execute scripts to install zabbix agent] *************
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [keepalived-master : configure keepalived conf] ***************************
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [keepalived-master : Start keepalived] ************************************
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [keepalived-slave : cp keepalived-1.2.13-5.el6_6.x86_64.rpm to all client] 
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [keepalived-slave : cp lm_sensors-libs-3.1.1-17.el6.x86_64.rpmm to all client] ***
ok: [172.16.80.126]
ok: [172.16.80.132]

TASK [keepalived-slave : cp net-snmp-libs-5.5-57.el6_8.1.x86_64.rpm to all client] ***
ok: [172.16.80.132]
ok: [172.16.80.126]

TASK [keepalived-slave : cp install_keepalived_slave.sh to all client] *********
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [keepalived-slave : execute scripts to install zabbix agent] **************
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [keepalived-slave : configure keepalived conf] ****************************
changed: [172.16.80.132]
changed: [172.16.80.126]

TASK [keepalived-slave : Start keepalived] *************************************
ok: [172.16.80.132]
ok: [172.16.80.126]

PLAY RECAP *********************************************************************
172.16.80.126              : ok=27   changed=12   unreachable=0    failed=0   
172.16.80.132              : ok=27   changed=12   unreachable=0    failed=0

3、实际配置

主节点
[[email protected]_master keepalived]# cat /etc/haproxy/haproxy.cfg
# Global settings
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the ‘listen‘ and ‘backend‘ sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    retries                 3
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  www
    bind *:80
    mode http
    option httplog
    option forwardfor
    option httpclose
    log global
    default_backend             app1

backend app1
    mode http
#    option redispatch
    option abortonclose
    balance     roundrobin
    option httpchk GET /
    server api-gw-1 172.16.80.125:80 check inter 20 rise 2 fall 5
    server api-gw-2 172.16.80.125:8080 check inter 2000 rise 2 fall 5

listen stats
  mode http
  bind 0.0.0.0:8888
  stats enable
  stats refresh 10s
  stats auth martin:123456
  stats uri /admin
  stats realm Global\ statistics
  
  
  
  [[email protected]_master keepalived]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id haproxy_master
}

vrrp_script check_haproxy {

#   script "killall -0 haproxy"
script "/etc/keepalived/check_haproxy.sh"
   interval 3
}

vrrp_instance haproxy_ha {
    state BACKUP
    interface eth0
    virtual_router_id 80
    priority 100
    advert_int 2
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
 
    check_haproxy
}

    virtual_ipaddress {
       172.16.80.199/24 
    }
}

[[email protected]_slave keepalived]# cat check_haproxy.sh 
#!/bin/bash

A=`ps -C haproxy --no-header |wc -l`

if [ $A -eq 0 ];then
  /etc/init.d/haproxy start
  sleep 3
 
  if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
    /etc/init.d/keepalived stop
  fi

fi

备用节点

[[email protected]_slave keepalived]# cat /etc/haproxy/haproxy.cfg
# Global settings
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the ‘listen‘ and ‘backend‘ sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    retries                 3
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  www
    bind *:80
    mode http
    option httplog
    option forwardfor
    option httpclose
    log global
    default_backend             app1

backend app1
    mode http
#    option redispatch
    option abortonclose
    balance     roundrobin
    option httpchk GET /
    server api-gw-1 172.16.80.125:80 check inter 20 rise 2 fall 5
    server api-gw-2 172.16.80.125:8080 check inter 2000 rise 2 fall 5

listen stats
  mode http
  bind 0.0.0.0:8888
  stats enable
  stats refresh 10s
  stats auth martin:123456
  stats uri /admin
  stats realm Global\ statistics
  
  
  [[email protected]_slave keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id haproxy_slave
}

vrrp_script check_haproxy {

#########   script "killall -0 haproxy"
script "/etc/keepalived/check_haproxy.sh"
   interval 3
}

vrrp_instance haproxy_ha {
    state BACKUP
    interface eth0
    virtual_router_id 80
    priority 80
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
 
    check_haproxy
}

    virtual_ipaddress {
       172.16.80.199/24 
    }
}

浏览器访问测试

在客户端访问vip地址测试

时间: 2024-08-29 08:22:12

haproxy+keepalived应用实战的相关文章

haproxy+keepalived实现高可用负载均衡web集群

haproxy+keepalived实现高可用负载均衡web集群 负载均衡集群的概念 负载均衡是设计分布式系统架构必须要考虑的因素之一,它指的是通过调度分发的方式尽可能将"请求"."访问"的压力负载平均分摊到集群中的各个节点,避免有些节点负载太高导致访问延迟,而有些节点负载很小导致资源浪费.这样,每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间的动态分配,以实现负载均衡,从而为企业提供更高性能,更加稳定的系统架构解决方案. 高可用集群的概念

基于HAProxy+Keepalived高可用负载均衡web服务的搭建

一 原理简介 1.HAProxyHAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进当前的架构中, 同时可以保护web服务器不被暴露到网络上.2.KeepalivedKeepalived 是一个基于VRRP协议来实现的LVS服务高

HAproxy+Keepalived负载均衡-高可用web站

haproxy+keepalived负载均衡高可用web站   OS IP 子网掩码 路由网关 Centos6.6 HAproxy Keepalived Eth0:192.168.26.210 255.255.252.0 192.168.25.3 VIP:192.168.27.210 Centos6.6 HAporxy Keepalived Eth0:192.168.26.211 255.255.252.0 192.168.25.3 VIP:192.168.27.210 Centos6.6(WE

Haproxy+keepalived 高可用负载

Haproxy+keepalived+apache 一.拓扑图: 二.编译安装haproxy(两台机器一样安装) 解压:tar zxvf haproxy-1.6.4.tar.gz 编译:注意:下边的等号前边的参数必须大写 cd haproxy-1.6.4 make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy make install PREFIX=/usr/local/haproxy 安装后,创建配置文件和启动文件 mkdir -p

高性能业务架构解决方案(HAproxy+Keepalived)

高性能业务架构解决方案(HAproxy+Keepalived) 一. 概况 1.1 应用场景 1.2 LVS/Nginx/HAProxy特点 二. 相关理论 2.1 Keepalived工作原理 2.2 HAproxy工作原理 三. 架构拓扑 四. 资源规划 五. 实施部署 5.1初始化配置 5.2 HAproxy配置 5.3 Keepalived部署 5.3.1 Keepalived的安装 5.3.2 配置keepalived 5.3.3 检测脚本 5.4 后端WEB服务器 5.5 测试 5.

haproxy+keepalived搭建WEB群集

haproxy+keepalived搭建WEB群集 前面已经学习了两款web群集软件Nginx和lvs,他们都有各自的特点,本章将介绍另外一款群集软件haproxy,我们将对其的调度算法.群集环境.以及群集的配置展开讲解. haporxy是目前比较流行的调度工具,之前学习的lvs配置相对来说比较复杂,nginx不能实现健康检查性能也没有haproxy好.官方站点位于htp://haproxy.1wt.eu/. 今天我们将介绍使用haproxy搭建一套web群集 一.案例概述 1.案例前知识点 1

HAProxy + Keepalived + Flume 构建高性能高可用分布式日志系统

一.HAProxy简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理. HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上. 二.Keepalived简介 它是一个基于VRRP协议来实现的WEB服务高可用方案,

Haproxy+keepalived高可用、负载均衡安装部署方案

1     环境说明 前端两台haproxy+keepalived互为主从,提供高可用:另外基于不同域名访问不同的虚拟ip实现负载均衡 1.1     环境描述 服务器A(主.从):eth0:10.241.51.245   eth1:192.168.1.9 服务器B(从.主):eth2:10.241.51.246   eth1:192.168.1.10 服务器C(web01):eth0:10.241.51.247 服务器D(web02):eth0:10.241.51.248 VIP1:10.24

haproxy+keepalived

haproxy+keepalived搭建web群集 一.实验环境 二.实验步骤 haproxy+keepalived 1配置 IP:192.168.1.10 #yum   -y  install pcre-devel  zlib-devel bzip2-devel kernel-devel  openssl-devel popt-devel  zlib-devel #tar zxf  keepalived-1.2.13.tar.gz         解压源码包 #cd keepalived-1.