案例二(构建双主高可用HAProxy负载均衡系统)

在案例一介绍HAProxy高可用负载均衡集群架构中,虽然通过Keepalived实现了HAProxy的高可用,但是严重浪费了服务器资源,因为在一主一备的Keepalived环境中,只有主节点处于工作状态,而备用节点则一直处于空闲等待状态,仅当主节点出现问题时备用节点才能开始工作。对于并发量比大的Web应用系统来说,主节点可能会非常繁忙,而备用节点则十分空闲,这种服务器资源分布不均的问题,也是在做应用架构设计时必须要考虑的问题。对于一主一备资源不均衡的问题,可以通过双主互备的方式进行负载分流,下面就详细讲述双主互备的高可用集群系统是如何实现的。

1.系统架构图与实现原理

为了能充分利用服务器资源并将负载进行分流,可以在一主一备的基础上构建双主互备的高可用HAProxy负载均衡集群系统。双主互备的集群架构如图:

在这个架构中,要实现的功能是:通过haproxy1服务器将www.zb.com的访问请求发送到webapp1和webapp2两台主机上,要实现www.zb.com的负载均衡;通过haproxy2将img.zb.com的访问请求发送到webimg1和webimg2两台主机上,要实现img.zb.com的负载均衡;同时,如果haproxy1或haproxy2任何一台服务器出现故障,都会将用户访问请求发送到另一台健康的负载均衡节点,进而继续保持两个网站的负载均衡。

操作系统:

CentOS release 6.7

地址规划:

主机名 物理IP地址 虚拟IP地址 集群角色
haproxy1 10.0.0.35 10.0.0.40 主:www.zb.com
备:img.zb.com
haproxy2 10.0.0.36 10.0.0.50 主:img.zb.com
备:www.zb.com
webapp1 10.0.0.150 Backend Server
webapp2 10.0.0.151 Backend Server
webimg1 10.0.0.152 Backend Server
webimg2 10.0.0.8 Backend Server

主要:为了保证haproxy1和haproxy2服务器资源得到充分利用,这里对访问进行了分流操作,需要将www.zb.com的域名解析到10.0.0.40这个IP上,将img.zb.com域名解析到10.0.0.50这个IP上。

2.安装并配置HAProxy集群系统

在主机名为haproxy1和haproxy2的节点依次安装HAProxy并配置,配置好的haproxy.cfg文件,内容如下:

global

# to have these messages end up in /var/log/haproxy.log you will

# need to:

#

# 1) configure syslog to accept network log events.  This is done

#    by adding the '-r' option to the SYSLOGD_OPTIONS in

#    /etc/sysconfig/syslog

#

# 2) configure local2 events to go to the /var/log/haproxy.log

#   file. A line like the following can be added to

#   /etc/sysconfig/syslog

#

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

#

log         127.0.0.1 local2

pidfile     /var/run/haproxy.pid

maxconn     4096

user        haproxy

group       haproxy

daemon

nbproc      1

# turn on stats unix socket

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

# common defaults that all the 'listen' and 'backend' sections will

# use if not designated in their block

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

defaults

mode                    http

retries                 3

timeout connect         5s

timeout client          30s

timeout server          30s

timeout check           2s

listen admin_stats

bind 0.0.0.0:19088

mode http

log 127.0.0.1 local0 err

stats refresh 30s

stats uri /haproxy-status

stats realm welcome login\ Haproxy

stats auth admin:admin

stats hide-version

stats admin if  TRUE

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

# main frontend which proxys to the backends

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

frontend www

bind *:80

mode http

option httplog

option forwardfor

log global

acl host_www hdr_dom(host) -i www.zb.com

acl host_img hdr_dom(host) -i img.zb.com

use_backend server_www if host_www

use_backend server_img if host_img

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

# static backend for serving up images, stylesheets and such

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

backend server_www

mode http

option redispatch

option abortonclose

balance roundrobin

option httpchk GET /index.html

server web01 10.0.0.150:80 weight 6 check inter 2000 rise 2 fall 3

server web02 10.0.0.151:80 weight 6 check inter 2000 rise 2 fall 3

backend server_img

mode http

option redispatch

option abortonclose

balance roundrobin

option httpchk GET /index.html

server webimg1 10.0.0.152:80 weight 6 check inter 2000 rise 2 fall 3

server webimg2 10.0.0.8:80 weight 6 check inter 2000 rise 2 fall 3

在这个HAProxy配置中,通过ACL规则将www.zb.com站点转到webapp1、webapp2两个后端节点,将img.zb.com站点转到webimg1和webimg2两个后端服务节点,分别实现负载均衡。

最后将haproxy.conf文件分别复制到haproxy1和haproxy2两台服务器上,然后在两个负载均衡器上依次启动HAProxy服务。

3.安装并配置双主的Keepalived高可用系统

依次在主、备两个节点上安装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 LVS_DEVEL

}

vrrp_script check_haproxy {

script "killall -0 haproxy"

interval 2

}

vrrp_instance HAProxy_HA {

state MASTER                #在haproxy2主机上,此处为BACKUP

interface eth0

virtual_router_id 80       #在一个实例下,virtual_router_id是唯一的,因此在haproxy2上,virtual_router_id也为80

priority 100                    #在haproxy2主机上,priority值为80

advert_int 2

authentication {

auth_type PASS

auth_pass aaaa

}

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

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

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

track_script {

check_haproxy

}

virtual_ipaddress {

10.0.0.40/24 dev eth0

}

}

