rabbitmq安装及集群搭建

mq安装脚本

需要有java环境

需先以下两个文件跟下面的脚本在一个目录下执行
文件在下面的链接里

链接: https://pan.baidu.com/s/1QkuTsnlbmTyYM2etOH-NcA 提取码: sids

#!/bin/bash
# By YDF at 2020-12-23

echo -e "1.首先安装依赖socat,安装Erlang时需要这个"
yum install -y socat

echo -e "2.安装Erlang"
rpm -ivh erlang-23.1.3-1.el6.x86_64.rpm

echo -e "3.安装RabbitMQ"
rpm -ivh rabbitmq-server-3.8.9-1.el6.noarch.rpm

echo -e "4.启动RabbitMQ"
systemctl start rabbitmq-server

echo -e "5.设置RabbitMQ开机自启动"
systemctl enable rabbitmq-server

echo -e "6.RabbitMQ其他操作-查看启动后的情况"
rabbitmqctl status

echo -e "7.启用网页版后台管理插件"
rabbitmq-plugins enable rabbitmq_management

echo -e "8.新建一个用户名为admin,密码为123456的管理员,并授予管理员(administrator)权限"
rabbitmqctl add_user admin 123456
rabbitmqctl set_user_tags admin administrator

echo -e "9.设置admin可以使用的虚机权限"
rabbitmqctl add_vhost admin
rabbitmqctl set_permissions -p admin admin ".*" ".*" ".*"

echo -e "10.打开端口"
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=56721/tcp --permanent
firewall-cmd --reload

echo -e "11.授权"
rabbitmqctl list_users
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'

若要修改rabbitmq相关的默认端口信息可修改此文件,然后重启mq
在这里插入图片描述
若修改mq的相关端口,则需要开发端口,开发端口命名(为开发5672端口示例):
若不修改端口则开发mq默认端口即可

        firewall-cmd --zone=public --add-port=5672/tcp --permanent &&
        firewall-cmd --reload &&
        firewall-cmd --list-ports 

开始搭建集群

  1. 编辑每台RabbitMQ的cookie文件,以确保各个节点的cookie文件使用的是同一个值,可以scp其中一台机器上的cookie至其他各个节点,cookie的默认路径为/var/lib/rabbitmq/.erlang.cookie或者$HOME/.erlang.cookie,节点之间通过cookie确定相互是否可通信。

  2. 修改hostname(vi /etc/hostname)
    在这里插入图片描述
    前面的名字(node1)与下面配置hosts文件的名字对应,为rabbitmq节点的名称
    重启机器使hostname生效

reboot
  1. 配置各节点的hosts文件( vim /etc/hosts)
xxx.xxx.xxx.xxx node1
xxx.xxx.xxx.xxx node2
xxx.xxx.xxx.xxx node3
  1. 逐个节点启动RabbitMQ服务(先杀死mq进程再启动),启动命令为:
 service rabbitmq-server start
  1. 查看各个节点和集群的工作运行状态
rabbitmqctl status, rabbitmqctl cluster_status
  1. 以node1为主节点,在node2上执行
rabbitmqctl stop_app 
rabbitmqctl reset 
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app 

在其余的节点上的操作步骤与node2虚拟机上的一样

  1. 在RabbitMQ集群中的节点只有两种类型:内存节点/磁盘节点,单节点系统只运行磁盘类型的节点。而在集群中,可以选择配置部分节点为内存节点。
    内存节点将所有的队列,交换器,绑定关系,用户,权限,和vhost的元数据信息保存在内存中。而磁盘节点将这些信息保存在磁盘中,但是内存节点的性能更高,为了保证集群的高可用性,必须保证集群中有两个以上的磁盘节点,来保证当有一个磁盘节点崩溃了,集群还能对外提供访问服务。在上面的操作中,可以通过如下的方式,设置新加入的节点为内存节点还是磁盘节点:
#加入时候设置节点为内存节点(默认加入的为磁盘节点)
[root@node3 ~]# rabbitmqctl join_cluster rabbit@node1 --ram
#也通过下面方式修改的节点的类型
[root@node3 ~]# rabbitmqctl changeclusternode_type disc | ram
  1. 最后可以通过“rabbitmqctl
    cluster_status”的方式来查看集群的状态,上面搭建的4个节点的RabbitMQ集群状态(2个节点为磁盘即诶但,2个节点为内存节点)如下:
