1、准备
| 服务器 | 作用 |
|---|---|
| 192.168.0.1 | haproxy |
| 192.168.0.2 | mysql |
| 192.168.0.3 | mysql |
haproxy下载地址:https://www.haproxy.org
2、haproxy简介
haproxy 是一个使用c语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于 tcp 和 http 的应用程序代理。
相较与 nginx,haproxy 更专注与反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康状态检测机制和负载均衡算法。
haproxy 是工作在四层之上的,这也就意味着它可以代理的服务要比 nginx 更广泛,性能比 nginx 也要更高一些。
相比较 lvs,可配置性又比较好,需要的机器没有 lvs 那么多。因此 haproxy 在一定需求下使用还是不错的。
使用haproxy 来对 mysql 的从节点进行负载均衡。
3、haproxy 安装
tar -zxvf haproxy-2.7.3.tar.gz cd haproxy-2.7.3/ make target=linux31 make install prefix=/usr/local/haproxy cd /usr/local/haproxy/ mkdir conf cd conf/ cp /home/haproxy/haproxy-2.7.3/examples/option-http_proxy.cfg haproxy.cfg
target参数查看
[root@localhost conf]# uname -r 3.10.0-1160.el7.x86_64
haproxy.cfg 编辑
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user root
group root
daemon
stats socket /usr/local/haproxy/stats
defaults
mode tcp
log global
option tcplog
option dontlognull
option http-server-close
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 admin_status
mode http
bind 0.0.0.0:8899
option httplog
log global
stats enable
stats refresh 10s
stats hide-version
stats realm haproxy\ statistics
stats uri /admin-status
stats auth admin:123456
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
使用地址查看haproxy状态:http://192.168.0.1:8899/admin-status
注意关闭防火墙,或者开放端口
4、balance算法
roundrobin:
- 支持权重的运行时调整,支持慢启动;
- 每个后端中最多支持4095个server。
leastconn:
- 推荐使用在具有较长会话的场景中,例如mysql、ldap等。
- 连接数量最少的服务器接收连接。循环在相同负载的服务器组中执行,以确保使用所有服务器。
- 建议在需要很长会话的地方使用此算法,如ldap、sql、tse等……但是不太适合使用短会话(如http)的协议。
- 该算法是动态的,这意味着服务器的权重可以动态调整,例如,慢启动。
first:
- 根据服务器在列表中的位置,自上而下进行调度;
- 前面服务器的连接数达到上限,新请求才会分配给下一台服务。
source:
- 源ip地址被散列并除以总数正在运行的服务器的权重,以指定哪个服务器将接收该请求。
- 这确保了相同的客户端ip地址将总是到达相同的服务器,只要没有服务器宕机或宕机。
uri:
- 对uri的左半部分做hash计算,并由服务器总权重相除以后派发至某挑出的服务器。
static-rr:
- 静态算法:不支持权重的运行时调整及慢启动;后端主机数量无上限。
- 每台服务器根据各自的权重依次使用。这个算法与roundrobin类似,只是它是静态的,这意味着动态地更改服务器的权重不会有任何影响。
- 另一方面,它对服务器的数量没有设计限制,当一个服务器启动时,它总是在重新计算完整的映射后立即被重新引入集群。它运行时使用的cpu也稍微少一些(大约-1%)。
url_param:
- 对用户请求的uri的部分中的参数的值作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;
- 通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个backend server
hdr:
- 对于每个http请求,此处由指定的http首部将会被取出做hash计算,并由服务器总权重相除以后派发至某挑出的服务器;
- 没有有效值的会被轮询调度
rdp-cookie:
- 将被查找并对每个传入的tcp请求进行散列处理,该名称不区分大小写。
- 这种机制作为降级的持久性模式非常有用,因为它可以始终将相同的用户(或相同的会话id)发送到相同的服务器,如果没有找到cookie,则使用普通的roundrobin算法
5、mysql负载均衡配置
在haproxy.cfg 中添加以下配置
#配置haproxy可连接的地址,与绑定固定的域名
frontend mysql
bind 0.0.0.0:3306
mode tcp
log global
default_backend mysql_server
backend mysql_server
balance leastconn
server mysql1 192.168.0.2:3306 check inter 5s rise 2 fall 3
server mysql2 192.168.0.3:3306 check inter 5s rise 2 fall 3
#rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用
重启haproxy,进入haproxy地址查看mysql状态

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论