vrrp_instance HAProxy_HA2 {

state BACKUP                   #在haproxy2主机上,此处为MASTER

interface eth0

virtual_router_id 81         #在haproxy2主机上,此外virtual_router_id也必须为81

priority 80                       #在haproxy2主机上,priority值为100

advert_int 2

authentication {

auth_type PASS

auth_pass aaaa

}

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

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

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

track_script {

check_haproxy

}

virtual_ipaddress {

10.0.0.50/24 dev eth0

}

}

在双主互备的配置中,有两个VIP地址,在正常情况下,10.0.0.40将自动加载到haproxy1主机上,而10.0.0.50将自动加载到haproxy2主机上。这里要特别注意的是,haproxy1和haproxy2两个节点上virtual_router_id的值要互不相同,并且MASTER角色的priority值要大于BACKUP角色的priority值。

在完成所有配置修好后,依次在haproxy1和haproxy2两个节点启动Keepalived服务,并观察VIP地址是否正常加载到对应的节点上。

4.测试

在haproxy1和haproxy2节点依次启动HAProxy服务和Keepalived服务后,首先观察haproxy节点Keepalived的启动日志,信息如下:

Jul 25 10:06:34 data-1-1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) Transition to MASTER STATE

Jul 25 10:06:36 data-1-1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) Entering MASTER STATE

Jul 25 10:06:36 data-1-1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) setting protocol VIPs.

Jul 25 10:06:36 data-1-1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) Sending gratuitous ARPs on eth0 for 10.0.0.40

Jul 25 10:06:36 data-1-1 Keepalived_healthcheckers[33166]: Netlink reflector reports IP 10.0.0.40 added

Jul 25 10:06:53 data-1-1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA2) Received higher prio advert

Jul 25 10:06:53 data-1-1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA2) Entering BACKUP STATE

下面测试一下双主互备的故障切换功能,这里为了模拟故障,将haproxy1节点上HAProxy服务关闭,然后在haproxy1节点观察Keepalived的启动日志,信息如下:

Jul 25 14:42:09 data-1-1 Keepalived_vrrp[33167]: VRRP_Script(check_haproxy) failed

Jul 25 14:42:10 data-1-1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) Entering FAULT STATE

Jul 25 14:42:10 data-1-1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) removing protocol VIPs.

Jul 25 14:42:10 data-1-1 Keepalived_vrrp[33167]: VRRP_Instance(HAProxy_HA) Now in FAULT state

Jul 25 14:42:10 data-1-1 Keepalived_healthcheckers[33166]: Netlink reflector reports IP 10.0.0.40 removed

从切换过程看,keepalived运行完全正常。

原文地址:http://blog.51cto.com/6284444/2149987

时间: 2024-12-10 21:22:14

案例二(构建双主高可用HAProxy负载均衡系统)的相关文章

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

LVS基础及LVS+Keepalived实现双主高可用负载均衡

LVS基础及LVS+Keepalived实现双主高可用负载均衡 LB集群: (Load  Balancing)即负载均衡集群,其目的是为了提高访问的并发量及提升服务器的性能,其    实现方式分为硬件方式和软件方式. 硬件实现方式: 常用的有 F5公司的BIG-IP系列.A10公司的AX系列.Citrix公司的 NetScaler系列等 软件实现方式: LVS工作于传输层.nginx工作于应用层.haproxy工作于传输层和应用层 本文主要讲解LVS. 一.什么是LVS ? 1. LVS:(Li

MySQL集群(四)之keepalived实现mysql双主高可用

前面大家介绍了主从.主主复制以及他们的中间件mysql-proxy的使用,这一篇给大家介绍的是keepalived的搭建与使用! 一.keepalived简介 1.1.keepalived介绍 Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三.第四层.第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常, 或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完

基于Keepalived实现LVS双主高可用集群

前言 前面说过基于heartbeat的LVS高可用方案,今天带来另一种解决方案:基于Keepalived实现LVS双主高可用集群.什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了, 也就是所谓的高可用或热备,用来防止单点故障的发生.本文将详细讲述Keepalived工作原理及高可用解决方案的实现. 相关介绍 Keepalived简介 Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余

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

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

Keepalived+MariaDB10配置双主高可用数据库

Keepalived+MariaDB10配置双主高可用数据库 OS RS 子网掩码 路由网关 Centos6.6 MariaDB10 Keepalived Eth0:192.168.26.210 255.255.252.0 192.168.25.3 VIP:192.168.27.210 255.255.255.252 Centos6.6 MariaDB10 Keepalived Eth0:192.168.26.211 255.255.252.0 192.168.25.3 VIP:192.168.

配置MySQL实现主主互备模式并利用keepalived实现双主高可用

每台主机均需安装keepalived,mysql,安装过程这里不多介绍,不懂的可自行百度. 本次配置的环境为 DB1:192.168.31.190                DB2:192.168.31.184        MySQL VIP:192.168.31.189 1.修改MySQL配置文件 首先修改DB1的/etc/my.cnf配置文件,在"[mysqld]"段中添加一下内容: server-id = 1 log-bin=mysql-bin relay-log = my

基于keepalived搭建mysql双主高可用

目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能把人肉去恢复故障,既不想引用中间件也不想人肉恢复故障,可以折中选择双主方案,本文将介绍通过keepalived搭建mysql双主方案. 本例中vip为:172.16.0.169,  两台mysql实例服务器ip分别为:172.16.0.1和172.16.0.2 转帖请注明来源: https://my

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