[root@node3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node3 ...
Basics

Cluster name: rabbit@VM-11-34-centos

Disk Nodes

rabbit@node1
rabbit@node4

RAM Nodes

rabbit@node2
rabbit@node3

Running Nodes

rabbit@node1
rabbit@node2
rabbit@node3
rabbit@node4

Versions

rabbit@node1: RabbitMQ 3.8.9 on Erlang 23.1.3
rabbit@node2: RabbitMQ 3.8.9 on Erlang 23.1.3
rabbit@node3: RabbitMQ 3.8.9 on Erlang 23.1.3
rabbit@node4: RabbitMQ 3.8.9 on Erlang 23.1.3

Maintenance status

Node: rabbit@node1, status: not under maintenance
Node: rabbit@node2, status: not under maintenance
Node: rabbit@node3, status: not under maintenance
Node: rabbit@node4, status: not under maintenance

Alarms

(none)

Network Partitions

(none)

Listeners

Node: rabbit@node1, interface: [::], port: 56721, protocol: http, purpose: HTTP API
Node: rabbit@node1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@node2, interface: [::], port: 56721, protocol: http, purpose: HTTP API
Node: rabbit@node2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@node3, interface: [::], port: 56721, protocol: http, purpose: HTTP API
Node: rabbit@node3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@node4, interface: [::], port: 56721, protocol: http, purpose: HTTP API
Node: rabbit@node4, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node4, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0

Feature flags

Flag: drop_unroutable_metric, state: enabled
Flag: empty_basic_get_metric, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: virtual_host_metadata, state: enabled
[root@node3 ~]# 

上面rabbitmq集群已搭建完成,接下来配置mq的负载均衡HAProxy

配置HAProxy

  1. 另外找一台机器安装
 yum -y install haproxy
  1. 修改haproxy的配置文件
[root@localhost haproxy]# cat haproxy.cfg
#全局配置
global
        #日志输出配置,所有日志都记录在本机,通过local0输出
        log 127.0.0.1 local0 info
        #最大连接数
        maxconn 4096
        #改变当前的工作目录
        chroot /apps/svr/haproxy
        #以指定的UID运行haproxy进程
        uid 99
        #以指定的GID运行haproxy进程
        gid 99
        #以守护进程方式运行haproxy #debug #quiet
        daemon
        #debug
        #当前进程pid文件
        pidfile /apps/svr/haproxy/haproxy.pid

#默认配置
defaults
        #应用全局的日志配置
        log global
        #默认的模式mode{tcp|http|health}
        #tcp是4层,http是7层,health只返回OK
        mode tcp
        #日志类别tcplog
        option tcplog
        #不记录健康检查日志信息
        option dontlognull
        #3次失败则认为服务不可用
        retries 3
        #每个进程可用的最大连接数
        maxconn 2000
        #连接超时
        timeout connect 5s
        #客户端超时
        timeout client 120s
        #服务端超时
        timeout server 120s

        maxconn 2000
        #连接超时
        timeout connect 5s
        #客户端超时
        timeout client 120s
        #服务端超时
        timeout server 120s

#绑定配置
listen rabbitmq_cluster
        bind 0.0.0.0:56720
        #配置TCP模式
        mode tcp
        #加权轮询
        balance roundrobin
        #RabbitMQ集群节点配置,其中ip1~ip7为RabbitMQ集群节点ip地址
        server node2 10.10.10.10:56721 check inter 5000 rise 3 fall 3 weight 1
        server node3 10.10.10.19:56721 check inter 5000 rise 3 fall 3 weight 1

#绑定配置 rabbitmq服务提供
listen rabbitmq_cluster_server
        bind 0.0.0.0:5672
        #配置TCP模式
        mode tcp
        #加权轮询
        balance roundrobin
        #RabbitMQ集群节点配置,其中ip1~ip7为RabbitMQ集群节点ip地址
        server node2 10.10.10.10:5672 check inter 5000 rise 3 fall 3 weight 1
        server node3 10.10.10.19:5672 check inter 5000 rise 3 fall 3 weight 1

#haproxy监控页面地址
listen monitor
        bind 0.0.0.0:8100
        mode http
        option httplog
        stats uri   /haproxy
        stats realm     Global\ statistics 
        stats auth  admin:admin
[root@localhost haproxy]# 

在上面的配置中“listen rabbitmq_cluster bind 0.0.0.0:56720”这里定义了客户端连接IP地址和端口号。这里配置的负载均衡算法是roundrobin—加权轮询。与配置RabbitMQ集群负载均衡最为相关的是“ server node1 10.10.10.10:56721 check inter 5000 rise 3 fall 3 weight 1”这种,它标识并且定义了后端RabbitMQ的服务。主要含义如下:
(a)“server ”部分:定义HAProxy内RabbitMQ服务的标识;
(b)“10.10.10.10:56721”部分:标识了后端RabbitMQ的服务地址;
©“check inter ”部分:表示每隔多少毫秒检查RabbitMQ服务是否可用;
(d)“rise ”部分:表示RabbitMQ服务在发生故障之后,需要多少次健康检查才能被再次确认可用;
(e)“fall ”部分:表示需要经历多少次失败的健康检查之后,HAProxy才会停止使用此RabbitMQ服务。

#启用HAProxy服务
[root@mq-testvm12 conf]# haproxy -f haproxy.cfg

启动后,即可看到如下的HAproxy的界面图(账号密码再配置文件中配置的 admin:admin):

在这里插入图片描述
在这里插入图片描述

这样服务就可通过负载访问mq的集群服务了,访问mq集群服务的时候haproxy负载到的mq的内存节点

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值