(一)什么是mysql负载均衡
通过两个图来对比
(二)负载均衡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下:
解压:
解压完:
解压完还需要进行源码安装:
make TARGET=linux26命令编译,源码安装, TARGET为指定linux内核,提示未安装gcc,先安装gcc,yum方式安装gcc,yum install gcc-c++:
安装完gcc继续使用make TARGET=linux26编译haproxy,编译完成:
编译完成进行安装,make install PREFIX=/usr/local/haproxy,PREFI指定安装路径:
安装完成,查看安装文件:
sbin目录下的haproxy为可执行的文件。
接下来需要对haproxy进行配置,为haproxy创建一个配置文件haproxy.cnf:
再编辑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文件:
配置完成进行启动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客户端连接,多次连接,查看每次连接的是哪个从节点:
此时能判别出连接到的是第二个从库
断开连接,然后再次连接:
可以看到再次连接到的是第一个从库
haproxy有八种负载均衡策略,haproxy就是用相应的算法来确定应该请求哪个从库
一般前3类使用的比较多,在haproxy配置文件中设置balance即可。
(四)haproxy监控搭建
在haproxy配置文件中添加:
listen admin_stats
bind 0.0.0.0:8888 #端口号
mode http
stats uri /test_haproxy #访问的跟目录路径
stats auth admin:admin #登陆账号
编辑完保存退出,重启haproxy服务
在浏览器输入地址,haproxy节点的ip:
监控成功,可以看到haproxy连接了两个从节点s1和s2
我i们把s2的mysql服务stop掉,刷新页面查看,可以看到s2的状态为DOWN:
----------------------------
总结一下haproxy搭建:
①搭建好两个或者多个从节点,统一创建同样的用户名、密码,赋予相应的权限;
②搭建独立的haproxy服务器,修改配置文件haproxy.cnf,在里面指定从节点ip等
③启动从节点,注意关闭各个节点防火墙
④启动haproxy服务,haproxy节点不需要启动mysql服务
⑤在mysql客户端或者web服务端使用从节点的用户名、密码登录,端口为haproxy.cnf中bind的端口号