技术标签: Linux
• 它是免费、快速并且可靠的一种解决方案
• 适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理
• 提供高可用性、负载均衡以及基于TCP和HTTP应用的代理
• Session rate 会话率
– 每秒钟产生的会话数
• Session concurrency 并发会话数
– 服务器处理会话的时间越长,并发会话数越多
• Data rate 数据速率
– 以MB/s或Mbps衡量
– 大的对象导致并发会话数增加
– 高会话数、高数据速率要求更多的内存
• mode http
– 客户端请求被深度分析后再发往服务器
• mode tcp
– 客户端与服务器之间建立会话,不检查第七层信息
• mode health
– 仅做健康状态检查,已经不建议使用
• 当HAProxy运行在HTTP模式下,HTTP请求(Request)和响应(Response)均被完全分析和索引,这样便于创建恰当的匹配规则
• HTTP协议是事务驱动的
• 每个请求(Request)仅能对应一个响应(Response)
• 常见模型:
– HTTP close
– Keep-alive
– Pipelining
• HTTP close
– 客户端向服务器建立一个TCP连接
– 客户端发送请求给服务器
– 服务器响应客户端请求后即断开连接
– 如果客户端到服务器的请求不只一个,那么就要不断的
去建立连接
– TCP三次握手消耗相对较大的系统资源,同时延迟较大
• Keep-alive
– 一次连接可以传输多个请求
– 客户端需要知道传输内容的长度,以避免无限期的等
待传输结束
– 降低两个HTTP事务间的延迟
– 需要相对较少的服务器资源
• Pipelining
– 仍然使用Keep-alive
– 在发送后续请求前,不用等前面的请求已经得到回应
– 适用于有大量图片的页面
– 降低了多次请求之间的网络延迟
• 请求头部信息
– 方法:GET
– URI:/serv/login.php?lang=en&profile=2
– 版本:HTTP/1.1
– 请求头包含许多有关的客户端环境和请求正文的有用
信息,如浏览器所使用的语言、请求正文的长度等
• 响应头部信息
– 版本:HTTP/1.1
– 状态码:200
– 原因:OK
1台haproxy
192.168.4.10
2台应用服务器
201.1.1.102
201.1.1.103
[[email protected] ~]# ip a del dev lo 201.1.1.101/32
[[email protected] ~]# yum install haproxy
• HAProxy配置参数来源
– 命令行:总是具有最高优先级
– global部分:全局设置进程级别参数
– 代理声明部分
• 配置文件可由如下部分构成:
– default
为后续的其他部分设置缺省参数
缺省参数可以被后续部分重置
– frontend
描述接收客户端侦听套接字(socket)集
– backend
描述转发链接的服务器集
– listen
把frontend和backend结合到一起的完整声明
[[email protected] haproxy]# vim haproxy.cfg
-
global
-
log
127.0
.0
.1 local2
###[err warning info debug]
-
chroot /usr/local/haproxy
-
pidfile /
var/run/haproxy.pid
###haproxy的pid存放路径
-
maxconn
4000
###最大连接数,默认4000
-
user haproxy
-
group haproxy
-
daemon
###创建1个进程进入deamon模式运行
-
-
defaults
-
mode hEp
###默认的模式mode { tcp|hEp|health } log global ###采用全局定义的日志
-
opIon dontlognull
###不记录健康检查的日志信息
-
opIon hEpclose
###每次请求完毕后主动关闭hEp通道
-
opIon hEplog
###日志类别hEp日志格式
-
opIon forwardfor
###后端服务器可以从HEp Header中获得客户端ip
-
opIon redispatch
###serverid服务器挂掉后强制定向到其他健康服务器
-
Imeout connect
10000
#如果backend没有指定,默认为10s
-
Imeout client
300000
###客户端连接超时
-
Imeout server
300000
###服务器连接超时
-
maxconn
60000
###最大连接数
-
retries
3
###3次连接失败就认为服务不可用,也可以通过后面设置
-
-
listen stats
-
bind
0.0
.0
.0:
1080
//监听端口
-
stats refresh
30s
//统计页面刷新时间
-
stats uri /mystats
//统计页面url密码
-
stats realm Haproxy manager
//统计页面密码框上提示文本
-
stats auth admin:admin
//统计页面上用户名和密码
-
-
listen websrv
0.0
.0
.0:
80
//定义监听后端的web
-
cookie SERVERID rewrite
-
balance roundrobin
-
server web1
192.168
.4
.11:
80 cookie app1inst1 check inter
2000 rise
2 fall
5
// inter 2000 每2s检查一次 rise 2 检测2次成功才认为成功 fall 5 检测5次失败才认为失败
-
server web2
192.168
.4
.12:
80 cookie app1inst2 check inter
2000 rise
2 fall
5
// inter 2000 每2s检查一次 rise 2 检测2次成功才认为成功 fall 5 检测5次失败才认为失败
[[email protected] ~]# systemctl start haproxy
刷新————>
所有的日志由rsyslog进行管理
为了配置haproxy的日志,需要修改/etc/rsyslog.conf.
支持远端日志功能修改配置文件:
host80 ~]# vim /etc/rsyslog.conf
ModLoadimudp【把这两行注释取消】 M o d L o a d i m u d p 【 把 这 两 行 注 释 取 消 】 UDPServerRun 514
local2.* /var/log/haproxy.log
类型.级别
systemctl restart rsyslog
systemctl restart haproxy
ls /var/log/haproxy.log
后端服务器日志要显示客户端真实IP,这个客户端IP是存放在请求头里面的【可以通过curl -I IP地址查看】。而不显示代理服务器IP,可以通过修改httpd配置文件实现。
vim /etc/httpd/conf/httpd.conf
196 LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
systemctl restart httpd
tail -f /var/log/httpd/access_log
Keepalived概述
• 调度器出现单点故障,如何解决?
• Keepalived实现了高可用集群,这种高可用是通过提供VIP来实现的
• Keepalived最初是为LVS设计的,专门监控各服务器节点的状态
• Keepalived后来加入了VRRP(虚拟路由冗余协议)功能,防止单点故障
Keepalived运行原理
• Keepalived检测每个服务器节点状态
• 服务器节点异常或工作出现故障, Keepalived将故障节
点从集群系统中剔除
• 故障节点恢复后,Keepalived再将其加入到集群系统中。还能实现邮件报警
• 所有工作自动完成,无需人工干预
健康的主机会定时发送多波信号,发送多波信号是为了检测集群关系的,当一个keepalive坏了的时候,另外一个可以夺取对方资源。继续发送多波信号
• 使用Keepalived高可用解决调度器单点失败问题
• 主、备调度器上配置LVS
• 主调度器异常时,Keepalived启用备用调度器调度器
常用的HA集群
keepalived
rhcs
pacemaker + corosync
1. 环境的准备
rs1:201.1.1.102
rs2:201.1.1.103
ds1:201.1.1.100
ds2:201.1.1.99
vip:201.1.1.101
client:201.1.1.254
2. 在2台调度器(99和100)上安装软件:
[[email protected] yum.repos.d]# yum install keepalived
[[email protected] yum.repos.d]#yum -y install ipvsadm.x86_64
健康检测测试:
停掉其中一个real server的httpd服务
HA的测试:
停掉主服务的keepalived服务
vip配置成不抢占,修改配置文件
state BACKUP
nopreempt
LVS+keepalive高可用
环境准备
client:201.1.1.254
ds1:201.1.1.100
ds2:201.1.1.99
rs1:201.1.1.102
rs2:201.1.1.103
1.装包
[[email protected] ~]# yum -y install kepalived
[[email protected] ~]# yum -y install kepalived
2.修改配置文件(99和100)
1)LVS1调度器设置Keepalived,并启动服务
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected] //设置报警收件人邮箱
}
notification_email_from [email protected] //设置发件人
smtp_server 127.0.0.1 //定义邮件服务器
smtp_connect_timeout 30
router_id ds1 //设置路由ID号
}
vrrp_instance VI_1 {
state BACKUP
nopreempt //不抢占VIP
interface eth0 //定义网络接口
virtual_router_id 50 //主辅VRID号必须一致
priority 100 //服务器优先级
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主辅服务器密码必须一致
}
virtual_ipaddress { 201.1.1.101 }
}
virtual_server 201.1.1.101 80 { //设置VIP为201.1.1.101
delay_loop 6
lb_algo wrr //设置LVS调度算法为RR
lb_kind DR //设置LVS的模式为DR
persistence_timeout 1
protocol TCP
real_server 201.1.1.102 80 {
weight 1 //设置权重为1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 201.1.1.103 80 {
weight 1 //设置权重为1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
[[email protected] ~]# systemctl start keepalived
[[email protected] ~]# ipvsadm -Ln
curl http://201.1.1.101
debug:
1. ping 201.1.1.101
2. 在ds服务器,ipvsadm -ln,如果看不到规则,则:
1) 检查keepalived配置文件
2)检查real server的httpd服务是否启动
3. 检查real server是否绑定了vip,以及是否调整了内核参数
haproxy实现的是负载均衡的集群
keepalive实现的是高可用的集群
2台haproxy实现HA
2台应用服务器—httpd
1台client
haproxy1(ds1) – 201.1.1.100
haproxy2(ds2) – 201.1.1.99
vip: 201.1.1.101
rs1:201.1.1.102
rs2:201.1.1.103
2.修改配置文件(99和100)
global_defs {
router_id directorServer2
}
vrrp_instance VI_1 {
state SLAVE
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.253
}
}
通过脚本对haproyx做健康检查:
cat check_haproxy_status.sh
curl -I localhost &> /dev/null
if [ $? -ne 0 ];then
systemctl stop keepalived
fi
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id ds1
}
vrrp_script check_haproxy {
script “/etc/keepalived/check_haproxy_status.sh”
inerval 5
}
vrrp_instance VI_1 {
state BACKUP
………
………
track_script {
check_haproxy
}
}
• 优点
– 工作在7层,可以针对http做分流策略
– 正则表达式比HAProxy强大
– 安装、配置、测试简单,通过日志可以解决多数问题
– 并发量可以达到几万次
– Nginx还可以作为Web服务器使用
• 缺点
– 仅支持http、https、mail协议,应用面小
– 监控检查仅通过端口,无法使用url检查
• 优点
– 负载能力强,工作在4层,对内存、CPU消耗低
– 配置性低,没有太多可配置性,减少人为错误
– 应用面广,几乎可以为所有应用提供负载均衡
• 缺点
– 不支持正则表达式,不能实现动静分离
– 如果网站架构庞大,LVS-DR配置比较繁琐
• 优点
– 支持session、cookie功能
– 可以通过url进行健康检查
– 效率、负载均衡速度,高于Nginx,低于LVS
– HAProxy支持TCP,可以对MySQL进行负载均衡
– 调度算法丰富
• 缺点
– 正则弱于Nginx
– 日志依赖于syslogd,不支持apache日志
BinTree Insert( BinTree BST, ElementType X ){ if(!BST){ BST=(BinTree)malloc(sizeof(BinTree)); BST->Data=X; BST->Left=BST->Right=NULL; } else { if(XData) BST->Left=Insert(BST->Left,X);
1.打嗝的时候,舌头下面含白糖!打嗝的时候 捏着鼻子喝水 就好了,打嗝的时候用大拇指用力掐中指指腹。就不会了 2.每天用红红的上海药皂洗脚,洗袜子鞋垫神秘的,可以去脚臭。 3.芒果在煤气上转几秒,那皮就很好剥了 4.番茄怕有农药,用开水烫下,皮就剥下来了 5.说个地球人都知道的,如果衣物上不小心滴上了油,在洗衣服之前,保持衣服是干的,然后在滴油的地方滴上洗洁精,再搓两下,洗...
Java 解析Pcap文件(2)@author:[email protected]:2021.03.11前面介绍了Pcap文件的结构并对Pcap文件的 Global Header 和 Packet Header进行了解析,接下来就是对Packet Data 即数据链路层的帧进行解析了。数据链路层解析Pcap包的Packet Data就是数据链路层的帧,可以根据前面的Packet Header 中的 capLen 字段知道对应的Packet Data 数据的字节数,从而进行读取。这里仅仅以以太网的帧为例进
转自西瓜书《机器学习》上节我们介绍了支持向量机的基本型及其推导过程,这节我们对基本型求解。上节我们推导的模型为我们希望求解上式来得到大间隔划分超平面所对应的模型其中w,b是模型参数,注意到式(1)本身是一个凸二次规划问题。能直接用现成的优化计算包求解,但我们可以有更高效的方法。简单介绍一下凸二次规划,转自博客二次规划(quadratic programming)二次规划是指,带有二次型目标函数和约...
一、DVS (Digital Video Server)网络视频服务器的简称。DVS(网络视频服务器)的原理 网络视频服务器主要实现模拟视音频信号的IP化。经数字化的视音频信号MPEG-4 视频压缩算法和G.729/ADPCM 音频压缩算法进行压缩编码,然后通过IP网将低码率的视音频编码数据以IP 包的形式传送给多个远端PC或网络视频×××,实现视音...
一只小狐狸带你解锁炼丹术&NLP秘籍作者:孙树兵学校:河北科技大学方向:QA/NLU/信息抽取编辑:小轶背景文本纠错(Spelling Error Correction)技术常用...
com.dao;importjava.util.List;importjava.util.Map;importorg.apache.ibatis.session.RowBounds;importcom.model.Student;public interfaceStudentMapper {/*** 分页查询*/public List selectall(RowBounds rb);//需要传Ro...
demo apk下载:链接: http://pan.baidu.com/s/1eQgurse 密码: g91r截图: 动画效果介绍:1.点击ActionBar上“+”按钮,菜单从上方弹出(带反弹效果);2.再次点击“+”、点击空白区域或者点击返回键,菜单向上方收起;3.点击弹出框上的按钮时,该按钮放大,其它按钮缩小,菜单整体渐变退出。主体代码:1.Activity./*** 仿易信动画弹出框*/p...
poj2456 题意大概就是有M头牛,N个牛舍,表示牛舍的数组x[i].要求将M头牛放进这N个牛舍,并且使牛之间的距离尽可能大。策略就是二分+贪心。网址。#include#include/*531 2 8 4 9*/using namespace std;int N, M;//N为牛舍数 M为牛数量const int MAX_N = 100000;int x[MAX_
FlowLayoutPanel flowLayoutPanel; private void Form1_Load(object sender, EventArgs e) { flowLayoutPanel = new FlowLayoutPanel(); flowLayoutPanel.BackColor = Color.Red; flowLayoutPanel.Location = n...
2018年对于酒店业而言有很多年度词汇,而其中人工智能就是贯穿始终不变的话题,各大酒店集团纷纷发力,生怕自己输在起跑线上:洲际酒店集团洲际酒店集团携旗下豪华酒店品牌洲际酒店及度假村与百度共同打造的新一代智慧酒店解决方案正式落地。香格里拉集团腾讯与香格里拉集团签署战略协议,双方的战略合作将基于腾讯领先的技术优势和连接能力,结合香格里拉集团在酒店和商业领域的运营经验与资源,助推传统酒店模式的...
HTML概述英文全称:Hyper Text Markup Language中文全称:超文本标记语言网页主要有三部分组成:结构,表现和行为HTML:结构,决定网页的结构内容(“是什么”)CSS:表现(样式),设定网页的表现样式(“什么样子”)JavaScript:行为,控制网页的行为(“做什么”)doctype三种解析模式:1、IE6/7准标准模式 ...