haproxy实现高级负载均衡实战

  环境:随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务提供,不在和pc站点一起提供服务,此时需要做7层规则负载均衡,运维总监要求,能否用一种服务同既能实现七层负载均衡,又能实现四层负载均衡,并且性能高效,配置管理容易,而且还是开源。

总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html

Haproxy详解和相关代码段含义详见,详见 http://www.cnblogs.com/along21/p/7899771.html

实验前准备

① 两台服务器都使用yum 方式安装haproxy 和 keepalived 服务

yum -y install haproxy

yum -y install keepalived

② iptables -F && setenforing 清空防火墙策略,关闭selinux

实战一:实现基于Haproxy+Keepalived负载均衡高可用架构

1、环境准备:

机器名称

IP配置

服务角色

备注

haproxy-server-master

VIP:172.17.100.100

DIP:172.17.1.6

负载均衡器

主服务器

配置keepalived

haproxy-server-backup

VIP:172.17.100.100

DIP:172.17.11.11

负载服务器

从服务器

配置keepalived

rs01

RIP:172.17.1.7

后端服务器

rs02

RIP:172.17.22.22

后端服务器

2、先配置好keepalived的主从

(1)在haproxy-server-master 上

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from root@along.com
smtp_server 127.0.0.1
smtp_connect_timeout
router_id keepalived_haproxy
} vrrp_script chk_haproxy { #定义一个脚本,发现haproxy服务关闭就降优先级
script "killall -0 haproxy"
interval
fall
rise
weight -
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.100
}
track_script { #执行脚本
chk_haproxy
}
}

service keepalived start 开启keepalived服务

开启服务后可以查看,VIP已经生成

(2)在haproxy-server-backup 从上:只需把主换成从,优先级降低就好

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from root@along.com
smtp_server 127.0.0.1
smtp_connect_timeout
router_id keepalived_haproxy
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass along
}
virtual_ipaddress {
172.17.100.100
}
}

service keepalived start 开启keepalived服务

3、配置haproxy ,总共有两大段,和第二大段的4小段,两个haproxy可以配置的一样

(1)第一大段:global 全局段

global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats

(2)第二大段:proxies 对代理的设定

① defaults 默认参数设置段
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/
option redispatch
retries
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 ② listen 段
listen stats
bind 0.0.0.0:
stats enable
stats hide-version
stats uri /haproxyadmin
stats auth along:along
stats admin if TRUE ③ frontend 与客户端建立连接,打开服务监听端口段
frontend web
bind :
default_backend lnmp-server ④ backend 与后端服务器联系段
backend lnmp-server
balance roundrobin
option httpchk GET /index.html
server lnmpserver1 172.17.1.7: check inter rise fall
server lnmpserver2 172.17.22.22: check inter rise fall

开启服务 service haproxy start

4、在后端server·打开事先准备好的web server

systemctl start nginx

systemctl start php-fpm

systemctl start mariadb

5、测试

(1)网页访问 http://172.17.100.100:1080/haproxyadmin 进入状态监控页面,可以控制自己的后端服务

(2)可以坏2台不是一组的机器

一台后端server宕机,haproxy会调度到另一个server,继续提供服务

一个主的haproxy宕机,keepalived会把VIP漂移到从上,继续提供服务

实战二:基于ACL控制实现动静分离

原理:acl:访问控制列表,用于实现基于请求报文的首部响应报文的内容其它的环境状态信息来做出转发决策,这大大增强了其配置弹性。其配置法则通常分为两步,首先去定义ACL ,即定义一个测试条件,而后在条件得到满足时执行某特定的动作,如阻止请求或转发至某特定的后端。

1、环境准备:

机器名称

IP配置

服务角色

备注

haproxy-server

172.17.2.7

负载均衡器

配置keepalived

ACL控制

rs01

RIP:192.168.30.107

静态服务器

小米网页

rs02

RIP:192.168.30.7

动态服务器

小米网页

2、在haproxy 上定义ACL和后端服务器

vim /etc/haproxy/haproxy.cfg  前面global 全局段和default 段不用修改

① 定义web 监控页面
listen stats
bind 0.0.0.0:
stats enable
stats hide-version
stats uri /haproxyadmin
stats auth along:along
stats admin if TRUE ② 在frontend 段定义ACL
frontend web
bind :
acl staticfile path_end .jpg .png .bmp .htm .html .css .js
acl appfile path_end .php
use_backend staticsrvs if staticfile
default_backend appsrvs ③ 设置backend 后端集群组
backend staticsrvs
balance roundrobin
server staticweb 192.168.30.107: check inter rise fall backend appsrvs
balance roundrobin
server appweb 192.168.30.7: check inter rise fall

3、开启后端web服务

systemctl start nginx

systemctl start php-fpm

systemctl start mariadb

4、测试结果

(1)后端服务器正常时

web 检测页面,一切正常

(2)当后端静态页面服务集群宕机,显示不出静态页面,说明动静分离成功

实战三:基于ACL实现权限控制及会话保持

1、环境准备:

机器名称

IP配置

服务角色

备注

haproxy-server

172.17.2.7

