keepalived+haproxy 搭建高可用高负载高性能rabbitmq集群

一、环境准备

  1. 我这里准备了三台centos7 虚拟机
主机名 主机地址 软件
node-01 192.168.157.133 rabbitmq、erlang、haproxy、keepalived
node-02 192.168.157.134 rabbitmq、erlang、haproxy、keepalived
node-03 192.168.157.135 rabbitmq、erlang
  1. 关闭三台机器的防火墙
bash 复制代码
# 关闭防火墙
service firewalld stop
# 关闭防火墙开机自启
systemctl disable firewalld
  1. 三台主机的host和hostname配置
bash 复制代码
#配置hostname,重启生效
hostnamectl set-hostname <hostname>
# 加入三台主机的ip和hostname
vi /etc/hosts
192.168.157.133 node-01
192.168.157.134 node-02
192.168.157.135 node-03
  1. erlang与rabbitmq版本选择RabbitMQ Erlang Version Requirements --- RabbitMQhttps://www.rabbitmq.com/which-erlang.html二、安装erlang环境

  2. 下载erlang,选择与rabbitmq版本匹配的版本,这里我选择的是25.0.4版本Downloads - Erlang/OTPThe official home of the Erlang Programming Languagehttps://www.erlang.org/downloads

  3. 下载相关erlang编译依赖包

bash 复制代码
yum install --y ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel
yum install --y openssl-devel zlib-devel
yum install --y make ncurses-devel gcc gcc-c++ unixODBC unixODBC-devel openssl openssl-devel
  1. 解压安装erlang
bash 复制代码
#创建erlang目录
mkdir /usr/local/erlang
#解压
tar -zxvf otp_src_25.0.4.tar.gz
#进入otp_src_25.0.4目录
./configure --prefix=/opt/erlang --without-javac
make && make install
  1. configure的时候一般会遇到一些依赖不存在的情况,只需要用yum安装一下,重新运行configure命令即可。

  2. 提示找不到wx-config: command not found

bash 复制代码
#更新epel第三方软件库
yum install -y epel-release
#再次执行,就可以安装了
yum install --y wxWidgets-devel
yum install wxBase #for /usr/bin/wx-config-3.0
cd /usr/bin
#创建软连接
ln -s wx-config-3.0 wx-config
  1. 配置环境变量并验证
bash 复制代码
#修改/etc/profile
#加入如下配置,并保存
export ERLANG_HOME=/usr/local/erlang
export PATH=$ERLANG_HOME/bin:$PATH
#重新加载配置
source /etc/profile
#验证,输入erl命令,出现erlang命令行就是安装成功

三、安装rabbitmq镜像集群

  1. github下载rabbitmq,我选择的 rabbitmq-server-generic-unix-3.11.21.tar.xzhttps://github.com/rabbitmq/rabbitmq-server/releaseshttps://github.com/rabbitmq/rabbitmq-server/releases

  2. 解压安装

bash 复制代码
#解压到/usr/local目录
tar -xvf rabbitmq-server-generic-unix-3.11.21.tar.xz -C /usr/local
#配置rabbitmq环境变量
export ERLANG_HOME=/usr/local/erlang
export RABBITMQ_HOME=/usr/local/rabbitmq_server-3.11.21
export PATH=$ERLANG_HOME/bin:$RABBITMQ_HOME/sbin:$PATH
#重新加载/etc/profile
source /etc/profile
#开启rabbitmq管理界面
rabbitmq-plugins enable rabbitmq_management
#后台启动rabbitmq
rabbitmq-server -detached
  1. 访问对应的host:15672进入rabbitmq管理页面,默认用户密码 guest/guest
  1. 创建rabbitmq用户
bash 复制代码
#创建admin用户,密码admin
rabbitmqctl add_user admin admin
#设置用户角色 
#超级管理员 administrator
#监控者     monitoring
#策略制定者 policymaker 
#普通管理者 management 
rabbitmqctl set_user_tags admin administrator
#设置权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
#查看所有用户
rabbitmqctl list_users
  1. 拷贝.erlang.cookie到其他主机

如果启动rabbitmq的是root用户那么这个文件就在/root/用户下的隐藏文件,可以用ls -al查看到

bash 复制代码
#使用scp命令将node-01上的.erlang.cookie复制到其他主机上
scp /root/.erlang.cookie node-02:/root/.erlang.cookie
scp /root/.erlang.cookie node-03:/root/.erlang.cookie
  1. 将node-02和node-03加入到node-01集群

