HAProxy双机高可用之HAProxy+Keepalived

Haproxy

HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,

它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站

点, 这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可

以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前

的架构中, 同时可以保护你的 web 服务器不被暴露到网络上。

实验环境:rhel6.5 selinux and iptables disabled

实验主机: 192.168.2.36  haproxy

192.168.2.38  web1

192.168.2.39  web2

软件下载:http://haproxy.1wt.eu/

rpm 包方式:

rpmbuild -tb haproxy-1.4.24.tar.gz

rpm -ivh /root/rpmbuild/RPMS/x86_64/haproxy-1.4.24x86_64.rpm

源码方式:

tar zxf haproxy-1.4.24.tar.gz

cd haproxy-1.4.24

make TARGET=linux26 ARCH=x86_64 USE_PCRE=1 PREFIX=/usr/local/haproxy install

在安装过程中可能需要一些依赖包

yum install pcre-devel  make gcc -y

#mkdir -p /usr/share/haproxy

配置:

vi /etc/haproxy/haproxy.cfg

global

log 127.0.0.1 local0 #指定日志设备

log 127.0.0.1 local1 notice

#log loghost local0 info #指定日志类型,还有 err warning debug

maxconn 65535 #并发最大连接数量

chroot /usr/share/haproxy #jail 目录

uid 99 #用户

gid 99 #组

daemon #后台运行

#debug

#quiet

defaults

log

global

mode http #默认使用 http 的 7 层模式 tcp: 4 层

option httplog #http 日志格式

option dontlognull #禁用空链接日志

retries 3 #重试 3 次失败认为服务器不可用

option redispatch #当 client 连接到挂掉的机器时,重新分配到健康的主机

maxconn 65535

contimeout 5000

#连接超时

clitimeout 50000 #客户端超时

srvtimeout 50000 #服务器端超时

stats uri /status #haproxy 监控页面

listen www.example.com *:80 #监听的实例名称,地址和端口

balance roundrobin #负载均衡算法

server web1 192.168.2.38:80 cookie app1inst1 check inter 2000 rise 2 fall 5

server web2 192.168.2.39:80 cookie app1inst2 check inter 2000 rise 2 fall 5

#cookie app1inst1:表示 serverid 为 app1inst1

#check inter 2000:检测心跳频率

#rise 2:表示 2 次正确认为服务器可用

#fall 5:表示 5 次失败认为服务器不可用

# /etc/init.d/haproxy start

访问 http://www.example.com 测试负载 网页在两个web上切换表示成功

访问 haproxy 监控页面:http://192.168.2.136/status

Keepalived+lvs

系统负载均衡架构:

主机环境:RHEL6 系列 selinux and iptables disabled

实验主机:

LVS‐ACTIVE: 192.168.2.136

LVS‐BACKUP:192.168.2.146

LVS‐VIP:192.168.2.111

Realsever:192.168.2.38 192.168.2.39

主备机上的软件包安装与配置

yum install ipvsadm kernel-devel openssl-devel popt-devel libnl-devel gcc make -y

wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz

tar zxf keepalived-1.2.5.tar.gz

cd keepalived-1.2.5

./configure --prefix=/usr/local/keepalived

...

Keepalived configuration

------------------------

Keepalived version: 1.2.5

Compiler: gcc

Compiler flags: -g -O2

Extra Lib: -lpopt -lssl -lcrypto -lnl

Use IPVS Framework: Yes

IPVS sync daemon support : Yes

IPVS use libnl: Yes

Use VRRP Framework: Yes

Use VRRP VMAC: Yes

SNMP support: No

Use Debug flags: No

#make

#make install

ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

ln -s /usr/local/keepalived/etc/keepalived /etc/

ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin

#vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

[email protected] #接收警报的 email 地址,可以添加多个

}

notification_email_from [email protected] #设置邮件的发送地址

smtp_server 127.0.0.1 #设置 smtp server 地址

smtp_connect_timeout 30 #设置连接 smtp 服务器超时时间

router_id LVS_DEVEL #load balancer 的标识 ID,用于 email 警报

}

