Haproxy安装及配置文件详解及mysql负载均衡 您所在的位置:网站首页 haproxy启动最简单三个步骤 Haproxy安装及配置文件详解及mysql负载均衡

Haproxy安装及配置文件详解及mysql负载均衡

2024-07-12 15:13| 来源: 网络整理| 查看: 265

Haproxy安装及配置文件详解及mysql负载均衡

每天多学一点点~ 写博客的目的不仅在于分享,也是为了方便日后复习巩固 话不多说,这就开始吧…

文章目录 Haproxy安装及配置文件详解及mysql负载均衡1.序2.Haproxy简介及与Nginx区别3.Haproxy安装4.配置文件详解5.启动并测试6.结语

1.序

最近在国网做数据源项目改造,之前他们的老项目性能遇到了瓶颈,每次一到活动的时候就挂。这里我们提出了用redis缓存+mq削峰限流,但是依然顶不住活动的压力,后来问了之后国网有2个隔离装置,并发量是1000+,每次请求都会走这个,但只用到一个,如果挂了会继续重连,效率低下。遂提出增加隔离装置,并想到用haproxy做负载均衡配置,这里,就简单的用mysql试验一下功能是否可行。(ps:博主之前用的都是Nginx,至于为何这里选用haproxy,后文会提到)

2.Haproxy简介及与Nginx区别

Haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。Haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会保持或七层处理。Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。 与Nginx的区别 Haproxy特点:

支持TCP与Http协议,工作在网络4层和7层支持Session共享、Cookies引导支持通过URL健康检测支持8种负载均衡策略支持心跳检测HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。不支持 Http Cache

Nginx特点

支持Http协议,工作在网络7层支持通过端口健康检测支持强大的正则匹配规则支持WebSocket协议支持Http Cache

对于Http协议,Haproxy处理效率比Nginx高。所以,没有特殊要求的时候或者一般场景,建议使用Haproxy来做Http协议负载!但如果是Web,那么建议使用Nginx ! 博主这里是数据源服务的负载,haproxy的并发高于Nginx,且Nginx工作在7层,解析的时候也比较耗费性能,所以选用Haproxy。

这里博主更正一下,nginx从1.9.0开始也支持四层tcp了。 可以看博主另一边博客 记一次nginx负载均衡遇到的问题

3.Haproxy安装

下载 https://src.fedoraproject.org/repo/pkgs/haproxy/ 下载地址,不需要翻墙。。。。(之前找的网站都说要翻墙,不靠谱) 博主这里选择的是haproxy-1.8.10.tar.gz 版本

解压 tar -xvf haproxy-1.8.10.tar.gz 注意:解压时候不要加 z,因为下载下来的压缩包并不是以gzip格式压缩的

在这里插入图片描述

安装 make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy180 make install PREFIX=/usr/local/haproxy180 参数说明 TARGET=linux26 #内核版本,使用uname -r查看内核,若小于2.6,此时该参数就为linux26;若大于2.6.28的,用:TARGET=linux2628 ARCH=x86_64 #系统位数 PREFIX=/usr/local/haprpxy #/usr/local/haprpxy为haprpxy安装路径 在这里插入图片描述 在这里插入图片描述 执行完之后会出现一个haproxy180的目录 在这里插入图片描述

配置 记不得从哪个版本以后,haproxy安装完之后是没有配置文件的,需要自己手动添加 进入 目录 cd /usr/local/haproxy180/

创建conf目录 mkdir conf ,将配置文件haproxy.cfg写入此目录(此配置文件写的很简单,用于mysql的负载测试,下文会详解配置文件)

global log 127.0.0.1 local2 pidfile /var/run/haproxy.pid maxconn 4000 daemon defaults mode tcp log global option httplog option dontlognull 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 ## 定义一个监控页面,监听在1080端口,并启用了验证机制 listen stats mode http bind 0.0.0.0:1080 stats enable stats hide-version stats uri /haproxyadmin?stats stats realm Haproxy\ Statistics stats auth admin:admin stats admin if TRUE frontend mysql bind *:3307 mode tcp #log global option tcplog default_backend mysqlservers backend mysqlservers balance leastconn server dbsrv1 192.168.73.131:3306 check port 3306 rise 1 fall 2 maxconn 300 server dbsrv2 192.168.73.132:3306 check port 3306 rise 1 fall 2 maxconn 300

