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管理端地址

至此安装全部完成。

相关推荐
不爱学英文的码字机器14 分钟前
深入理解 Linux 文件时间戳:atime、mtime 和 ctime 的概念及应用
linux·运维·服务器
qq1778036231 小时前
电商矩阵运营服务器怎么选
服务器·线性代数·矩阵·电商平台
迷迭所归处1 小时前
Linux系统 —— 进程控制系列 - 进程的等待:wait 与 waitpid
linux·运维·服务器
周先森的怣忈1 小时前
RHCE(第二部分)-----第三章:shell条件测试
linux·rhce
AIGCnn1 小时前
jetson 无显示器配置WIFI
linux·jetson
yulingfeng591 小时前
Centos7 yum 报错“Could not resolve host: mirrorlist.centos.org; Unknown error“
linux·运维·centos
m0_748239332 小时前
【PHP】部署和发布PHP网站到IIS服务器
android·服务器·php
海域云赵从友2 小时前
香港 GPU 服务器托管引领 AI 创新,助力 AI 发展
运维·服务器·人工智能
HIT_Weston2 小时前
16、【ubuntu】【gitlab】【补充】服务器断电后,重启服务器,gitlab无法访问
服务器·ubuntu·gitlab
流沙QS2 小时前
MinIO服务器文件复制(Windows环境&Linux环境)
服务器·分布式