vrrp_instance VI_1 {

state MASTER #备机改为 BACKUP,此状态是由 priority 的值来决定的,当前

priority 的值小于备机的值,那么将会失去 MASTER 状态

interface eth0 #HA 监测网络接口

virtual_router_id 51 #主、备机的 virtual_router_id 必须相同,取值 0-255

priority 100 #主机的优先级,备份机改为 50,主机优先级一定要大于备机

advert_int 1 #主备之间的通告间隔秒数

authentication {            #主备切换时的验证

auth_type PASS           #设置验证类型,主要有 PASS 和 AH 两种

auth_pass 1111             #设置验证密码,在一个 vrrp_instance 下,MASTER 与 BACKUP 必

须使用相同的密码才能正常通信

}

virtual_ipaddress {

192.168.2.111 #设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个

}

}

virtual_server 192.168.2.111 80 {  #定义虚拟服务器

delay_loop 6                                 #每隔 6 秒查询 realserver 状态

lb_algo rr                                      #lvs 调度算法,这里使用轮叫

lb_kind DR  #LVS 是用 DR 模式

#persistence_timeout 50           #会话保持时间,单位是秒,这个选项对于动态网页是非常有

用的,为集群系统中 session 共享提供了一个很好的解决方案。有了这个会话保持功能,用户的

请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保

持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在 50 秒内没有执行任

何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受 50 秒

的时间限制。

protocol TCP #指定转发协议类型,有 tcp 和 udp 两种

real_server 192.168.2.38 80 { #配置服务节点

weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权

值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设

置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统

资源

TCP_CHECK {  #realserve 的状态检测设置部分,单位是秒

connect_timeout 10 #10 秒无响应超时

nb_get_retry 3 #重试次数

delay_before_retry 3 #重试间隔

}

}

real_server 192.168.2.39 80 {

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

virtual_server 192.168.2.111 21{

delay_loop 6

lb_algo rr

lb_kind DR

persistence_timeout 50

protocol TCP

real_server 192.168.2.38 21 {

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

}

}

real_server 192.168.2.39 21 {

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

注:备机的 keepalived 配置文件只改动红色字体部分! 

分别在 realserver 上执行以下命令 

#ifconfig eth0:1 192.168.0.163 netmask 255.255.255.255  up

#vim /etc/sysconfig/arptables

# Generated by arptables-save v0.0.8 on Fri Aug  8 06:12:56 2014

*filter

:IN ACCEPT [497:13916]

:OUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

[0:0] -A IN -d 192.168.2.111 -j DROP

[0:0] -A OUT -s 192.168.2.111 -j mangle --mangle-ip-s 192.168.2.38

COMMIT

# Completed on Fri Aug  8 06:12:56 2014

#/etc/init.d/arptables_jf restart

#/etc/init.d/httpd stop

#/etc/init.d/httpd start

然后启动keepalived

#/etc/init.d/keepalived start

用ipvsadm -l查看连接状况

测试:

1. 高可用测试:停止 master 上的 keepalived 服务,看 backup 是否接管。

2. 负载均衡测试:访问 http://192.168.2.111,看到页面在两个 realserver 上切换表示成功!

你也可以通过 ipvsadm -l 查看详细连接情况!

3. 故障切换测试:任意关闭 realserver 上的 httpd 服务,Keepalived 监控模块是否能及时发现,

然后屏蔽故障节点,同时将服务转移到正常节点来执行。

haproxy+keepalived (解决haproxy的单点故障)

MASTER:

# vim keepalived.conf

! Configuration File for keepalived

vrrp_script check_haproxy {

script "/etc/keepalived/check_haproxy"

}

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_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.2.111

}

track_script {

check_haproxy

}

}

BACKUP:

# vim 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_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

priority 50

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.2.111

}

track_script {

check_haproxy

}

}

检测脚本:

# vim /etc/keepalived/check_haproxy.sh

#!/bin/bash

/etc/init.d/haproxy status &> /dev/null || /etc/init.d/haproxy restart &> /dev/null

if [ $? -ne 0 ];then

/etc/init.d/keepalived stop &> /dev/null

fi

假如说haproxy挂掉了,那keepalived就会停掉,而把haproxy转接到备机上,这样就解决了haproxy的单点故障问题。

HAProxy双机高可用之HAProxy+Keepalived,布布扣,bubuko.com

时间: 2024-10-14 18:13:55