192.168.73.131 和192.168.73.132分别是虚拟机的地址 ,3306是虚拟机上mysql的端口

4.配置文件详解 global部分 用于设置全局配置参数,属于进程级的配置,通常与操作系统配置相关 global log 127.0.0.1 local1 info maxconn 4096 user nobody group nobody daemon nbproc 1 pidfile /usr/local/haproxy/logs/haproxy.pid 参数解释log全局的日志配置,local0是日志设备,info表示日志级别。其中日志级别有err, warning, info, debug 4种。这个配置表示使用127.0.0.1上的rsyslog服务中的local0日志设备,记录日志等级为infomaxconn设置每个HAProxy进程可接受的最大并发连接数nbproc设置HAProxy启动时可创建的进程数,此参数要求将HAProxy运行模式设置为daemon,默认只启动一个进程;建议该值设置时小于CPU核数daemon设置HAProxy进程进入后台运行,这是推荐的运行模式user/group设置启动HAProxy进程的用户和组pidfile指定HAProxy进程ID的存放位置 defaults部分 默认参数的配置部分。在些部分设置的参数,默认会自动引用到下面的frontend, backend和listen部分 defaults mode http retires 3 timeout connect 10s timeout client 20s timeout server 30s timeout check 5s 参数解释mode设置HAProxy实例默认的运行模式,有tcp, http, health三个可选值 。(1)tcp模式:在此模式下,客户端和服务器端间将建立一个全双工的连接,不会对七层报文做任何检查,为默认的模式;经常用于SSL, SSH, SMTP等应用。(2) http模式 :在此模式下,客户端请求在转发至后端服务器前将会被深度分析,所有不与RFC格式兼容的请求都会被拒绝 (3) health模式:目前已经被废除retires设置连接后端服务器的失败重试次数,如果连接失败的次数超过该数值,HAProxy会将对应的后端服务器标记为不可用timeout connect设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,但也可以使用其他时间单位作后缀timeout client设置连接客户端发送数据时最长等待时间,默认单位是毫秒,但也可以使用其他时间单位作后缀timeout server设置服务器端回应客户端数据发送的最长等待时间,默认单位是毫秒,但也可以使用其他时间单位作后缀timeout check设置对后端服务器的检测超时时间,默认单位是毫秒,但也可以使用其他时间单位作后缀 frontend部分 用于设置接收用户请求的前端虚拟节点。frontend可以根据ACL规则直接指定要使用的后端backend frontend www bind *:80 mode http option httplog option forwardfor option httpclose log global default_backend htmpool

通过frontend关键字定义了一个名为"www"的前端虚拟节点

参数解释bind此选项用于定义一个或者几个监听的套接字,只能在frontend和listen中定义。格式如下: bind [:[port_range]] [interface]option默认情况下,HAProxy日志是不记录HTTP请求的,此选项的作用是启用日志记录HTTP请求option httplog默认情况下,HAProxy日志是不记录HTTP请求的,此选项的作用是启用日志记录HTTP请求option forwardfor此选项的作用是保证后端服务器可记录客户端真实的IPoption httpclose此选项表示客户端和服务端完成一次连接请求后,HAProxy将主动关闭此TCP连接。这是对性能非常有帮助的一个参数log global表示使用global段中定义的日志格式default_backend htmpool此选项用于指定后端默认的服务器池 backend部分 用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求 backend htmpool mode http option redispatch option abortonclose balance roundrobin cookie SERVERID option httpchk GET /index.php server web1 10.1.1.1:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3 server web2 10.1.1.2:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3

backend用于定义一个名称为htmpool的后端服务器组,根据需要可以定义多个

参数解释option redispatch此参数用于cookie保持的环境中。在默认情况下,HAProxy会将其请求的后端服务器的serverID插入cookie中,以保证会话的session持久性。而如果后端服务器出现故障,客户端的cookie是不会刷新的,这就会造成无法访问。此时,如果设置了此参数,就会将客户的请求强制定向到另外一台健康的后端服务器上,以保证服务正常option abortonclose此参数可以在服务器负载很高的情况下,自动结束当前队列中处理时间比较长的连接balance roundrobin指定负载均衡算法cookie SERVERID表示允许向cookie插入SERVERID,每台服务器的SERVERID可在下面的server关键字中使用cookie关键字定义option httpchk此选项表示启用HTTP的服务状态检测功能。格式如下:option httpchk [method] [uri ] [version]method表示HTTP请求的方式,常用的有OPTIONS,HEAD, GET几种方式。一般的健康检查可以采用HEAD方式进行,而不是采用GET方式,这是因为HEAD方式没有数据返回,仅检查响应报文的状态码是不是200.因此相对于GET, HEAD的方式更简单、更快uri表示要检测的URL地址version指定心跳检测时的HTTP的版本号

