Haproxy+Keepalived代理RabbitMq集群

环境准备:

前面已经部署好了RabbitMq集群,https://www.jianshu.com/p/47391a5805b1

  • 192.168.47.145 ----zabbix
  • 192.168.47.147 ----zabbix1
  • 192.168.47.129 ----zabbix2

测试环境:centos7.6 两台虚拟机,部署软件:Haproxy+Keepalived | 关闭防火墙和Selinux(注意:如果是云服务器。需要购买付费产品SLB,由于rabbitmq负载是在程序中连接,故需要配置内网的SLB即可,不过要记得安全组放开端口)

  • 192.168.47.150 ----master
  • 192.168.47.151 ----slave
    架构图:
    Haproxy+Keepalived代理RabbitMq集群_第1张图片

1.首先在两台机器上面安装haproxy代理(两台都要部署)

yum install -y haproxy
cd /etc/haproxy/
cp haproxy.cfg haproxy.cfg.bak
vim haproxy.cfg

#--------------------------------------------------------------------
global                                         # 全局配置
log         127.0.0.1 local2                   # 日志输出配置
chroot      /var/lib/haproxy                   # haproxy工作目录
pidfile     /var/run/haproxy.pid               # haproxy的pid目录
maxconn     4000                               # 最大连接数(默认配置)
user        haproxy                            # 运行haproxy的用户
group       haproxy                            # haproxy所属组
nbproc      4                                  # 启动的haproxy进程个数,只能用于守护进程模式的haproxy;默认只启动一个进程,鉴于调试困难等多方面的原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;
daemon                                         # 后台启动 
# turn on stats unix socket    
stats socket /var/lib/haproxy/stats            # 用户访问统计数据的接口目录
#--------------------------------------------------------------------
defaults                                       # 默认配置
mode                    http                   # 默认模式(mode{tcp\http\health})
log                     global                 # 日志系统与global段一样
retries                 3                      # 3次连接服务器失败后确定服务器不可用
timeout connect         10s                    # 默认连接超时时间(可优化)
timeout client          1m                     # 默认客户端超时时间(可优化)
timeout server          1m                     # 默认服务器超时时间(可优化)
timeout check           10s                    # 默认心跳检测超时时间(可优化)
maxconn                 2048                   # 最大连接数,不要超过全局配置最大连接数
#--------------------------------------------------------------------
##监控查看本地状态## 
listen admin_stats        
bind *:80                                      # 绑定监控页面监听端口
mode http    
option httplog                                 # 日志类别采用httplog
option httpclose                               # 每次请求完毕后主动关闭http通道
log 127.0.0.1 local0 err                       # 定义日志发往的位置,级别为error,所有等于或高于此级别的日志信息将会被发送;
stats uri  /haproxy                            # haproxy监控页面,可以自定义,如http://192.168.47.150/haproxy
stats auth zludon:123                          # 配置监控页面账号密码登录   
stats refresh 30s                              # 页面刷新间隔
#################################### 
##反代监控##
frontend server                                # frontrend前端配置
    bind *:5672    
    log global    
    mode tcp    
    #option forwardfor    
    default_backend rabbitmq                  # 定义匹配规则,请求转发至名为"rabbitmq"的后端服务
    maxconn 3 
backend rabbitmq                              # 后端服务配置,当frontend请求中名为"rabbitmq"跳转到此配置规则
    mode        tcp    
    log         global    
    balance     roundrobin                    # 定义负载均衡算法,此处为轮叫(轮询)
# 为后端声明server,格式为:server  
[:port] [param*] # :为此服务器指定的主机名,其将出现在日志及警告信息中; #
为此服务器的的IPv4地址,也支持使用可解析的主机名; # [:port]:指定将连接请求所发往的此服务器时的目标端口; # [param*]:为此服务器设定的一系参数,其可用的参数非常多,具体请参考官方文档中的说明(http://cbonte.github.io/haproxy-dconv/2.1/configuration.html) # check:启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定,如:inter :设定健康状态检查的时间间隔,单位为毫秒,默认为2000;也可以使用fastinter和down # rise :设定健康状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数; # fall :确认server从正常状态转换为不可用状态需要检查的次数; server zabbix 192.168.47.145:5672 check inter 2000s rise 2 fall 3 server zabbix1 192.168.47.147:5672 check inter 2000s rise 2 fall 3 server zabbix2 192.168.47.129:5672 check inter 2000s rise 2 fall 3 #--------------------------------------------------------------------

2、加载配置文件并重启

haproxy -f haproxy.cfg
systemctl start haproxy
systemctl enable haproxy
查看端口是否启动:ss -atunlp |grep haproxy

可见我们的端口已经起来了。
我们来测试访问:
http://192.168.47.150/haproxy
http://192.168.47.151/haproxy
Haproxy+Keepalived代理RabbitMq集群_第2张图片

需要账号密码,还记得我们配置文件中 stats auth后面的账号密码么?没错就是这个账号密码,登录。
Haproxy+Keepalived代理RabbitMq集群_第3张图片
我们的haproxy就已经部署完成了,接下来部署我们的keepalived。

3、部署keepalived(两台都要部署)

yum -y install ipvsadm keepalived
cd /etc/keepalived/
cp keepalived.conf{,.bak}
vim keepalived.conf
master:

  ! Configuration File for keepalived 
global_defs {  
    router_id haproxy1 
} 

vrrp_instance VI_1 {    
    state MASTER    
    interface ens33    
    virtual_router_id 80    
    priority 100    
    advert_int 1    
    authentication {        
        auth_type PASS        
        auth_pass 1111    
    }    
    virtual_ipaddress {        
        192.168.47.222/24 dev ens33    
    } 
}

slave:

! Configuration File for keepalived 

global_defs {
  router_id haproxy2 
} 

vrrp_instance VI_1 {
    state BACKUP
    nopreempt
    interface ens33
    virtual_router_id 80
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.47.222/24 dev ens33
    }
}

启动服务并查看IP:
systemctl restart keepalived
systemctl enable keepalived
master上:ip a

Haproxy+Keepalived代理RabbitMq集群_第4张图片
slave上: ip a
Haproxy+Keepalived代理RabbitMq集群_第5张图片
keepalived部署完成了,我们来测试一下:
master上:
systemctl stop haproxy
systemctl stop keepalived
slave上:
Haproxy+Keepalived代理RabbitMq集群_第6张图片

浏览器访问:
http://192.168.47.222/haproxy
Haproxy+Keepalived代理RabbitMq集群_第7张图片

测试宕掉rabbitmq中的服务器:
zabbix上:
systemctl stop rabbitmq-server
Haproxy+Keepalived代理RabbitMq集群_第8张图片
至此,我们的项目已经完成了部署和测试,整体上还是很丝滑的,加油!

你可能感兴趣的:(Haproxy+Keepalived代理RabbitMq集群)