基于keepalived的Haproxy高可用配置

一、概述:

HAProxy是一个用于4层或7层的高性能负载均衡软件,在大型网站的大型Web服务器群集中,HAProxy可用来替代专业的硬件负载均衡设备,节省大量的开支。

通常情况下,为了避免整个体系中出现单点故障,在至关重要的架构中,都需要部署备份设备,同样,负载均衡设备也不能部署单台,一旦主设备出现问题之后,备份设备可对主设备进行接管。实现不间断的服务,这便是Keepalived的作用。

于是,HAProxy和Keepalived的组合便成了省钱高效的Web服务器负载均衡架构。

拓扑图:

二、前端负载均衡层配置:

1.ha_1配置<172.16.41.1>:

<1>配置keepalived

[[email protected]_1 ~]# yum install -y keepalived
[[email protected]_1 ~]# cd /etc/keepalived/
[[email protected]_1 keepalived]# cp keepalived.conf keepalived.conf.bak
[[email protected]_1 keepalived]# vim keepalived.conf
! Configuration File forkeepalived
global_defs {
notification_email {  #邮件通知机制
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1  #使用本机邮件服务
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_haproxy {  #检测haprox服务状态
script "killall -0 haproxy"
interval 1
weight 2   #权重
}
###########VRRP_INSTANCE VI_1###########实例1的配置
vrrp_instance VI_1 {
state MASTER   #在ha_1上面是主,对端ha_2上面是备
interface eth0
virtual_router_id 100  #路由ID
priority 100  #优先级
advert_int 1
authentication {  #路由之间认证
auth_type PASS
auth_pass 123.com
}
virtual_ipaddress {   #VIP配置
172.16.41.100/16dev eth0  label eth0:0
}
track_script {   #追踪脚本
chk_haproxy
}
track_interface {  #追踪端口
eth0
}
#通知脚本
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############实例2的配置
vrrp_instance VI_2 {
state BACKUP  #在ha_1上面是被,对端ha_2上面是主
interface eth0
virtual_router_id 200  #路由ID
priority 199  #优先级
advert_int 1
authentication {  #路由间认证
auth_type PASS
auth_pass 123.com
}
virtual_ipaddress {  #VIP配置
172.16.41.101/16dev eth0  label eth0:1
}
track_interface {  #追踪端口
eth0
}
track_script {  #追踪脚本
chk_haproxy
}
}
######################################
为ha_1的keepalived提供脚本文件:
[[email protected]_1 ~]# vim /etc/keepalived/notify.sh
#!/bin/bash
# Author: MageEdu <[email protected]>   脚本使用请注明出处
# description: An example of notify script
#
vip=172.16.41.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
#赋予执行权限:
[[email protected]_1 ~]# chmod +x /etc/keepalived/notify.sh

<2>配置haproxy.

[[email protected]_1 haproxy]# yum install haproxy -y
[[email protected]_1 ~]# cd /etc/haproxy/
[[email protected]_1 haproxy]# cp haproxy.cfg haproxy.cfg.bak
[[email protected]_1 haproxy]# vim haproxy.cfg
global  #全局配置
log         127.0.0.1 local2  #日志功能
chroot      /var/lib/haproxy#修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroo
t()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空
目录且任何用户均不能有写权限;
pidfile     /var/run/haproxy.pid
maxconn     4000
user        haproxy
group       haproxy
daemon  #让haproxy以守护进程的方式工作于后台
defaults
mode                    http #指定haproxy的工作模式
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
maxconn                 3000
listen stats
mode http
bind 0.0.0.0:1080 #绑定1080端口
stats enable#开启stats功能
stats hide-version #隐藏haproxy版本信息
stats uri  /myadmin?stats  #在浏览器中通过什么样的URI访问stats页面
stats realm Haproxy\ Statistics #认证注释信息
stats auth  maoqiu:123.com  #认证机制(User:Password)
stats admin ifTRUE  #如果认证成功,则赋予管理权限
acl allow src 172.16.0.0/16#访问控制,只允许是这个网段的客户端访问
tcp-request content accept ifallow
tcp-request content reject
frontend proxy  #前端代理
bind *:80  #监听80port
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 ifurl_static
default_backend dynamic_servers
backend static_servers  #后端静态server
balance source#基于source算法调度
server imgsrv1 192.168.100.2:80 check maxconn 6000
backend dynamic_servers   #后端动态server
balance source#基于source算法调度
server websrv1 192.168.100.1:80 check maxconn 6000

2.ha_2配置<172.16.41.2>:

<1>配置keepalived:

! Configuration File forkeepalived
global_defs {
notification_email {
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1
weight 2
}
###########VRRP_INSTANCE VI_1###########
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 100
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 123.com
}
virtual_ipaddress {
172.16.41.100/16dev eth0 label eth0:0
}
track_script {
chk_haproxy
}
track_interface {
eth0
}
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############
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 200
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 123.com
}
virtual_ipaddress {
172.16.41.101/16dev eth0 label eth0:1
}
track_interface {
eth0
}
track_script {
chk_haproxy
}
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
#####ha_2上面的脚本文件同ha_1,须将VIP修改为172.16.41.101,再赋予权限即可!

<2>配置kehaproxy:

因为在前端的haproxy功能都是将服务代理至至后端的Real Server,每项配置都是一样的,所以在ha_2上安装好haproxy之后将ha_1上面的配置文件copy过来即可!

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

3.启动keepalived测试:

<1>当两个前端节点的服务正常状态时:

<2>当把某个前端节点的haproxy服务停止后的状态:

目前keepalived为haporxy提供高可用已经达到目的,下面继续关于haproxy的动静分离机制和haproxy 统计信息输出机制的实现.

三、后端Web Server(RS1/RS2,意为Real Server)配置

在拓扑图中规划RS1为客户端请求的动态内容提供服务,RS2为客户端请求静态内容提供服务

1.为RS1提供动态内容页面(我这里使用直接使用一个php的测试页)

[[email protected] ~]# yum install -y php php-mysql
[[email protected] ~]# vim /var/www/html/index.php
<h1>Real Server1</h1>
<?php
phpinfo();
?>
[[email protected] ~]# service httpd start
Starting httpd:                                           [  OK  ]
[[email protected] ~]#

2.RS2提供图片或者html网页文档

#放个html网页文档
[[email protected] ~]# vim /var/www/html/index.html
<h1>Real Server2</h1>
#放张图片
[[email protected] ~]# cd /var/www/html/
[[email protected] html]# ls
index.html  tux_windows.jpg
[[email protected] html]#

四、测试:

1.静态内容测试:

2.动态内容测试:

3.haproxy统计页面输出机制:

haproxy的动静分离以及统计信息的输出机制在两个代理节点上都正常的情况下没有问题,最后再次将某一代理服务关闭后还是一样访问正常;基于keepalived的haproxy高可用实验成功!

基于keepalived的Haproxy高可用配置,布布扣,bubuko.com

时间: 2024-08-02 06:59:21

基于keepalived的Haproxy高可用配置的相关文章

基于keepalived实现haproxy高可用

keepalived实现haproxy高可用模型 keepalived节点1 ---------------------------------------------------------------- vrrp_script chk_haproxy { script "killall -0 haproxy" interval 1 weight -2 } vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_

HAProxy基于KeepAlived实现Web高可用及动静分离

    前言     软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载均衡.LVS是基于Linux操作系统实现的一种软负载,而Haproxy则是基于第三方应用实现的软负载.Haproxy相比LVS的使用要简单很多,但跟LVS一样,Haproxy自己并不能实现高可用,一旦Haprox节点故障,将会影响整个站点.本文是haprox基于keepalived实现web高可用及动静分离.     相关介绍         HAProxy     haproxy是一款提供

基于Keepalived实现Mysql高可用

前言 由于最近要使用Mysql数据库,而目前公司服务器与业务有限,于是只使用了一台Mysql.所以,问题很明显,如果这台Mysql坏了,那么将会影响整个公司的业务,所以考虑做Mysql的高可用方案.目前,Mysql的高可用方案很多,这里选择Keepalived+Mysql实现高可用. 环境介绍 ID OS IP Role node1 CentOS6.5_X64 192.168.1.159 Master node2 CentOS6.5_X64 192.168.1.160 Slave  Mysql

基于keepalived的nginx高可用

#nginx,keepalived安装略过 MASTER 节点配置文件(192.168.1.11) vi /etc/keepalived/keepalived.conf global_defs { ##keepalived自带的邮件提醒需要开启sendmail服务.建议用独立的监控或第三方SMTP ##标识本节点的字条串,通常为 hostname router_id 192.168.1.11 } ##keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance

linux下安装haproxy作为端口转发服务器,以及安装keepalived作为haproxy高可用方案

一.安装haproxy作为端口转发服务器(主服务器:172.28.5.4,备服务器:172.28.5.8,浮点IP为:172.28.5.6) 1.下载 cd /usr/local/src wget https://github.com/haproxy/haproxy/archive/v1.5-dev20.tar.gz 2.解压 tar - zvxf v1.5-dev20.tar.gz cd haproxy-1.5-dev20 3.编译 make TARGET=linux26 prefix=/us

基于Keepalived的MySQL高可用

keepalived负责的是故障转移,至于故障转以后的节点之间数据的一致性问题依赖于具体的复制模式.不管是主从.一主多从还是双主.集群节点个数.主从具体的模式无关(常规复制,半同步复制,GTID复制,多线程复制,甚至可以是MGR)都没有直接的关系.个人认为,MySQL高可用方向,MGR+自动故障转移中间件(keepalived),应该是是个趋势.怎么感觉MHA的配置又臭又长. keepalive的安装 1,参考http://blog.51cto.com/afterdawn/1888682 1.官

L10.2 keepalive 实现haproxy高可用(双主模型)

keepalived实现haproxy高可用. haproxy实现RS负载均衡. 说明: 1,当keepalive节点状态master时,haproxy应该是start状态,backup为restart,fault为stop状态:(注意脚本监测权限减5,这样会有数字计算优先级方面的问题,因此在backup状态也使用restart haproxy) 2,对haproxy的start,restart,stop,都将用脚本的方式实现,在keepalived配置中调用脚本: 3,我们不只对keepali

基于keepalived对HAproxy做高可用集群

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

Keepalived配置实现HaProxy高可用

这次,小编就先写一篇对Keepalived的配置,那么在学习之前,我们首先要了解Keepalived是什么,以及为什么要用Keepalived. 实际上,Keepalived不仅仅是实现HaProxy的高可用,小编这里只是拿HaProxy来做一个示例而已,根据这个示例,进行稍微的改动基本就可以实现其他服务的高可用. 在此之前,小编就先来说说为什么要用Keepalived来实现负载均衡器高可用,小编这里只拿HaProxy负载均衡器来进行说明: 对于所有懂运维的小伙伴来说,都应该知道,无论后端的服务