HAProxy双机高可用之HAProxy+Keepalived的相关文章

负载均衡器HAProxy,高可用集群keepalived,keepalived+lvs

负载均衡器:nginx/haproxy/lvs/F5代理:正向代理:帮助客户端缓存服务器上的数据反向代理:帮助服务器缓存数据 HAProxy:1.安装[[email protected] bin]# yum install -y haproxy2.修改配置文件[[email protected] bin]# vim /etc/haproxy/haproxy.cfg 把# main frontend which proxys to the backends后面部分全部删除,增加以下内容:定义一个监

keepalived+haproxy实现高可用

实验环境: 2台centos 6.5作为keepalived+haproxy的高可用,3台centos6.5配置httpd作为后端server,haproxy的轮询采用rr调度算法.vip:192.168.8.199 ha1:eth1:192.168.8.41,keepalived+haproxy ha3:eth1:192.168.8.43,keepalived+haproxy  rs1:192.168.8.21.httpd rs2:192.168.8.22.httpd rs3:192.168.

用keepalived来实现haproxy的高可用性能

一.haproxy和keepalived的解释: 1.haproxy:haproxy是免费.极速且可靠的用于为TCP和基于HTTP应用程序提供负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点. 2.haproxy的特性:客户端侧的长连接(client-side keep-alive):TCP加速(TCP speedups): 响应池(response buffering):RDP协议:基于源的粘性(source-based stickiness):更好的统计

haproxy实现的web反向代理,动静分离,以及基于keepalived实现的haproxy的高可用

   haproxy于Nginx一样都是做反向代理,但是与其相比,haproxy更专注于web代理.HAProxy是单进程多请求,也支持多进程,HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.       haproxy功能的实现全部基于配置文件,所以我们需要了解很多的配置指令,玩转指令,再结合实际情况,我们就玩转了haproxy,其实haproxy的配置也很简单,下面我们一起简单认识和了解一些haproxy的基本功能和相关知识.         CentOS6.5自带的rpm

基于keepalived对HAproxy做高可用集群

一.Keepalived简介 Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器. Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下: Layer3:Keepalived使用Layer3的方式

使用keepalived实现haproxy的高可用

一.haproxy和keepalived的解释及本次实验的拓扑图: 1.haproxy:haproxy是免费.极速且可靠的用于为TCP和基于HTTP应用程序提供负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点. 2.haproxy的特性:客户端侧的长连接(client-side keep-alive):TCP加速(TCP speedups): 响应池(response buffering):RDP协议:基于源的粘性(source-based stickine

RabbitMq 基于 keepalived+haproxy实现高可用

1  概述 rabbitmq作为消息队列,广泛用于生产环境,但是,如果单节点,将导致故障后,生产环境不可用,因此,需要部署高可用环境 本文将介绍基于keepalived+haproxy实现rabbitmq的高可用 rabbitmq的集群中,所有节点都可读写,因此,可用haproxy调度到后端的任意一台rabbitmq上. 环境准备 三个节点mq-01 mq-02 mq-03 ,这里服务器复用了redis的服务器节点,所以机器名忽略. 添加hosts文件 #这一步很关键,所有的节点都要配置一样,否

haproxy的高可用

一.简介 软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现. LVS 就是基于 Linux 操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载.HAProxy 相比 LVS 的使用要简单很多,功能方面也很丰富.当前,HAProxy 支持两种主要的代理模式:"tcp"即 4 层(大多用于邮件服务器.内部协议通信服务器等)和 7 层(HTTP)在 4 层模式下, HAproxy仅在客户端和服务器之间转发双向流量. 7 层模

# IT明星不是梦 #MySQL高可用集群之基于MyCat部署HaProxy实现高可用

基于MyCat部署HaProxy实现高可用 在实际项目中, Mycat 服务也需要考虑高可用性,如果 Mycat 所在服务器出现宕机,或 Mycat 服务故障,需要有备机提供服务,需要考虑 Mycat 集群. 一.高可用方案 可以使用 HAProxy+Keepalived配合两台MyCat搭起MyCat集群,实现高可用性. HAProxy实现了MyCat多节点的集群高可用和负载均衡,而 HAProxy自身的高可用则可以通过Keepalived来实现. 架构图: 于上一个博客的环境部署(MySQL