(四)mysql主从基础上的负载均衡--haproxy搭建

(一)什么是mysql负载均衡

通过两个图来对比

  • 未设置负载均衡:

(四)mysql主从基础上的负载均衡--haproxy搭建_第1张图片

  • 设置之后,能把请求按一定策略分配到相应的mysql服务器上,提高系统稳定性,在性能方面也有大幅度提升

(四)mysql主从基础上的负载均衡--haproxy搭建_第2张图片

(二)负载均衡HaProxy

        HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。HAProxy是法国人Willy Tarreau开发的一个开源软件,是一款应对客户端10000以上的同时连接的高性能的TCP和HTTP负载均衡器,可以实现基于TCP协议的四层代理及基于HTTP协议的七层代理。

(三)使用HaProxy搭建负载均衡

接下来搭建HaProxy,实现mysql多从节点的负载均衡。

首先搭建好一个主节点,两个从节点,一个负载均衡节点,四台机器

搭建负载均衡节点:

克隆好一台虚拟机,配置好网络

http://pkgs.fedoraproject.org/repo/pkgs/haproxy/下载Haproxy,这里选择1.7.8版本,下载并放入linux下:

解压:

解压完:

解压完还需要进行源码安装:

(四)mysql主从基础上的负载均衡--haproxy搭建_第3张图片

make TARGET=linux26命令编译,源码安装, TARGET为指定linux内核,提示未安装gcc,先安装gcc,yum方式安装gcc,yum install gcc-c++:

(四)mysql主从基础上的负载均衡--haproxy搭建_第4张图片

安装完gcc继续使用make TARGET=linux26编译haproxy,编译完成:

(四)mysql主从基础上的负载均衡--haproxy搭建_第5张图片

编译完成进行安装,make install PREFIX=/usr/local/haproxy,PREFI指定安装路径:

(四)mysql主从基础上的负载均衡--haproxy搭建_第6张图片

安装完成,查看安装文件:

(四)mysql主从基础上的负载均衡--haproxy搭建_第7张图片

sbin目录下的haproxy为可执行的文件。

接下来需要对haproxy进行配置,为haproxy创建一个配置文件haproxy.cnf:

(四)mysql主从基础上的负载均衡--haproxy搭建_第8张图片

再编辑haproxy.cnf,添加如下配置内容:

global
    daemon   #指定后台运行
    nbproc 1
    pidfile /usr/local/haproxy/conf/haproxy.pid #pid文件,需要存在,稍后创建
defaults
    mode tcp #默认的模式
    retries 2 #两次连接失败就认为是服务器不可用
    option redispatch #
    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

####test1配置####
listen test        #负载均衡配置,test1为名字,可任意
    bind 0.0.0.0:3306 #绑定的主机,这里为本机,即为0.0.0.0,监听的IP地址和端口,端口号在0-65535之间,要避免端口冲突
    mode tcp     #连接的协议,默认tcp
    server s1 192.168.11.19:3306
    server s2 192.168.11.20:3306 #要负载均衡的机器,这里为两台

再创建pid文件,/usr/local/haproxy/conf/haproxy.pid文件:

(四)mysql主从基础上的负载均衡--haproxy搭建_第9张图片

配置完成进行启动haproxy:../sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cnf

 

所有的从节点都需要设置同样的用户名密码,mysql客户端或者web应用程序使用这个用户名密码通过负载均衡节点连接到各个从节点

我们使用create user ‘username’@‘host’ identified by 'password'在主机上创建用户,从节点会自动同步,注意创建完需要赋予权限

用户创建/权限赋予有点复杂,踩最多的坑,躺最大的bug,有问题欢迎来打扰

remark:虚拟机ip设置以本机ipconfig中的无线局域网适配器WLAN的IPv4为准,保持同一个网段下,才能相互ping通。

测试搭建是否成功:

使用mysql客户端连接,多次连接,查看每次连接的是哪个从节点:

(四)mysql主从基础上的负载均衡--haproxy搭建_第10张图片

此时能判别出连接到的是第二个从库

断开连接,然后再次连接:

(四)mysql主从基础上的负载均衡--haproxy搭建_第11张图片

可以看到再次连接到的是第一个从库

 

haproxy有八种负载均衡策略,haproxy就是用相应的算法来确定应该请求哪个从库

  1. roundrobin,表示简单的轮询
  2. static-rr,权重
  3. leastconn,最少连接者先处理
  4. source,根据请求来源id
  5. uri
  6. url_param
  7. hdr,根据http请求头锁定http请求
  8. rdp-cookie

一般前3类使用的比较多,在haproxy配置文件中设置balance即可。

 

(四)haproxy监控搭建

在haproxy配置文件中添加:

listen admin_stats

   bind 0.0.0.0:8888  #端口号

   mode http

    stats uri /test_haproxy  #访问的跟目录路径

    stats auth admin:admin  #登陆账号

(四)mysql主从基础上的负载均衡--haproxy搭建_第12张图片

编辑完保存退出,重启haproxy服务

在浏览器输入地址,haproxy节点的ip:

(四)mysql主从基础上的负载均衡--haproxy搭建_第13张图片

监控成功,可以看到haproxy连接了两个从节点s1和s2

(四)mysql主从基础上的负载均衡--haproxy搭建_第14张图片

我i们把s2的mysql服务stop掉,刷新页面查看,可以看到s2的状态为DOWN:

 

 

----------------------------

总结一下haproxy搭建:

①搭建好两个或者多个从节点,统一创建同样的用户名、密码,赋予相应的权限;

②搭建独立的haproxy服务器,修改配置文件haproxy.cnf,在里面指定从节点ip等

③启动从节点,注意关闭各个节点防火墙

④启动haproxy服务,haproxy节点不需要启动mysql服务

⑤在mysql客户端或者web服务端使用从节点的用户名、密码登录,端口为haproxy.cnf中bind的端口号

 

你可能感兴趣的:(后台技术)