第八章----RabbitMQ+HAProxy+Keepalived 集群负载均衡高可用方案

1. HAProxy

RabbitMQ的集群和镜像队列实现了高吞吐量和高可用,现在我们来用HAProxy实现负载均衡功能。

HAProxy是一个使用C语言编写的自由及开放源代码软件,提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy支持从4层至7层的网络交换,即覆盖所有的TCP协议。根据官方数据,其最高极限支持10G的并发。

  • 下载地址
    HAproxy官网需要翻墙才能访问,这里已经为大家下载好了当前最新版本:HAProxy-2.1.4 密码:21pz

  • 上传并解压

rz
tar -zxf haproxy-2.1.4.tar.gz
  • 安装依赖
yum install -y openssl openssl-devel systemd-devel.x86_64
  • 进入haproxy目录编译安装
cd haproxy-2.1.4/
# USE_OPENSSL=1 :开启https,USE_SYSTEMD=1:指定为systemd模式,PREFIX=/usr/local/haproxy:指定安装目录
make TARGET=linux-glibc  PREFIX=/usr/local/haproxy USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1  USE_ZLIB=1 PREFIX=/usr/local/haproxy && make install 
  • 编辑启动脚本(修改成自己的安装路径)
vim /usr/lib/systemd/system/haproxy.service

[Unit]
Description=HAProxy Load Balancer
After=network.target

[Service]
ExecStartPre=/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg   -c -q
ExecStart=/usr/local/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg  -p /run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
  • 开启haproxy日志
vim /etc/rsyslog.conf

$ModLoad imudp
$UDPServerRun 514
#添加
local0.*         /var/log/haproxy.log

# 编辑rsyslog
vim /etc/sysconfig/rsyslog

SYSLOGD_OPTIONS="-r -m 0 -c 2"
  • 添加启动用户
useradd -r haproxy
usermod -G haproxy haproxy
  • 创建配置文件及启动目录
mkdir -p /var/lib/haproxy
touch /var/lib/haproxy/stats
mkdir /etc/haproxy
vim /etc/haproxy/haproxy.cfg

global
    log 127.0.0.1   local0 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     1020   # See also: ulimit -n
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats.sock mode 600 level admin
    stats timeout 2m
defaults
    mode    tcp
    log     global
    option  dontlognull
    option  redispatch
    timeout http-request      10s
    retries                   3
    timeout queue             45s
    timeout connect           10s
    timeout client            1m
    timeout server            1m
    timeout http-keep-alive   10s
    timeout check             10s
    maxconn                   1020
listen stats
    mode http
    bind 0.0.0.0:8100
    stats enable
    stats uri     /stats
    stats realm   Haproxy\ Statistics
    stats auth    fzb:123456
    stats admin if TRUE

#绑定配置
listen rabbitmq_cluster
    bind 0.0.0.0:5670
    #配置TCP模式
    mode tcp
    #加权轮询
    balance roundrobin
    #RabbitMQ集群节点配置
    server rabbit1 127.0.0.1:5672 check inter 5000 rise 2 fall 3 weight 1
    server rabbit2 127.0.0.1:5673 check inter 5000 rise 2 fall 3 weight 1
    server rabbit3 127.0.0.1:5674 check inter 5000 rise 2 fall 3 weight 1
  • 重启服务和日志
systemctl restart haproxy
systemctl restart rsyslog
  • 设置开机启动
systemctl enable haproxy
  • 访问控制台输入配置的用户名密码(这里我只配置了一个rabbit应用)
第八章----RabbitMQ+HAProxy+Keepalived 集群负载均衡高可用方案_第1张图片
HAProxy控制台

2. Keepalived

HAProxy只提供了对RabbitMQ的负载均衡,假设HAProxy宕机了呢,系统将不能向外提供服务,这里我们就需要引入Keepalived健康检查工具,它能够通过自身健康检查、资源接管功能做高可用(双机热备),实现故障转移。

Keepalived采用VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议),以软件的形式实现服务器热备功能。

