项目实战4—HAProxy实现高级负载均衡实战和ACL控制

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控制的更多相关文章
- 项目实战2—实现基于LVS负载均衡集群的电商网站架构
		
负载均衡集群企业级应用实战-LVS 实现基于LVS负载均衡集群的电商网站架构 背景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响 ...
 - 项目实战02:LVS 实现负载均衡
		
目录 实现基于LVS负载均衡集群的电商网站架构 实战一:LVS的NAT模式实现负载均衡 实战二:LVS的DR 模式实现负载均衡 实战三:实现80.443端口都可访问服务,且LVS实现持久连接 实验四: ...
 - 项目实战4—haproxy 负载均衡和ACL控制
		
haproxy实现高级负载均衡实战 环境:随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务提供,不在和pc站点一起提供服务 ...
 - octavia的实现与分析(一)·openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比
		
[负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...
 - openstack octavia的实现与分析(一)openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比
		
[负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...
 - haproxy支持的负载均衡算法详解
		
目前haproxy支持的负载均衡算法有如下8种: 1.roundrobin 表示简单的轮询,每个服务器根据权重轮流使用,在服务器的处理时间平均分配的情况下这是最流畅和公平的算法.该算法是动态的,对于实 ...
 - [转帖]HAProxy 7层 负载均衡
		
HAProxy 7层 负载均衡 https://www.cnblogs.com/jicki/p/5546902.html HAProxy 系统 CentOS 5.8 x64 wget http://h ...
 - 广州项目实施步骤II_练习配置HaProxy的重定向负载均衡
		
CentOS6.4 配置Haproxy Haproxy下载地址:http://pan.baidu.com/share/link?shareid=1787182295&uk=18290183 ...
 - 项目详解4—haproxy 反向代理负载均衡
		
一.企业服务架构图及负载均衡的要求 1.场景说明 在企业生产环境中,每天会有很多的需求变更,比如增加服务器.新业务上线.url路由修改.域名配置等等,对于前端负载均衡设备来说,容易维护,复杂度低,是首 ...
 
随机推荐
- Machine learning | 机器学习中的范数正则化
			
目录 1. \(l_0\)范数和\(l_1\)范数 2. \(l_2\)范数 3. 核范数(nuclear norm) 参考文献 使用正则化有两大目标: 抑制过拟合: 将先验知识融入学习过程,比如稀疏 ...
 - scrum学习
			
一.关于Scrum 什么叫Scrum?Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发.Scrum包括了一系列实践和预定义角色的过程骨架.Scrum中的主要角色包括同项目经理类似的Scru ...
 - XSS攻击 CSRF攻击
			
XSS攻击: 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆, 故将跨站脚本攻击缩写为XSS.恶意攻击者 ...
 - php中的冒泡排序和选择排序d
			
//冒泡算法 //定义一个数组 $arr=arr{2,5,1155,3,8}; $len=count($arr); for($i=0;$i<$len-1;$i++) //定义以下需要宣传的次数 ...
 - eclipse设置新建jsp文件默认字符编码为utf-8
			
在使用Eclipse开发中,编码默认是ISO-8859-1,不支持中文.这样我们每次新建文件都要手动修改编码,非常麻烦.其实我们可以设置文件默认编码,今后再新建文件时就不用修改编码了. 1.打开Ecl ...
 - Android中实现gif动画
			
一.需求 Android本身没有提供直接显示gif动画的相关控件,因此需要自定义GifImageView类来实现gif的播放,主要是使用的Movie类来解决的. 二.自定义GifImageView p ...
 - table设置上下左右边距不一样-html
			
新手上路,刚刚自学html,仅作为记录学习历程用,有需要的可以参考. 1.边距相同时 <table align="center" cellpadding="15re ...
 - 理解 Linux 的虚拟内存
			
前言 前不久组内又有一次我比较期待的分享:”Linux 的虚拟内存”.是某天晚上加班时,我们讨论虚拟内存的概念时,leader 发现几位同事对虚拟内存认识不清后,特意给这位同学挑选的主题(笑). 我之 ...
 - PostgreSQL查看表、表索引、视图、表结构
			
-- 表索引select * from pg_indexes where tablename='person_wechat_label';select * from pg_statio_all_ind ...
 - eclipse创建Maven web项目的步骤
			
Maven 是一个项目管理工具,可以对 Java 项目进行构建.依赖管理. Maven 能够帮助开发者完成以下工作: 构建 文档生成 报告 依赖 SCMs 发布 分发 邮件列表 一.环境配置 Mave ...