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

至此安装全部完成。

相关推荐
IMPYLH14 分钟前
Linux 的 dirname 命令
linux·运维·服务器·数据库
南山love36 分钟前
spring-boot项目实现发送qq邮箱
java·服务器·前端
扛枪的书生1 小时前
Nginx 学习总结
linux
曹牧2 小时前
JSON 数组的正确使用方式
java·服务器·前端
石头猫灯2 小时前
DNS 服务器配置实验
运维·服务器
认真的薛薛2 小时前
Docker网络模式
linux·运维·数据库·面试·github
民乐团扒谱机2 小时前
【读论文】Frequency Comb Based Optical Time Transfer基于光频梳的光时间传递
运维·服务器
UP_Continue2 小时前
Linux--日志的模拟实现
linux·运维·服务器
xlp666hub2 小时前
深度剖析Linux Input子系统(1):宏观架构与核心原理
linux
东北甜妹2 小时前
playbook
linux·服务器·网络