haproxy+keepalived实现负载均衡及高可用
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高性能性、负载均衡,以及基于TCP和HTTP的应用程序代理。相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康状态检测机制和负载均衡算法。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter在内众多知名网站,及亚马逊网络服务系统都使用了HAProxy。
Haproxy的特性:
1、可靠性与稳定性都非常出色,可与硬件级设备媲美。
2、支持连接拒绝,可以用于防止DDoS***
3、支持长连接、短连接和日志功能,可根据需要灵活配置
4、路由HTTP请求到后端服务器,基于cookie作会话绑定;同时支持通过获取指定的url来检测后端服务器的状态
5、HAProxy还拥有功能强大的ACL支持,可灵活配置路由功能,实现动静分离,在架构设计与实现上带来很大方便
6、可支持四层和七层负载均衡,几乎能为所有服务常见的提供负载均衡功能
7、拥有功能强大的后端服务器的状态监控web页面,可以实时了解设备的运行状态,还可实现设备上下线等简单操作。
8、支持多种负载均衡调度算法,并且也支持session保持。
有关keepalived请参看博客:http://13150617.blog.51cto.com/13140617/1979652
实验:实现基于Haproxy+Keepalived负载均衡高可用架构
1、准备四台机器:两台用于haproxy主从架构,两台作为后端server
haproxy-master:两块网卡,桥接模式和仅主机模式都有
VIP:172.17.111.10
haproxy-backup:两块网卡,桥接模式和仅主机模式都有
VIP:172.17.111.10
后端server1:仅主机网卡:RIP:192.168.199.146
后端server2:仅主机网卡:RIP:192.168.199.143
2、在haproxy-master上操作
①安装keepalived,配置keepalived。
具体参数含义请参看博客:http://13150617.blog.51cto.com/13140617/1979652
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 2
router_id LVS_DEVEL2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 33
# nopreempt
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 111111
}
virtual_ipaddress {
172.17.111.10
}
}
systemctl start keepalived 启动服务
②配置日志服务
vim /etc/rsyslog.conf
$ModLoad imudp 开启UDP的日志服务,也可以开启TCP
$UDPServerRun 514
local2.* /var/log/haproxy.log 定义日志标准
systemctl restart rsyslog 重启日志服务
③配置haproxy
vim /etc/haproxy/haproxy.cfg
global 全局配置
log 127.0.0.1 local2 日志类型
chroot /var/lib/haproxy 修改haproxy的工作目录
pidfile /var/run/haproxy.pid 进程id
maxconn 4000 最大连接数
user haproxy 运行用户
group haproxy 所属组
daemon 让haproxy以守护进程的方式工作
stats socket /var/lib/haproxy/stats可开启一个unix socket管理接口
defaults
mode http 实现http的7层规则
log global 日志定义,沿用global的日志定义
option httplog 启用日志记录HTTP请求
option dontlognull 日志中将不会记录空连接
option http-server-close 强制短连接
option forwardfor except 127.0.0.0/8 添加xforward日志标记
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 #基于http协议
bind 0.0.0.0:1080 #监听1080端口
stats enable #开启统计报告服务
stats hide-version #隐藏统计报告版本信息
stats uri /haproxyadmin #统计报告访问url
stats realm Haproxy\ Statistics #页面登陆信息
stats auth admin:admin #验证账号信息
stats admin if TRUE #验证模式
frontend http-in 定义一系列监听的套接字
bind *:80
default_backend app
backend app 定义一系列“后端”服务器
balance roundrobin
option httpchk /index.php 检查页面
server app1 192.168.199.146:80 check inter 3000 rise 3 fall 3
server app2 192.168.199.143:80 check inter 3000 rise 3 fall 3
systemctl start haproxy 启动haproxy服务
④开启转发
echo 1 > /proc/sys/net/ipv4/ip_forward
3、在haproxy-backup上操作
①安装keepalived,配置keepalived
vim /etc/keepalived/keepalived.conf
配置基本同上,只需要修改state的状态为BACKUP
systemctl start keepalived 启动服务
②配置日志服务
完全同上
③配置haproxy
完全同上
④开启转发
echo 1 > /proc/sys/net/ipv4/ip_forward
4、测试keepalived高可用:当主服务器正常工作时,VIP在主服务器上,当关闭主服务器的keepalived服务,VIP会漂移到从服务器上,而且网站照常可以访问
关闭主服务器后IP漂移:
测试haproxy:
访问:http://172.17.111.10:1080/haproxyadmin 查看统计报告,都正常
实验二、通过ACL指定可访问的用户
在frontend中加入
acl myhost src 172.16.100.1 指定可访问的ip
acl myport dst_port 80 指定目标端口
block if ! myhost myport 拒绝其他主机访问
重启haproxy服务:systemctl restart haproxy
测试:在添加此acl之前,其他主机可以访问
添加此acl之后就不能访问了
实验三、根据用户访问内容实现动静分离
在frontend中加入
acl url_static path_beg -i /data /p_w_picpaths /javascript /stylesheets /themes 匹配开头
acl url_static path_end -i .jpg .gif .png .css .js .jpeg 匹配后缀
use_backend static if url_static 如果符合条件就匹配到static中所定义的服务器
backend static 定义“后端”服务器
balance roundrobin 轮询
server static1 192.168.199.146:80 check
server static2 192.168.199.143:80 check
重启haproxy服务:systemctl restart haproxy
效果:所有的图片等静态页面就会被分配到这两个server里
实验四、实现真实日志记录
defaults里添加
option forwardfor except 127.0.0.0/8
那么查看nginx的日志就会看到访问该服务器的真实的客户端IP
实验五、实现会话保持
在backend中的server中插入cookie,比如
server app1 192.168.199.146:80 cookie haha check inter 3000 rise 3 fall 3
server app2 192.168.199.143:80 cookie hehe check inter 3000 rise 3 fall 3
那么访问过app1服务器的主机就会被标记为haha(在cookie中插入此标记),下次访问时直接被调度到同一台机器,但是在到达服务器之前cookie会被清理。如果该服务器宕机了,那么会被重新标记到别的服务器。
感谢浏览,如有疑问,欢迎留言。
转载于:https://blog.51cto.com/13150617/1980419
haproxy+keepalived实现负载均衡及高可用相关推荐
- nginx日志打印header_小水敲黑板--Nginx+Keepalived实现负载均衡和高可用
介绍: keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived是自动完成,不需人工干涉.主要提供loadb ...
- 用haproxy结合keepalived实现基于LNMP的负载均衡和高可用
今天我们讲haproxy结合keepalived实现LNMP的负载均衡和高可用,现在的公司大部分都基于haproxy实现负载均衡.下面以一个事例去给大家详细讲解如何去实现: 一.用haproxy结合k ...
- keepalived介绍和keepalived实现nginx负载均衡机高可用
1. keepalived简介 1.1 keepalived是什么? Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...
- Haproxy+Keepalived实现负载均衡
Haproxy+Keepalived实现负载均衡 HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAPr ...
- nginx负载均衡和高可用
代理和负载均衡的区别 代理负责把连接请求直接转发到后台某个web节点 负载均衡负责把请求使用某种调度算法分散发布给后台所有web节点 ----------------------------- ...
- LVS实现负载均衡及高可用
LVS实现负载均衡及高可用 1 实验环境 1.1 虚拟机最小化封装 1.1.1 虚拟机母机安装 1.1.2 清理和压缩母机 1.1.3 创建子机 1.2 名词理解 2 lvs的工作模式 2.1 NAT ...
- 微服务负载均衡实现高可用_使用负载平衡实现大容量可用性
微服务负载均衡实现高可用 Written by Yona Gidalevitz 由Yona Gidalevitz撰写 Most users of the web are blissfully unaw ...
- TCP接入层的负载均衡、高可用、扩展性架构
转载自 TCP接入层的负载均衡.高可用.扩展性架构 一.web-server的负载均衡 互联网架构中,web-server接入一般使用nginx来做反向代理,实施负载均衡.整个架构分三层: 上游调用层 ...
- Ansible(四)ansible roles实现(apache+haproxy+keepalived)负载均衡+高可用
1.ansible roles简介 <1> roles 用于层次性.结构化地组织playbook. <2> roles 能够根据层次型结构自动装载变量文件.tasks以及han ...
最新文章
- 武汉大学计算机学院放假时间,计算机学院关于2019年学生放暑假的通知
- python输入字符串转换为公式_python从字符串转换为boolean ?
- [Android] Gradle 安装
- 发表论文不用愁,十大技巧治秃头
- Microsoft .NET Pet Shop 4 架构与技术分析(转)
- php mysql 分组 分页_简单的PHP+Mysql实现分页
- 005 form组件---基本使用.
- 第三十六期:学 Java 网络爬虫,需要哪些基础知识?
- STM32 软件模拟 IIC 代码,标准库、HAL库可用
- 互联网日报 | 2021年春运火车票今起开抢;好未来达成33亿美元私人配售协议;盒马mini开进菜场...
- 将EnyimMemcached从.NET Core RC1升级至RC2
- java全局变量加锁_Java锁Synchronized,对象锁和类锁举例
- LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)
- 编程实现计算n!,键盘输入n
- 绿厂Oppo年终刚刚开奖!只有去年的3-5折,员工心态炸了!
- 每日一分享C语言代码(The first day)
- 关于11月28日CSDN遭受网络攻击的情况说明
- vue高德地图点击放大Maker
- python爬虫真假网址,python爬取福利网站图片完整代码,懂得人都懂
- oj题目 P1809 wzy的跑步
热门文章
- 双向链表(带头结点)
- 找规律万能公式_有一个万能公式,可以帮你解决任何烦恼!
- fastjson 不转某些字段_全面总结Fastjson过滤字段、排除字段的5种方法(含示例)...
- php phpexcel用法,PHPExcel用法总结
- tos重装mysql_云服务器(腾讯云)从零开始部署记录(3)之mysql5.7安装
- android getter不起作用,java - 如何在Android Studio中自动生成getter和setter
- mysql 不指定 长度吗_mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...
- python动态映射_Python Django框架url反向解析实现动态生成对应的url链接示例
- 用友邮件撤回怎么操作_用户体验原则——“操作可控”
- 1113: 递归调用的次数统计(函数专题)