在node-02和node-03上执行

bash 复制代码
#以后台模式启动
rabbitmq-server -detached
#停掉rabbitmq服务,不会关闭erlang服务环境
rabbitmqctl stop_app
#用来清空数据,如果主节点有数据也需要清空
rabbitmqctl reset 
#加入node-01集群
rabbitmqctl join_cluster rabbit@node-01
#启动rabbitmq
rabbitmqctl start_app
  1. 查看集群状态

登录任意节点后台可以看到集群状态

  1. 添加集群同步策略

ha-mode: all,在集群中所有的节点上进行镜像

ha-sync-mode: automatic,在集群节点宕机重新连接后自动同步

方式一:命令添加

bash 复制代码
# 添加策略
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
# 查看策略
rabbitmqctl list_policies

方式二:管理后台界面上添加

  1. 验证镜像模式

在node-01上创建一个队列ha-queue,可以看到node里面有三个节点,进去查看可以看到使用的策略为ha-all,并且node-02和node-03为镜像节点。

四、安装haproxy

node-01 和 node-02上操作

bash 复制代码
#yum 安装haproxy
yum install -y haproxy
#修改haproxy.cnf配置,配置文件在/etc/haproxy目录下
vi haproxy.cnf
#增加如下配置
#页面配置
listen status
    # 绑定9188端口
    bind 0.0.0.0:9188
    mode http
    stats enable
    stats refresh 30s
    stats uri /stats 
    # 登录用户admin 密码admin
    stats auth admin:admin
    stats realm (Haproxy\ statistic)
    stats admin if TRUE

#配置rabbitmq管理端
listen rabbitmq_admin
    # 绑定15673端口
    bind 0.0.0.0:15673
    server node-01 192.168.157.133:15672
    server node-02 192.168.157.134:15672
    server node-03 192.168.157.135:15672

#配置rabbitmq集群
listen rabbitmq_cluster
    # 绑定5673端口
    bind 0.0.0.0:5673
    mode tcp
    option tcplog
    maxconn 10000
    # 负载模式为轮训
    balance roundrobin
    server node-03 192.168.157.135:5672 check inter 1000 rise 2 fall 2 backup
    server node-02 192.168.157.134:5672 check inter 1000 rise 2 fall 2 backup
    server node-01 192.168.157.133:5672 check inter 1000 rise 2 fall 2

启动haproxy

bash 复制代码
haproxy -f /etc/haproxy/haproxy.cnf

访问haproxy监控管理页面

通过haproxy配置的端口访问rabbitmq管理页面

五、安装keepalived

bash 复制代码
#yum安装keepalived
yum install -y keepalived
#修改keepalived.cnf配置,在/etc/keepalived/keepalived.cnf

global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

#检测脚本
vrrp_script check_haproxy {
    # 检测HAProxy脚本
    script "/etc/keepalived/script/check_haproxy.sh"
    # 每隔两秒检测
    interval 2
    # 权重
    weight 2
}


vrrp_instance haproxy {
    #MASTER为主 BACKUP为备
    state MASTER
    #填自己网卡的名字
    interface eno16777736
    mcast_src_ip 192.168.157.133    
    virtual_router_id 51
    priority 100
    advert_int 1
    #认证方式,主备配置一致就行
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #脚本
    track_script {
        check_haproxy
    }
    #虚拟IP地址
    virtual_ipaddress {
        192.168.157.11
    }    
}

启动keepalived

bash 复制代码
service keepalived restart

验证通过虚拟IP访问haproxy负载的rabbitmq管理端地址

至此安装全部完成。

相关推荐
Lovyk23 分钟前
Linux 正则表达式
linux·运维
Fireworkitte1 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil9002 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char2 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
繁星¹⁸⁹⁵3 小时前
通过update-alternatives可以实现cuda的多版本切换
服务器
淮北也生橘124 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习
开航母的李大5 小时前
软件系统运维常见问题
运维·服务器·系统架构·运维开发
Monly216 小时前
RabbitMQ:SpringAMQP 入门案例
spring boot·rabbitmq·java-rabbitmq
Monly216 小时前
RabbitMQ:SpringAMQP Fanout Exchange(扇型交换机)
spring boot·rabbitmq·java-rabbitmq
华强笔记7 小时前
Linux内存管理系统性总结
linux·运维·网络