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

一、Haproxy简介

人们熟知的软件负载均衡如LVS、HAProxy,各方面性能不亚于硬件负载均衡,HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者***请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

HAProxy的负载均衡算法现在也越来越多了,具体有如下8种:

①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;

②static-rr,表示根据权重,建议关注;

③leastconn,表示最少连接者先处理,建议关注;

④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法

⑤ri,表示根据请求的URI;

⑥rl_param,表示根据请求的URl参数‘balance url_param‘ requires an URL parameter name;

⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

二、拓扑图

三、安装

 1、安装配置haproxy A

[[email protected] ~]# yum -y install haproxy

[[email protected] ~]# cd /etc/haproxy/

[[email protected] haproxy]# cp haproxy.cfg haproxy.cfg.bak    ##备份

[[email protected] haproxy]# vim haproxy.cfg

global        #全局配置

#    local2.*                       /var/log/haproxy.log

#

log         127.0.0.1 local2        #日志功能,要开启日志服务

chroot      /var/lib/haproxy

pidfile     /var/run/haproxy.pid

maxconn     4000

user        haproxy

group       haproxy

daemon                            #让haproxy以守护进程的方式工作于后台

# turn on stats unix socket

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       #指定haproxy的工作模式

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

maxconn                 3000

#---------------------------------------------------------------------

# main frontend which proxys to the backends

#---------------------------------------------------------------------

listen stats

mode http

bind 0.0.0.0:1080             #绑定端口

stats enable                  #开启stats功能

stats hide-version            # 隐藏版本号

stats uri  /admin?status      #通过什么样的URL访问

stats realm Haproxy\ Statistics    #认证注释信息

stats auth  90sec:admin            #认证放松(user:passwd)

stats admin if TRUE              #如果认证通过,则赋予权限

acl allow src 192.168.0.0/24     #访问控制

tcp-request content accept if allow

tcp-request content reject

frontend proxy          #前端代理

bind *:80            #监听端口

mode http

log global

option httpclose

option logasap

option dontlognull

capture request  header Host len 20

capture request  header Referer len 60

acl url_static       path_beg       -i /static/images/javascript/stylesheets

acl url_static       path_end       -i .jpg .gif .png .css .js .html

use_backend static_servers if url_static

default_backend dynamic_servers

backend static_servers     #后端静态web

balance source             #算法调度

server web1 172.16.36.130:80 check maxconn 6000

backend dynamic_servers    #后端动态调度

balance source

server web2 172.16.36.131:80 check maxconn 6000

配置日志

[[email protected] ~]# vim /etc/rsyslog.conf

$ModLoad imtcp    #取消注释

$InputTCPServerRun 514    #取消注释

添加一下行

local2.*                                                /var/log/haproxy.log

[[email protected] ~]# service rsyslog restart

Shutting down system logger:                               [  OK  ]

Starting system logger:                                    [  OK  ]

2、安装keepalived

[[email protected] src]# tar xf keepalived-1.2.12.tar.gz

[[email protected] src]# cd keepalived-1.2.12

[[email protected] keepalived-1.2.12]# ./configure --prefix=/usr/local/keepalived --with-dir=/usr/src/kernels/*/

[[email protected] keepalived-1.2.12]# make && make install

[[email protected] keepalived-1.2.12]# mkdir /etc/keepalived

[[email protected] keepalived-1.2.12]# cp -f keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/

[[email protected] keepalived-1.2.12]# cp -f keepalived/etc/init.d/keepalived.init  /etc/init.d/keepalived

[[email protected] keepalived-1.2.12]# cp -f keepalived/etc/init.d/keepalived.sysconfig /etc/sysconfig/keepalived

[[email protected] keepalived-1.2.12]# cp -f /usr/local/keepalived/sbin/keepalived /sbin/

[[email protected] keepalived-1.2.12]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

[email protected]          ##邮件通知

}

notification_email_from [email protected]

smtp_server 127.0.0.1       ##使用本机邮件服务

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_scrip chk_haproxy {        ##判断haproxy服务状态

script "killall -0 haproxy"

interval 1

weight 2

}

vrrp_instance VI_1 {

state MASTER          #在A 上是主 ,在B 上是备

interface eth0

virtual_router_id 200   # 路由ID

priority 100             #优先级

advert_int 1

authentication {         #路由之间认证方式

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.83.100/24 dev eth0 label eth0:0   #VIP

}

track_scripts {         #追踪脚本

chk_haproxy

}

track_interface {        #追踪端口

eht0

}

notify_master "/etc/keepalived/notify.sh master"       #通知脚本

notify_backup "/etc/keepalived/notify.sh backup"

notify_fault "/etc/keepalived/notify.sh fault"

}

vrrp_instance VI_2 {

state BACKUP       #在A 上面是备,在B 上是主

interface eth0

virtual_router_id 51

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.83.200/24 dev eth0 label eth0:1

}

track_scripts {

chk_haproxy

}

track_interface {

eth0

}

}

为keepalived提供脚本服务

#!/bin/bash

#Author: MageEdu <[email protected]>    #脚本出处

#description: An ample of notify script

vip=192.168.83.100

contact=‘[email protected]‘

notify() {

mailsubject="`hostname` to be $1: $vip floating"

mailbody="`date ‘+%F %H:%M:%S‘`: vrrp transition, `hostname` changed to be $1"

echo$mailbody | mail -s "$mailsubject"$contact

}

case"$1"in

master)

notify master

/etc/rc.d/init.d/haproxystart

exit0

;;

backup)

notify backup

/etc/rc.d/init.d/haproxystop

exit0

;;

fault)

notify fault

/etc/rc.d/init.d/haproxystop

exit0