负载均衡器

配置keepalived

ACL控制

rs01

RIP:192.168.30.107

后端服务器

小米网页

rs02

RIP:192.168.30.7

后端服务器

小米网页

2、这haproxy 上定义ACL和后端服务器

vim /etc/haproxy/haproxy.cfg  前面global 全局段和default 段不用修改

① 定义web 监控页面
listen stats
bind 0.0.0.0:
stats enable
stats hide-version
stats uri /haproxyadmin
stats auth along:along
stats admin if TRUE ② 在frontend 段定义ACL,用户权限控制
frontend web
bind :
acl allow_src src 172.17.0.0/
block unless allow_src
default_backend appsrvs ③ 设置backend 后端集群组,设置cookie,会话保持
backend staticsrvs
balance roundrobin
cookie SRV insert nocache
server appweb1 192.168.30.107: check inter rise fall cookie srv1
server appweb2 192.168.30.7: check inter rise fall cookie srv2

3、开启后端web服务

systemctl start nginx

systemctl start php-fpm

systemctl start mariadb

4、检测结果

(1)检测权限控制

① 在172.17.0.0 段的机器访问,正常

② 在这个网段外的机器访问,拒绝

(2)检测会话保持

① 分别在两个后端创建两个测试页面

vim ../test.html

server 1/2

② 测试

curl 测试需加-b SRV= 指定的对应cookie访问

curl -b SRV=srv1 172.17.2.7/test.html

curl -b SRV=srv2 172.17.2.7/test.html

实战四:实现haproxy的ssl加密

1、自签生成证书

cd /etc/pki/tls/certs

make /etc/haproxy/haproxy.pem

ls /etc/haproxy/haproxy.pem 确实生成了证书和秘钥的文件

2、在haproxy 中设置

frontend  web
bind :
bind : ssl crt /etc/haproxy/haproxy.pem 监听443端口,且是ssl加密
redirect scheme https if !{ ssl_fc } 实现302重定向,将80跳转到443端口

3、网页访问 https://172.17.11.11/

项目实战4—haproxy 负载均衡和ACL控制的更多相关文章

  1. 项目实战2—LVS负载均衡

    负载均衡集群企业级应用实战-LVS 实现基于LVS负载均衡集群的电商网站架构 随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢 ...

  2. Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  3. Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  4. net core 实战之 redis 负载均衡和"高可用"实现

    net core 实战之 redis 负载均衡和"高可用"实现 1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的& ...

  5. Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  6. (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  7. Nginx/LVS/HAProxy 负载均衡软件的优缺点详解

    Nginx/LVS/HAProxy 负载均衡软件的优缺点详解   Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验 ...

  8. HAProxy详解(三):基于虚拟主机的HAProxy负载均衡系统配置实例【转】

    一.基于虚拟主机的HAProxy负载均衡系统配置实例 1.通过HAProxy的ACL规则配置虚拟主机: 下面将通过HAProxy的ACL功能配置一套基于虚拟主机的负载均衡系统.这里操作系统环境为:Ce ...

  9. Nginx/LVS/HAProxy负载均衡软件的优缺点

    一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术.具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了:如果机器不少,可以用D ...

随机推荐

  1. 【特效】单选按钮和复选框的美化(只用css)

    表单的默认样式都是比较朴素的,实际页面中往往需要美化他们.这里先说说单选按钮和复选框,有了css3,这个问题就变的好解决了.利用input与label相关联,对label进行美化并使其覆盖掉原本的in ...

  2. 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器过滤器)

    概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以 ...

  3. maven的介绍

    刚来通信行业的国企上班,面试的时候很尴尬的问道"maven是干什么的?"""maven是项目管理工具吗?是怎么管理的?(理解类似于协同等办公OA一样的软件了)& ...

  4. 清空jQuery validation 显示的错误信息

    现在做个BS结构的查询系统,登陆的时候添加个重置的按钮. 他的功能主要是: 1.清空Input的text 2.jQuery validation插件当错误的时候显示的信息,解决方法如下面的代码 var ...

  5. 03Vue事件

    Vue提供了事件的绑定,方法写在methods对象中. 绑定dom中有两种方法: 方法一:v-on:click/dblclcick/mouseOver/mouseOut="方法名" ...

  6. 异步任务--celery发送邮件

    安装两个python包: pip install celery==3.1.25 pip install django-celery==3.1.17 在配置文件settings.py中做如下配置: a) ...

  7. Eclipse中Hibernate插件的安装

    在使用Hibernate开发时,大多数情况下涉及到其XML配置文件的编辑,尤其是.cfg.xml(配置文件)和hbm.xml(关系映射文件)这两种.为了更方便的使用此框架,其插件的安装是很有必要的. ...

  8. python 生成器和迭代器

    迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退) 2.可迭代对象:实现了 ...

  9. Maple trees(最小覆盖圆)

    Maple trees Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  10. 关于C++中vector和set使用sort方法进行排序

    C++中vector和set都是非常方便的容器, sort方法是algorithm头文件里的一个标准函数,能进行高效的排序,默认是按元素从小到大排序 将sort方法用到vector和set中能实现多种 ...