rabbitmq集群

RabbiMQ模式

(1)单⼀模式。

(2)普通模式(默认的集群模式)。

1.镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA⽅案,在对业务可靠性要求较⾼的场合中⽐较适⽤)。要实现镜像模式,需要先搭建⼀个普通集群模式,在这个模式的基础上再配置镜像模式以实现⾼可⽤。

集群中的基本概念:

RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。

普通集群准备环境

三台都联网 三台都在同一网段内,如果是跨网会变差 关闭防火墙和seliunx

192.168.149.154  rabbitmq-1

192.168.149.153  rabbitmq-2

192.168.149.152        rabbitmq-3

三台机器都操作:

  1. 配置hosts⽂件更改三台MQ节点的计算机名分别为rabbitmq-1、rabbitmq-2 和rabbitmq-3,然后修改hosts配置⽂件

[root@rabbitmq-1 ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.149.154  rabbitmq-1

192.168.149.153  rabbitmq-2

192.168.149.152        rabbitmq-3

  1. 三个节点配置安装rabbitmq软件

安装依赖

[root@rabbitmq-1 ~]# yum install -y epel-release gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel

yum安装erlang

[root@rabbitmq-1 ~]# curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash

[root@rabbitmq-1 ~]# yum install erlang-21.3.8.21-1.el7.x86_64

测试;

[root@rabbitmq-1 ~]# erl

Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V9.3  (abort with ^G)

1>

安装rabbitmq

Release RabbitMQ 3.7.10 · rabbitmq/rabbitmq-server · GitHub

[root@rabbitmq-1 ~]# yum install rabbitmq-server-3.7.10-1.el7.noarch.rpm

# rabbitmq 和erlang兼容版本

RabbitMQ Erlang Version Requirements — RabbitMQ

# erlang 版本选择

rabbitmq/erlang - Packages · packagecloud

# rabbitmq 版本选择

RabbitMQ Project Announcements — RabbitMQ

3.启动

[root@rabbitmq-1 ~]# systemctl daemon-reload

[root@rabbitmq-1 ~]# systemctl start rabbitmq-server

[root@rabbitmq-1 ~]# systemctl enable rabbitmq-server

启动方式二:

[root@rabbitmq-1 ~]# /sbin/service rabbitmq-server status  ---查看状态

[root@rabbitmq-1 ~]# /sbin/service rabbitmq-server start   ---启动

每台都操作开启rabbitmq的web访问界面:

[root@rabbitmq-1 ~]# rabbitmq-plugins enable rabbitmq_management

创建用户

注意:在一台机器操作

添加用户和密码

[root@rabbitmq-1 ~]# rabbitmqctl add_user newrain 123456

Creating user "newrain" ...

...done.

这是为管理员

[root@rabbitmq-1 ~]# rabbitmqctl set_user_tags newrain administrator

Setting tags for user "newrain" to [administrator] ...

...done.

查看用户

[root@rabbitmq-1 ~]# rabbitmqctl list_users

Listing users ...

guest [administrator]

newrain [administrator]

...done.

newrain设置这三个权限前是没有权限查询队列,在ui界面也看不见

[root@rabbitmq-1 ~]# rabbitmqctl set_permissions -p "/" newrain ".*" ".*" ".*"

Setting permissions for user "newrain" in vhost "/" ...

...done.

所有机器都操作:开启用户远程登录:

[root@rabbitmq-1 ~]# cd /etc/rabbitmq/

[root@rabbitmq-1 rabbitmq]# cp /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

[root@rabbitmq-1 rabbitmq]# ls

enabled_plugins  rabbitmq.config

[root@rabbitmq-1 rabbitmq]# vim rabbitmq.config

修改如下:

三台重启[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server

4369 -- erlang发现端口

5672 --程序连接端口

15672 -- 管理界面ui端口

25672 -- server间内部通信口

192.168.149.154:15672

rabbitmq默认管理员用户:guest   密码:guest

注意:创建用户时出现下面报错 将终端退出重连即可

开始部署集群三台机器都操作:

  1. 首先创建好数据存放目录和日志存放目录:

[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/data

[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/logs

[root@rabbitmq-1 ~]# chmod 777 -R /data/rabbitmq

[root@rabbitmq-1 ~]# chown rabbitmq.rabbitmq /data/ -R

创建配置文件:

[root@rabbitmq-1 ~]# vim /etc/rabbitmq/rabbitmq-env.conf

[root@rabbitmq-1 ~]# cat /etc/rabbitmq/rabbitmq-env.conf

RABBITMQ_MNESIA_BASE=/data/rabbitmq/data

RABBITMQ_LOG_BASE=/data/rabbitmq/logs

重启服务

[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server

  1. 拷⻉erlang.cookie

Rabbitmq的集群是依附于erlang的集群来⼯作的,所以必须先构建起erlang的集群景象。

如果执行# rabbitmqctl stop_app 这条命令报错:需要执行

#chmod 400 .erlang.cookie

#chown rabbitmq.rabbitmq .erlang.cookie

erlang.cookie 一般会存在这两个地址:第一个是home/.erlang.cookie;第二个地方就是/var/lib/rabbitmq/.erlang.cookie。如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在{home}目录下,也就是$home/.erlang.cookie。如果我们使用rpm等安装包方式进行安装的,那么这个文件会在/var/lib/rabbitmq目录下。

[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie

HOUCUGJDZYTFZDSWXTHJ

⽤scp的⽅式将rabbitmq-1节点的.erlang.cookie的值复制到其他两个节点中。

[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.149.152:/var/lib/rabbitmq/

[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.149.153:/var/lib/rabbitmq/

3.将mq-2、mq-3作为内存节点加⼊mq-1节点集群中

在mq-2、mq-3执⾏如下命令:

[root@rabbitmq-2 ~]# systemctl restart rabbitmq-server

[root@rabbitmq-2 ~]# rabbitmqctl stop_app  #停止节点

[root@rabbitmq-2 ~]# rabbitmqctl reset   #如果有数据需要重置,没有则不用

[root@rabbitmq-2 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq-1  #添加到磁盘节点

Clustering node 'rabbit@rabbitmq-2' with 'rabbit@rabbitmq-1' ...

[root@rabbitmq-2 ~]# rabbitmqctl start_app  #启动节点

Starting node 'rabbit@rabbitmq-2' ...

======================================================================

[root@rabbitmq-3 ~]# systemctl restart rabbitmq-server

[root@rabbitmq-3 ~]# rabbitmqctl stop_app

Stopping node 'rabbit@rabbitmq-3' ...

[root@rabbitmq-3 ~]# rabbitmqctl reset

Resetting node 'rabbit@rabbitmq-3' ...

[root@rabbitmq-3 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq-1

Clustering node 'rabbit@rabbitmq-3' with 'rabbit@rabbitmq-1' ...

[root@rabbitmq-3 ~]# rabbitmqctl start_app

Starting node 'rabbit@rabbitmq-3' ...

  1. 查看集群状态

在mq-1磁盘节点上面查看

[root@rabbitmq-1 ~]# rabbitmqctl cluster_status

  1. 登录rabbitmq web管理控制台,创建新的队列

打开浏览器输⼊192.168.149.154 输⼊默认的Username:guest,输⼊默认的

Password:guest 

登录后出现如图所示的界⾯

根据界⾯提示创建⼀条队列

RabbitMQ镜像集群配置

[root@rabbitmq-1 ~]# rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'

Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

[root@rabbitmq-2 ~]# rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'

Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

[root@rabbitmq-3 ~]# rabbitmqctl set_policy  ha-all "^" '{"ha-mode":"all"}'

Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

再次查看队列已经同步到其他两台节点:

实验创建一个vhost,并给用户权限添加队列:

首先,在web界面,登陆后,点击“Admin--Virtual Hosts(页面右侧)”,在打开的页面上的下方的“Add a new virtual host”处增加一个虚拟主机,同时创建用户“admin”和“guest”均加上权限(在页面直接设置、点点点即可);

创建用户:注意:创建用户的时候tags指定的从下面的选项中选择用户的类型,如管理员之类的。

再新添加一条队列

在第一台服务器中执行以下命令;

[root@rabbitmq-1 ~]# rabbitmqctl set_policy -p coresystem  ha-all "^" '{"ha-mode":"all"}'

将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。完成这 6 个步骤后,RabbitMQ 高可用集群搭建完成,最后一个步骤就是搭建均衡器。

安装并配置负载均衡器HA
  1. 在192.168.149.154安装HAProxy

yum -y install haproxy

  1. 修改 /etc/haproxy/haproxy.cfg

[root@rabbitmq-1 ~]# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

[root@rabbitmq-1 ~]# vim /etc/haproxy/haproxy.cfg

global

    log         127.0.0.1 local2

    chroot      /var/lib/haproxy

    pidfile     /var/run/haproxy.pid

    maxconn     4000

    user        haproxy

    group       haproxy

    nbproc      4

    daemon

    # turn on stats unix socket

    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------

defaults

    mode                    http

    log                     global

    retries                 3

    timeout connect         10s

    timeout client          1m

    timeout server          1m

    timeout check           10s

    maxconn                 2048

#---------------------------------------------------------------------

##监控查看本地状态#####

listen admin_stats

        bind *:80

    mode http

    option httplog

    option httpclose

    log 127.0.0.1 local0 err

    stats uri  /haproxy

    stats auth newrain:123456

    stats refresh 30s

####################################

###反代监控

frontend server

    bind *:5670

    log global

    mode tcp

    #option forwardfor

    default_backend rabbitmq

    maxconn 3

backend rabbitmq

    mode        tcp

    log         global

    balance     roundrobin

    server      rabbitmq1 192.168.50.138:5672 check inter 2000s rise 2 fall 3

    server      rabbitmq2 192.168.50.139:5672 check inter 2000s rise 2 fall 3

    server      rabbitmq3 192.168.50.140:5672 check inter 2000s rise 2 fall 3

[root@rabbitmq-1 ~]# systemctl start haproxy

浏览器输入192.168.149.154/haproxy查看rabbitmq的状态。

注意:如果界面报错则可能端口发生冲突修改端口即可

##监控查看本地状态#####

listen admin_stats

        bind *:80  ——————此处80改为81即可

    mode http

    option httplog

    option httpclose

    log 127.0.0.1 local0 err

    stats uri  /haproxy

    stats auth newrain:123456

    stats refresh 30s

####################################

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值