;;

*)

echo‘Usage: `basename $0` {master|backup|fault}‘

exit1

;;

esac

配置haproxy B

因为haproxy A 和haproxy B 配置文件相同,所以发送一份即可

[[email protected] /]#scp /etc/haproxy/haproxy.cfg 192.168.83.133:/etc/haproxy/haproxy.cfg

配置heepalived

! Configuration File for keepalived

global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_scrip chk_haproxy {

script "killall -0 haproxy"

interval 1

weight 2

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 200

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.83.100 dev eth0 label eth0:0

}

track_scripts {

chk_haproxy

}

track_interface {

eht0

}

}

vrrp_instance VI_2 {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.83.200/24 dev eth0 label eth0:1

}

track_scripts {

chk_haproxy

}

track_interface {

eht0

}

notify_master "/etc/keepalived/notify.sh master"

notify_backup "/etc/keepalived/notify.sh backup"

notify_fault "/etc/keepalived/notify.sh fault"

}

注意:

notify_master "/etc/keepalived/notify.sh master"

notify_backup "/etc/keepalived/notify.sh backup"

notify_fault "/etc/keepalived/notify.sh fault"

3个状态分别要执行的脚本,只能放在 MASTER中,原因是:因为是互为主从,每个主的都会有个另外一个主的从,如果

把这 “3个状态执行脚本” 写入到从的区域中,那么另外一个主的从状态就会执行这个脚本,因为就会停掉所要高可用的

程序,这就造成了,两个VIP全部转移到其中一个服务器上去。

keepalived提供脚本服务相同,所以只需修改VIP 地址即可。日志配置方式也相同,参照上面即可。

四、测试keeplived功能

二个节点服务正常时

关闭haproxy A 上的keepalived看VIP 是否漂移


五、配置后端web服务

为web1 静态配置,并上传一张图片

为web2动态配置

# yum install -y php php-mysql

# vim /var/www/html/index.php

<h1>WebCome to WEB2</h1>

<?php

phpinfo();

?>

# service httpd start

Starting httpd:                                           [  OK  ]

时间: 2024-10-08 15:00:49

keepalived + haproxy 实现web的高可用负载均衡的相关文章

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡 今天是2017年的第一天,昨天也就是2016年的最后一天,我尝试部署了Centos7+Nginx+Keepalived实现WEB服务的高可用负载均衡服务,终于在2017年的第一天前完成了,所以在此分享给有需要的朋友:说到负载均衡,其实在linux下有很多服务可以实现,比如nginx.haproxy.lvs等服务,当前我们在前面的文章有介绍过了,但是对于高可用服务,我们在linux下最常见也是应用最多的是Kee

Keepalived+Nginx实现双主高可用负载均衡

Keepalived+Nginx实现双主高可用负载均衡 一.部署Nginx+keepalived高可用有两种配置方案: 1.Nginx+keepalived 主从配置 前端使用两台机器,使用一个VIP,即其中一台为主负责全部请求,一台为备,只用在主出现故障时,才会替代主处理请求,平常处于闲置状态,此方案不够理想.  2.Nginx+keepalived 双主配置 前端使用2台机器,使用两个VIP,互为主备,不考虑其他情况时均衡处理请求,当其中一台机器出现故障时,另一台负责处理对两台机器的请求,此

HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署

HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3.10.0-327.el7.x86_64 集群架构: 前端:HAProxy 1.虚拟FQDN:www.simpletime.net 2.VIP:192.168.39.1:DIP:172.16.39.50 3.调度服务器:Varnish1.Varnish2 4.调度算法:URL_Hash_Consist

Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)

原文:https://my.oschina.net/xshuai/blog/917097 摘要: Nginx+Keepalived搭建高可用负载均衡环境(HA) http://blog.csdn.net/xyang81/article/details/52554398可以看更多介绍 Keepalived的介绍可以百度一堆一堆的资料.一定要看看哦. 1.基于上一篇博客总结,再次安装一个虚拟机当backup服务器,这个服务器只安装Keepalived+Nginx即可 2.Master还是上一篇博文的

利用keepalived和haproxy配置mysql的高可用负载均衡

实验系统:CentOS 6.6_x86_64(2.6.32-504.30.3.el6.x86_64) 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:keepalived-1.2.19 haproxy-1.5.14 mariadb-10.0.20 下载地址:http://pan.baidu.com/s/1bnnYiMr 实验拓扑: 一.安装mariadb 1.在两台数据库服务器安装: tar xf mariadb-10.0.20-linux-x86

LVS-DR+keepalived 搭建web高可用负载均衡

实验环境 redhat6.5 2.6.32-431.el6.x86_64 keepalived-1.2.16版本 ipvsadm-1.26-2.el6.x86_64 所有的虚拟机  都  关闭防火墙和selinux  配置好了本地yum源 搭建要求是对LVS-DR模式的原理熟悉,先配置好LVS-DR所需的环境.这里的环境是配置VIP DIP DIP 在同一个网段,并在realserver的lo接口上做好了arp抑制.具体见后面的脚本 当keepalived和LVS结合时,注意不需要在direct

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

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

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

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

Keepalived+Haproxy双主高可用负载均衡web和mysql综合实验

日期及版本:2014.5.4v1.0 架构图 实验目的: 1.Haproxy+Keepalived双主双机高可用模型,keepalived为Haproxy主从提供高可用保证haproxy-master若挂掉haproxy-backup能无缝接管,haproxy为后端Web提供负载均衡,缓解并发压力,实现WEB站点负载均衡+高可用性: 2. Haproxy反代web做动静分离: 3. Haproxy反代mysql 算法leastconn和roundrobin的不同效果: 系统环境: OS:cent