使用Haproxy实现负载均衡,使用 Keepalive 实现高可用,整体架构图如下。
:-: ![](https://img.kancloud.cn/bd/9c/bd9c81b1b0dca0ce7b16a45b30a30e59_1187x805.jpg)
<br/>
搭建步骤如下:
[TOC]
# 1. haproxy实现负载均衡
HAProxy 提供高可用性、负载均衡及基于 TCPHTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括 Twitter、Reddit、StackOverflow、GitHub 在内的多家知名互联网公司在使用。HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的井发连接数。
<br/>
扩展 nginx、lvs、haproxy 之间的区别: http://www.ha97.com/5646.html
<br/>
**1. 下载 haproxy(在 node1 和 node2)**
```shell
yum -y install haproxy
```
**2.node1 和 node2 的 haproxy.cfg 都修改如下**
```shell
------------node1,ip为node1的ip------------
# vim /etc/haproxy/haproxy.cfg
#配置集群节点
backend app
balance roundrobin #轮询算法
server node1 192.168.0.109:5672 check
server node2 192.168.0.112:5672 check
server node3 192.168.0.113:5672 check
#监控页面地址
listen private_monitoring :8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 5s # 5s刷新页面
```
**3.分别启动node1和node2的 haproxy**
```shell
haproxy -f /etc/haproxy/haproxy.cfg
ps -ef | grep haproxy
```
**4.访问监控地址**
http://192.168.0.109:8100/stats ,或者 http://192.168.0.112:8100/stats 。
![](https://img.kancloud.cn/fa/be/fabec81addda1264c83dc867ac3cd370_1591x530.jpg)
<br/>
# 2. Keepalive实现高可用
*本节没有完善,不能用*
<br/>
试想如果前面配置的 HAProxy 主机突然宕机或者网卡失效,那么虽然 RbbitMQ 集群没有任何故障但是对于外界的客户端来说所有的连接都会被断开,结果将是灾难性的。为了确保负载均衡服务的可靠性同样显得十分重要,这里就要引入 Keepalived, 它能够通过自身健康检查、资源接管功能做高可用(双机热备),实现故障转移。
**1. node1和node2上下载 Keepalive**
```shell
yum -y install keepalived
```
**2. 修改 node1上的 keepalived.conf**
```shell
[root@node1 ~]# vim /etc/keepalived/keepalived.conf
```
**3. 修改 node2 上的 keepalived.conf**
```shell
[root@node2 ~]# vim /etc/keepalived/keepalived.conf
```
**4. 在 node1 和 node2 上都编写下面的监控脚本**
为了防止 HAProxy 服务挂掉之后 Keepalived 还在正常工作而没有切换到 Backup 上,所以这里需要编写一个脚本来检测 HAProxy 务的状态,当 HAProxy 服务挂掉之后该脚本会自动重启HAProxy 的服务,如果不成功则关闭 Keepalived 服务,这样便可以切换到 Backup 继续工作。
```shell
# vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
haproxy -f /etc/haproxy/haproxy.cfg
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service keepalived stop
fi
# chmod 777 /etc/keepalived/check_haproxy.sh
```
**5. 启动 node1 和 node2 上的 keepalive 服务**
```shell
systemctl start keepalived
```
**6. 跟踪日志的命令**
```shell
tail -f /var/log/messages -n 200
```
- 消息队列
- 什么是MQ
- MQ的作用
- MQ的分类
- MQ的选择
- RabbitMQ
- RabbitMQ是什么
- 四大核心概念
- 工作原理
- 环境搭建
- windows系统下的搭建
- centos7系统下的搭建
- 常用命令
- 服务相关命令
- 管理用户命令
- 管理队列命令
- 第一个RabbitMQ程序
- 工作队列
- 轮询分发消息
- 消息应答
- 持久化
- 发布确认
- 发布确认原理
- 发布确认策略
- 交换机概念
- 交换机类型
- 无名交换机
- Fanout交换机
- Direct交换机
- Topic交换机
- 死信队列
- 死信概念
- 死信来源
- 死信实战
- 延迟队列
- 什么是延迟队列
- TTL设置方式
- 队列TTL延迟队列
- 消息TTL延迟队列
- 插件打造延迟队列
- 延迟队列总结
- 发布确认高级
- 代码实现
- 回退消息
- 备份交换机
- 幂等性
- 幂等性概念
- 消息重复消费
- 消费端幂等性保障
- 优先级队列
- 使用场景
- 设置优先级
- 惰性队列
- 什么是惰性队列
- 队列的两种模式
- 声明惰性队列
- RabbitMQ集群
- 为什么要搭建集群
- 集群搭建步骤
- 集群工作方式
- 脱离集群
- 镜像队列
- 高可用负载均衡