其中,负载均衡算法包括:

算法名称解释roundrobin基于权重进行轮叫调度的算法static-rr基于权重进行轮叫调度的算法,不过此算法为静态算法,在运行时调整其服务器权重不会生效source基于请求源IP的算法。此算法先对请求的源IP进行HASH运算,然后将结果与后端服务器的权重总数相除后转发至某台匹配的后端服务器。这种方式可以使同一个客户端IP的请求始终转发到某特定的后端服务器leastconn此算法会将新的连接请求转发到具有最少连接数目的后端服务器。在会话时间较长的场景中推荐使用此算法 ,例如数据库负载均衡uri此算法会对部分或整个URI进行HASH运算,再经过与服务器的总权重相除,最后转发到某台匹配的后端服务器上uri_param此算法会根据URL路径中的参数进行转发,这样可保证在后端真实服务器数据不变时,同一个用户的请求始终分发到同一台机器上hdr此算法根据HTTP头进行转发,如果指定的HTTP头名称不存在,则使用roundrobin算法 进行策略转发

server web1 10.1.1.1:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3 表示: server用于定义多台后端真实服务器,不能用于frontend和listen段 格式如下: server name address :[port] [param*] name: 为后端真实服务器指定一个内部名称,随便定义一个即可 address:port : 指定后端服务器的IP地址及端口 param*参数 常用的参数: check 表示启用对此后端服务器执行健康状态检查 inter 设置健康状态检查的时间间隔,单位是毫秒 rise 检查多少次认为服务器可用 fall 检查多少次认为服务器不可用 weight 设置服务器的权重,默认为1, 最大为256。 设置为0表示不参与负载均衡 backup 设置备份服务器,用于所有后端服务器全部不可用时 cookie 为指定的后端服务器设置cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的后端服务器将在后续的请求中一直被选中,其目的在于实现持久连接的功能

listen部分 此部分是frontend和backend部分的结合体 listen admin_status bind 0.0.0.0:9188 mode http log 127.0.0.1 local0 err stats refresh 30s stats uri /haproxy-status stats realm Welcome login stats auth admin:admin stats hide-version stats admin if TRUE

listen部分用于配置HAProxy监控页面相关的参数

参数解释stats refresh 30s设置HAProxy监控统计页面自动刷新的时间stats uri /haproxy-status设置HAProxy监控页面访问的URI路径stats realm Welcome login设置登录监控页面时,密码框上的提示信息stats auth admin:admin设置登录监控页面的用户名,密码。用户密码用冒号隔开,可以设置多个,每行一个stats hide-version设置在监控页面上隐藏HAProxy的版本号status admin if TRUE设置此选项,可在监控页面上启用、禁用后端服务器,仅在1.4.9版本以后生效 5.启动并测试 启动 cd /usr/local/haproxy180/sbin 目录下,以配置文件方式启动 sudo ./haproxy -f ../conf/haproxy.cfg

在这里插入图片描述 2. 登陆监控界面 http://192.168.73.132:1080/haproxyadmin?stats 1080端口和haproxyadmin?stats 路径是在上文的配置文件中配置好的,账号密码都是admin 在这里插入图片描述 3. springboot测试mysq负载均衡 在这里插入图片描述 jdbc:mariadb://192.168.73.132:3307/shiro 3307是两个hapoxy映射的mysql端口 在这里插入图片描述 用jmeter模拟100个线程,运行插入的方法,因为配置了leastconn 算法,看看每个库里面分别插入了多少数据。 在这里插入图片描述 查看mysql

131的mysql 43条 在这里插入图片描述 132的mysql 57条

在这里插入图片描述

大功告成~撒花

小记:其实一般Haproxy都是用在mysql集群上,或者一主多从上,分发mysql的连接数,提高并发;博主这里只是用mysql测试一下,真正的场景也是隔离装置,切莫用于mysql直接插入,因为基本没有这种场景!!!

6.结语

世上无难事,只怕有心人,每天积累一点点,fighting!!!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有