Hproxy负载均衡(主要针对读)
haproxy介绍
HAProxy 是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理。
相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康状态检测机制和负载均衡算法。
haproxy 的配置文件由两部分组成:
-
全局设定(global settings)
全局设定
global settings:主要用于定义 haproxy 进程管理安全及性能相关的参数
-
对代理的设定(proxies)
代理设定
proxies 共分为4段:defaults,frontend,backend,listen
proxies:代理相关的配置可以有如下几个配置端组成 defaults:为除了global以外的其它配置段提供默认参数,默认配置参数可由下一个“defaults”重新设定。 frontend:定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。 backend:定义 “后端” 服务器,前端代理服务器将会把客户端的请求调度至这些服务器。 listen:定义监听的套接字和后端的服务器。类似于将 frontend 和 backend 段放在一起,所有代理的名称只能使 用大写字母、小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)。此外,ACL 名称会区分字母大小写。
环境搭建准备:
服务器名称 | IP | 操作系统 | 安装服务 |
---|---|---|---|
Haproxy-Master | 192.168.48.128 | CentOS7.1 | haproxy-Master |
Mysql,Haproxy-slave | 192.168.48.137 | CentOS7.1 | mysql,mysql2 haproxy-slave |
Mysql | 192.168.48.111 | CentOS7.1 | mysql,mysql2 |
Mysql | 192.168.48.134 | CentOS7.1 | mysql,mysql2 |
架构top
当前环境中,haproxy分别代理两个不同集群环境的mysql服务器,这些服务器的mysql配置与数据几乎是一模一样的,haproxy只是做了个负载均衡而已,在这里因为服务器不够,因此这些数据库和haproxy会部署到同一台服务器中,以不同的端口来进行区分,在实际的开发生产中,是可以部署到不同的服务器中的
在后面中,会加入keepalived对两个集群做一个热备的功能,当集群一种的所有mysql宕机了或者haproxy宕机了,keepalived会把备用的集群二顶上来,代替集群一,当集群一修复好后,集群一就变成了备用集群,等待集群二的故障转移
HAProxy-mysql负载均衡
1.拉取haproxy镜像
docker pull haproxy
2.配置目录
mkdir /docker/haproxy-master/
touch /docker/haproxy-master/haproxy.cfg
3.编辑haproxy.cfg
主与从都分别配置,mysql的用户尽量都一致
vim /docker/haproxy-master/haproxy.cfg
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
#配置haproxy可连接的地址,与绑定固定的域名
frontend mysql
bind 0.0.0.0:13306
mode tcp
log global
default_backend mysql_server
#负载均衡的真实数据库地址
backend mysql_server
balance roundrobin
server mysql1 192.168.238.111:3309 check inter 5s rise 2 fall 3
server mysql2 192.168.238.137:3306 check inter 5s rise 2 fall 3
server mysql3 192.168.238.134:3306 check inter 5s rise 2 fall 3
#rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用
#客户端配置
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
stats admin if TRUE
4.构建haproxy容器
docker run -d -p 8899:8899 -p 13306:13306 --name haproxy-master \
-v /docker/haproxy-master/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg \
--privileged=true haproxy:latest
结果:
5.连接测试
mysql -uroot -proot -P13306 -h192.168.238.128 -e "show variables like 'server_id';"