haproxy最主要的功能,无非就是nginx的proxy的功能,所以从这个角度来讲,haproxy是一款代理服务器,或者称为伪4层的负载均衡器软件解决方案,名字虽然叫ha,但是自身并没有ha功能,在讲负载均衡的时候提到过,如果前端主机对后端服务器主机健康有检测能力,而后端主机不止一个的时候,这时会导致一个结果,某单台服务器出现故障,并不会导致整个服务不可用,所以能够在一定程度上带来ha的功用,因此把它称作haproxy
haproxy和nginx不同的地方在于haproxy仅仅是一个负载均衡器或http代理服务器,代理完后也可以做负载均衡,所以是一个七层的负载均衡器(就看前端服务器要不要写在ssl)
负载均衡解决方案,开源有如下
如果中小站点,工作在七层模型上的时候,工作逻辑如下,当用户请求到达负载均衡服务器时,负载均衡器应该以web服务为cluster,主站程序是动态的话,应该会把这部分内容发送给主站服务器,假如是动态的话,请求是直接到动态服务器,对动态服务器来讲 程序是由指令加数据组成的,所以在服务器上部署的页面文件都通常是指令,是程序文件本身,而数据通常在后端的存储当中(关系型数据库,mariadb,oracle,非关系型mongodb,json格式的)
web2.0时代,缓存是提高速度的关键
数据存在空间局部性和时间局部性,所以存在热区,这些热区数据存放在缓存中,就足够承载百分之80 的访问了
后端做图片存储的比如nginx或者lucky,轻量级的web服务器程序,这种web服务器程序有可能允许服务器上传图片
所以就应该有个分布式存储系统的集群用来存储这些,(动态服务器完成(增删改)操作和静态服务器(读取)都需要链接)
haproxy工作在何处,能实现怎么样的工用,nginx做负载均衡和代理服务器都可以,因此整个集群的接口,haproxy是可以使用的,也能做动静分离和各种功能,同时haproxy工作在tcp模式下,也能够做,能承担非web应用,比如mysql,因此在各种位置,在任何位置,都能做负载均衡的软件,所以haproxy跟nginx的stream模块一样,能够调度众多服务,需要用到这些软件的高级功能,而无需管理过大的并发,他们比lvs更加实用,
因为haproxy基于tcp协议,可以调度fastcgi,http,mysql协议都没问题,所以haproxy的适用率是还是非常多的,那么用nginx还是haproxy呢,取决于你的前任,前任给你留下了什么样的环境,你所运维的就是什么环境 ,如果需要改造接口时,就另当别论,
(日常工作就是发布,变更(配置文件的参数做调整,每天调整,需要经过多次调整才能达到一个最佳适用的参数,关闭445,和130),故障处理(一般来讲一台服务器1000天是要坏一次的,坏的概率是千分之1,一般入职会给你签协议,任何时候出现故障,你的手机都要在线,午夜凶铃))
某东,某淘宝,运维工具非常完善,内部人员只需要看清楚监控,各种故障怎么在线上处理就可以了,越大的公司,你就越是螺丝钉,(没有固定靠谱的范围,只要靠谱的自己的能力)
github,代码托管管理站点
支持tcp和http协议的反代1
1.基于静态的cookie来完成http协议的请求和调度
2.可以基于所谓的服务器端口的持久来实现负载均衡
haproxy有了商业版本以后就进入了快速的版本迭代更新
haproxy跟keepalived一样在centos6。4开始都收入到base仓库了,随系统发行光盘直接提供
(nginx没有,nginx还是epel源)
现在看文档
starter guide 开始指南,configuration manual 配置手册,managerment guiede管理指南
haproxy的配置指令非常多
程序环境,先让haproxy负载web服务器集群为例,七层反向代理,后端的主机应该都是用私有地址
unit file对centos7来讲是个重要文件
nginx中代理是没有一一对应关系的,称为server
对haproxy称为frontend(定义如何接受用户请求server的,backend定义后端服务器归位组,来进行负载均衡调度)
前后端有些都用到的,就可以作为默认值default
前端和后端一一对应,只负责一个调度,haproxy可以定义为listen
这个四个称为代理的定义
程序自身配置段都在global中
安装haproxy的文件数量
错误页
代理配置段的默认值
假如现在要配置一个简单的负载均衡集群,准备两个后端服务器,配置成web服务
一定要记得先同步时间
先提供测试页*在负载均衡里,页面必须一摸一样)
另外一台主机也同理
测试正常
尝试做配置,让haproxy代理后端两台服务器
main代表主server或者默认server
定义一个名字只要不跟其他frontend名字相同就可以
默认后端服务器是谁
删除部分内容
balance 是负载均衡的调度算法 roundrobin static的标识符只在haproxy使用,跟后端主机没有关系,起个名字
check对后端服务器做健康状态监测
现在就可以来尝试启动了
可以用tnlp查看谁监听的
也可以使用bind来定义监听地址端口
定义好后就可以直接查询访问了
一个简单的负载均衡集群就配置好了
在server背后有很多参数可以设定服务器的自己监听的一些权重之类的
这是web服务集群,如果要定义别的集群的话,把端口修改一下,只要把mode改一下就可以了,
mode是定义工作在7层还是4层的,工作在7层们通常只能负载均衡web服务,(如果后端是mysql怎么办,这时候就要工作在tcp模式下)
先启动后端mysql服务,并允许远程连接
当前用户是root
另外一个主机也提供一个一模一样的账号
测试一下node3连接node2
现在试试能否给mysql做负载均衡操作
现在添加一个mode
监听端口3306
后面服务器地址,,mysql1
对于长连接来讲,避免使用roundrobin调度,应该使用最少链接leastpost
重启服务
连不上可能是因为mysql工作原理有关系
global代表全局,haproxy对全局配置段,有三段指令
第一类是与进程相关的参数
第二类是与性能调整相关的
第三类是debug(启动的时候根据其他的性能指标应该使用什么参数为最佳,会自动的去设定,这比自己设定好很多,自己设定会导致资源不足,多的话,会导致资源浪费,因此我们无须为haproxy做过多的设置)
但是有这么几个参数需要了解
log(定义日志系统发往何处,127.0,。0.1当前主机的日志服务器地址,
local2指日志Facility)
对于linux程序来讲,大部分应用程序都需要记录日志,每个应用程序分别记录日志挺烦的,因此为了帮助诸多应用程序记录日志,就有一个专门的日志服务syslog(早期单进程,并发非常有效,centos5以后用rsyslog支持多线程,tcp
Facility设施)Facility就是把日志归类,来源是何处,来源于守护进程的统统归为一类,通告一个代理人信道来记录到一个 文件中,这样说明就是一类日志
把用户登录的日志由第二个代理人收集到第二个日志文件中
这种就叫facility,负责把日志记录在指定的目标处,这个目标可能是个文件,也可能是个存储,也可能是一个用户,可以把信息发送给用户
后面存放的位置都是由facility来定义的
每个应用程序产生的日志非常多,我们也没有必要把所有的日志都记录下来,只记录一些关键事件
就需要定义priority优先级
从local0-7,用户自定义的facility
前面是facility,.后面是priority
现在可以定义local2
.*.是可以的,有些应用程序可以指定级别,如果没指定级别,在这里也是可以定义的
所有配置必须放到配置段下,放在其他位置是不能生效的
监听套接字
配置服务就配置ok了
这里就是定义,日志送给哪个服务器的那个facility
如果代理服务器需要自己生成日志,可以在自己的服务器上定义
运行在一个切跟下,万一haproxy被劫持了,破坏的就是你的跟系统
所以把haproxy禁锢在/var/lib/haproxy跟下,其实这个目录什么也没有,不能危害到真正的跟
现在很多应用都跑在容器当中或者虚拟机上,破坏的也仅是虚拟机
最大并发连接数
以哪个身份来运行子进程
手动检测模式
用哪个文件来实现本地保存去访问stats页面,unit socket文件路径