第八章----RabbitMQ+HAProxy+Keepaliv

2020-04-25  本文已影响0人  枫子夜

1. HAProxy

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

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

rz
tar -zxf haproxy-2.1.4.tar.gz
yum install -y openssl openssl-devel systemd-devel.x86_64
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
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
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,起到故障转移的功能。

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. 搭建高可用架构

架构图

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

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

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
        }
}
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
          }
}
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

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

上一篇 下一篇

猜你喜欢

热点阅读