HaProxy 实现 MySQL 负载均衡

关于 HaProxy

首先来简单认识一下 HaProxy :一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,是免费、快速并且可靠的一种解决方案。HAProxy 的实现基于事件驱动、单一进程模型,类似 Node.js 的进程模型,能够支撑非常大的并发连接数.

安装配置 HaProxy

以下实验环境均为 CentOS7 平台。 还需要两个 MySQL 实例,端口分别为3311,3312.

1.首先从官网上下载稳定版本 haproxy-1.9.2.tar,通过 FTP 工具传至服务器.

2.解压 haproxy-1.9.2.tar,并进入解压后的文件夹

tar -xvf haproxy-1.9.2.tar && cd haproxy-1.9.2
复制代码

3.由于压缩出来的是 haproxy 的源文件,所以还需要通过本地编译安装

make TARGET=generic   # 指定编译的目标平台为通用
make install
复制代码

安装完成之后目录下文件就多了一些关于 haProxy 的文件

直接使用指令 haproxy 就是检查 Haproxy 是否安装成功.

[root@izm5e2w1juq9po7368cfj1z haproxy-1.9.2]# haproxy
HA-Proxy version 1.9.2 2019/01/16 - https://haproxy.org/
Usage : haproxy [-f ]* [ -vdVD ] [ -n  ] [ -N  ]
        [ -p  ] [ -m  ] [ -C  ] [-- *]
        -v displays version ; -vv shows known build options.
        -d enters debug mode ; -db only disables background mode.
        -dM[] poisons memory with  (defaults to 0x50)
        -V enters verbose mode (disables quiet mode)
        -D goes daemon ; -C changes to  before loading files.
        -W master-worker mode.
        -q quiet mode : don't display messages
        -c check mode : only check config files and exit
        -n sets the maximum total # of connections (2000)
        -m limits the usable amount of memory (in MB)
        -N sets the default, per-proxy maximum # of connections (2000)
        -L set local peer name (default to hostname)
        -p writes pids of all children to this file
        -dp disables poll() usage even when available
        -dR disables SO_REUSEPORT usage
        -dr ignores server address resolution failures
        -dV disables SSL verify on servers side
        -sf/-st [pid ]* finishes/terminates old pids.
        -x  get listening sockets from a unix socket
        -S [,...] new stats socket for the master
复制代码

4.为 HaProxy 添加配置文件,命名为 haproxy.conf

global
        daemon   # 后台方式运行
        nbproc 1
        pidfile haproxy.pid
defaults
        mode tcp               #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        retries 2               #两次连接失败就认为是服务器不可用,也可以通过后面设置
        option redispatch       #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option abortonclose     #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        maxconn 4096            #默认的最大连接数
        timeout connect 5000ms  #连接超时
        timeout client 30000ms  #客户端超时
        timeout server 30000ms  #服务器超时
        #timeout check 2000      #=心跳检测超时
        log 127.0.0.1 local0 err #[err warning info debug]
        balance roundrobin      # 采用轮询算法


################# 配置#################
listen delegate                         #这里是配置负载均衡,test1是名字,可以任意
        bind 0.0.0.0:3306            #这里是监听的IP地址和端口,端口号可以在0-65535之间,要避免端口冲突
        mode tcp                     #连接的协议,这里是tcp协议
        #maxconn 4086
        #log 127.0.0.1 local0 debug
        server s1 localhost:3312 #负载的MySQL实例1
        server s2 localhost:3311 #负载的MySQL实例2 可以有多个,往下排列即
复制代码

具体配置参数说明可参考 HaProxy 官网的配置案例

HaProxy 负载算法 HaProxy 支持多种负载算法,可以通过在配置文件中 balance 指定.

  • roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
  • static-rr,表示根据权重;
  • leastconn,表示最少连接者先处理;
  • source,表示根据请求源IP;
  • uri,表示根据请求的URI;
  • url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name
  • hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
  • rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

5.加载配置文件方式启动 HaProxy

haproxy -f conf/haproxy.conf
复制代码

查看 HaProxy 进程,如果存在就说明已经 HaProxy 启动成功了,接下来就是去验证了.

验证 MySQL 负载均衡

为了检验 MySQL 的负载均衡是否生效,我们可以简单地使用 MySQL 客户端工具来连接试下,首先在两个 MySQL 实例中各自新建一个不同名字的库,端口为3311创建 salve, 端口为3312的创建 salve11.

尝试多次连接3306端口的时就是发现它会自动匹配到 端口为3311的 MySQL 实例或者是3312的,采用轮询方式进行访问.到这里 MySQL 的负载均衡也算是实现了.

资料参考

  • cbonte.github.io/haproxy-dco…
  • www.ttlsa.com/linux/hapro…

你可能感兴趣的:(HaProxy 实现 MySQL 负载均衡)