【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡

前面我们完成了整个LAMP架构的80%了。我们现在还缺个前端。在这里打算用2太服务器,部署Haproxy实现中间件的负载均衡。部署Keepalived,实现中间件的高可用。这样的架构,就可以说完成95%了。

一、新增两台服务器,IP分别为31,32.我们先处理第一台。主机名为ha1.IP为31

1、安装Haproxy

2、配置Haproxy。

vim /etc/haproxy/haproxy.cnf

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第1张图片

mysql支持的是tcp协议。使用长连接,负载均衡模式为最小连接 

查看轮询效果

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第2张图片

退出再连接

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第3张图片

从这里可以得知,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配置

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第4张图片

指定route_id,定义模式为BACKUP,指定网卡,设置权重为200,设置为不抢占(根据实际需求设定),最后那里是设定虚拟IP。

启动keepalived。然后测试效果。

3、测试效果

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第5张图片

二、部署第二个keepalived。部署在ha2上

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第6张图片

ha2的keepalived的配置文件几乎和ha1的是一样的,唯一的区别,就是权重不同。我先启动ha2。

这里就有这么一个问题了。ha1的权重是200,设定为不抢占。ha2的权重是100,设定为不抢占。那么。但ha1的keepalived挂了。VIP会不会切到ha2去呢?那么当ha1的keepalived又起来了。VIP到底在谁哪里?

这里我们都启动了2个keepalived。我们看看VIP在哪里。

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第7张图片

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第8张图片

VIP在ha1这里。那么我们把ha1的keepalived停了。看看

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第9张图片

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第10张图片

成功切换到ha2了。

我们再来看看,按照我们设置的不抢占,如果ha1的keepalived起来了,会不会把VIP抢回来

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第11张图片

VIP还是在ha2.这里就是设置不抢占的原因了。如果是出现抢占的情况。就会在恢复的时候出现网络切换。那么肯定或多或少会造成服务的波动。

那么,基本实现高可用的。但是。还是没有实现haproxy的高可用对吧。haproxy挂了。keepalived压根啥也不做。

我们调整参数,让keepalived也监控haproxy,当haproxy出现宕机的时候,那么也会切换VIP,这样才能实现真正的Haproxy高可用。

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第12张图片

定义一个虚拟脚本,killall -0 haproxy 用于检查进程是否存在。返回0为存在,不为0为不存在。

在后面是监控这个虚拟脚本,如果脚本返回值不为0,就把权重设置为0.

ha1和ha2,都添加这2条

我们来测试一下。

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第13张图片

目前VIP在ha2

我们把ha2的haproxy停了。看看VIP会不会切换到ha1去

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第14张图片

【接前面环境】Centos7.4,使用Haproxy+Keepalived,实现Mysql中间件Mycat的高可用以及负载均衡_第15张图片

VIP跑到ha1了

OK,高可用到这里就设置完毕了。到目前为止。后端,中间件,前端。都做好了。

后端是mysql集群+mha高可用,中间件是mycat集群实现读写分离和负载均衡,前端是haproxy+keepalived实现高可用+负载均衡。

最后一个知识点。这里会有一个小遗憾。就是ha1和ha2中,有一个是处于备份待机状态。那么就会造成资源的浪费。

关于这个问题的解决方法,我们可以绑定2个VIP。设置好权重和抢占。让2台服务器都处于工作的状态。

具体就不写了。有需要留言问

你可能感兴趣的:(Linux学习日记)