通常情况下是将两台Linux服务器组成一个热备组(Master和Backup),同一时间热备组内只有一台主服务器Master提供服务,同时Master会虚拟出一个公用的虚拟IP地址,简称VIP。这个VIP只存在在Master上并对外提供服务。

如果Keepalived检测到Master宕机或者服务故障,备份服务器Backup会自动接管VIP称为Master,Keepalived并将原Master从热备组中移除。当原Master恢复后,会自动加入到热备组,默认再抢占称为Master,起到故障转移的功能。

  • 下载
    keepalived-2.0.20下载地址 密码: 2ich

  • 上传并解压

rz
tar -zxf keepalived-2.0.20.tar.gz
  • 安装依赖
yum install -y gcc openssl-devel popt-devel
yum -y install libnl libnl-devel
yum install -y libnfnetlink-devel
  • 编译安装
cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived
make && make install
  • 修改配置文件位置
cp keepalived/etc/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  • 启动命令并设置开机自启
systemctl start keepalived
systemctl enable keepalived

3. 搭建高可用架构

第八章----RabbitMQ+HAProxy+Keepalived 集群负载均衡高可用方案_第2张图片
架构图

如图所示,两台Keepalived服务器之间通过VRRP进行交互,对外部虚拟出一个VIP为192.168.1.100。Keepalived与HAProxy部署在同一台机器上,两个Keepalived服务实例匹配两个HAProxy服务实例,这样通过Keeaplived实现HAProxy的双机热备。

正常情况下调用路径为实线标示的路径,当master挂掉或者master下haproxy挂掉,会自动切换到backup上也就是虚线路径。

  • 修改master配置文件
vim /etc/keepalived/keepalived.conf


#Keepalived配置文件
global_defs {
        router_id NodeA                 #路由ID, 主备的ID不能相同
}
 
#自定义监控脚本
vrrp_script chk_haproxy {
        script "/etc/keepalived/check_haproxy.sh"
        interval 5
        weight 2
}
 
vrrp_instance VI_1 {
        state MASTER #Keepalived的角色。Master表示主服务器,从服务器设置为BACKUP
        interface eth0          #指定监测网卡
        virtual_router_id 1
        priority 100            #优先级,BACKUP机器上的优先级要小于这个值
        advert_int 1            #设置主备之间的检查时间,单位为s
        authentication {        #定义验证类型和密码
                auth_type PASS
                auth_pass root123
        }
        track_script {
                chk_haproxy
        }
        virtual_ipaddress {     #VIP地址,可以设置多个:
                192.168.1.100
        }
}
  • 配置backup配置文件
vim /etc/keepalived/keepalived.conf

#Keepalived配置文件
global_defs {
        router_id NodeB                 #路由ID, 主备的ID不能相同
}
 
#自定义监控脚本
vrrp_script chk_haproxy {
        script "/etc/keepalived/check_haproxy.sh"
        interval 5
        weight 2
}
 
vrrp_instance VI_1 {
        state BACKUP #Keepalived的角色
        interface eth0          #指定监测网卡
        virtual_router_id 1
        priority 50            #优先级
        advert_int 1            #设置主备之间的检查时间,单位为s
        authentication {        #定义验证类型和密码
                auth_type PASS
                auth_pass root123
        }
        track_script {
                chk_haproxy
        }
        virtual_ipaddress {     #VIP地址,可以设置多个:
                192.168.1.100
          }
}
  • 为了防止HAProxy服务挂了,但是Keepalived却还在正常工作而没有切换到Backup上,所以这里需要编写一个脚本来检测HAProxy服务的状态。当HAProxy服务挂掉之后该脚本会自动重启HAProxy的服务,如果不成功则关闭Keepalived服务,如此便可以切换到Backup继续工作。
vim /etc/keepalived/check_haproxy.sh

#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
    /etc/init.d/keepalived stop
fi
  • 添加权限 并重启
chmod +x /etc/keepalived/chkHaproxy.sh

systemctl restart keepalived
  • 客户端用192.168.1.100 IP地址调用即可

春暖花开,想去爬山...

你可能感兴趣的:(第八章----RabbitMQ+HAProxy+Keepalived 集群负载均衡高可用方案)