前面我们完成了整个LAMP架构的80%了。我们现在还缺个前端。在这里打算用2太服务器,部署Haproxy实现中间件的负载均衡。部署Keepalived,实现中间件的高可用。这样的架构,就可以说完成95%了。
一、新增两台服务器,IP分别为31,32.我们先处理第一台。主机名为ha1.IP为31
1、安装Haproxy
2、配置Haproxy。
vim /etc/haproxy/haproxy.cnf
mysql支持的是tcp协议。使用长连接,负载均衡模式为最小连接
查看轮询效果
退出再连接
从这里可以得知,haproxy实现了mycat的负载均衡。但一台haproxy。有单点故障。我们再增加一台。ha2.配置方法一样
3、安装ha2,IP为32
搭建完毕以后,我们从31,或者32都可以连接到数据库。这里证明haproxy的确是完成了负载均衡的作用。但这里就有个麻烦了。客户端连接数据库的时候,到底是连接31,还是32呢?我们能不能通过一个VIP进行连接呢。可以的,这里就需要用到Keepalived了。通过Keepalived。实现haproxy的高可用。
二、安装Keepalived。实现高可用
1、ha1,安装keepalived
yum -y install keepalived
2、修改keepalived配置
指定route_id,定义模式为BACKUP,指定网卡,设置权重为200,设置为不抢占(根据实际需求设定),最后那里是设定虚拟IP。
启动keepalived。然后测试效果。
3、测试效果
二、部署第二个keepalived。部署在ha2上
ha2的keepalived的配置文件几乎和ha1的是一样的,唯一的区别,就是权重不同。我先启动ha2。
这里就有这么一个问题了。ha1的权重是200,设定为不抢占。ha2的权重是100,设定为不抢占。那么。但ha1的keepalived挂了。VIP会不会切到ha2去呢?那么当ha1的keepalived又起来了。VIP到底在谁哪里?
这里我们都启动了2个keepalived。我们看看VIP在哪里。
VIP在ha1这里。那么我们把ha1的keepalived停了。看看
成功切换到ha2了。
我们再来看看,按照我们设置的不抢占,如果ha1的keepalived起来了,会不会把VIP抢回来
VIP还是在ha2.这里就是设置不抢占的原因了。如果是出现抢占的情况。就会在恢复的时候出现网络切换。那么肯定或多或少会造成服务的波动。
那么,基本实现高可用的。但是。还是没有实现haproxy的高可用对吧。haproxy挂了。keepalived压根啥也不做。
我们调整参数,让keepalived也监控haproxy,当haproxy出现宕机的时候,那么也会切换VIP,这样才能实现真正的Haproxy高可用。
定义一个虚拟脚本,killall -0 haproxy 用于检查进程是否存在。返回0为存在,不为0为不存在。
在后面是监控这个虚拟脚本,如果脚本返回值不为0,就把权重设置为0.
ha1和ha2,都添加这2条
我们来测试一下。
目前VIP在ha2
我们把ha2的haproxy停了。看看VIP会不会切换到ha1去
VIP跑到ha1了
OK,高可用到这里就设置完毕了。到目前为止。后端,中间件,前端。都做好了。
后端是mysql集群+mha高可用,中间件是mycat集群实现读写分离和负载均衡,前端是haproxy+keepalived实现高可用+负载均衡。
最后一个知识点。这里会有一个小遗憾。就是ha1和ha2中,有一个是处于备份待机状态。那么就会造成资源的浪费。
关于这个问题的解决方法,我们可以绑定2个VIP。设置好权重和抢占。让2台服务器都处于工作的状态。
具体就不写了。有需要留言问