## Rabbitmq 集群搭建

Rabbitmq 集群搭建 centos7

单机部署rabbitmq

  • erlang
  • socat
  • rabbitmq
    在这里插入图片描述
  1. 安装erlang的编译环境
yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget
  1. erlang下载,由于官网下载速度慢所以从rabbitmq推荐的网站下载rpm版进行安装
    地址:https://www.erlang-solutions.com/resources/download.html
    因为不知道签名所以在安装之前先进行如下操作
sudo yum install epel-release
sudo yum install unixODBC unixODBC-devel wxBase wxGTK SDL wxGTK-gl

在这里插入图片描述

  1. 安装socat
yum install socat
  1. 安装rabbitmq
    安装包官网下载速度也是很慢可以考虑国内的镜像网站,华为,阿里
    获取签名:从官网上看到的
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc

安装rabbitmq:

rpm -ivh rabbitmq-server-3.8.4.rc.3-1.el7.noarch.rpm

启动rabbitmq

rabbitmq-server -detached #启动rabbitmq
rabbitmqctl status #查看rabbitmq的状态,只要不出现error就算是成功了

导入管理界面

rabbitmq-plugins enable rabbitmq_management #之后根据http://ip:15672访问
如果通过浏览器访问不了就看一下是不是防火墙没有关
service firewalld status  # 如果显示是running
service firewalld stop

在这里插入图片描述

如果是本机安装可以使用guest guest 账户和密码登录,远程则不行

想要远程访问可以新建用户enlink
rabbitmqctl add_user enlink 123456 #新建用户
rabbitmqctl set_permissions -p / enlink ".*" ".*" ".*" #设置用户权限
rabbitmqctl set_user_tags enlink administrator  #设置用户为管理员

在这里插入图片描述

搭建集群

  • 普通模式:实现了集群中各个节点之间数据的共享
  • 镜像模式:在普通集群的基础上添加了相应的策略,使得各个节点上的数据一直,实现了高可用
  • 负载均衡:haproxy 或者 nginx实现 (这部分不写)
  1. 重复上述操作,建立三台服务器,如果是虚拟机可以直接clone
    在这里插入图片描述

  2. 查看erlang的cookie是否一致

cat /var/lib/rabbitmq/.erlang.cookie  
#获取cookie文件中的值,如果该目录下找不到该文件,用find找
# 比对cookie中的值,然后比对一下数据是否相同  如果不同则进行复制操作,将里面的内容换成一样的(如果是通过复制的方式创建的虚机,其cookie应该是一致的)
  1. 修改hosts文件,将各个节点的IP映射添加进去
vi /etc/hosts

在这里插入图片描述

然后重启服务器,为了修改hostname的值。rabbitmq节点的节点是rabbitmq@hostname
可以使用以下命令去查看,rabbitmq node节点的名称是否改变

rabbitmq-server -detached  # 重启后rabbitmq的服务是关闭的,要先开启服务如果感觉麻烦可以设置开机启动,具体操作百度
rabbitmqctl status

在这里插入图片描述

  1. 将所有节点添加到一个集群中
rabbitmqctl cluster_status

在这里插入图片描述

# 分别在其余两台rabbitmq服务器上做如下操作将节点加入同一个集群中
rabbitmqctl stop_app 
# 将这个节点停掉,不是stop而是stop_app:只是听节点不停集群
rabbitmqctl join_cluster rabbit@enlink01  
#将本节点添加到集群中,这里的rabbit@enlink是刚才在途中所显示的集群的名称
rabbitmqctl start_app # 启动这个节点
rabbitmqctl cluster_status # 查看这个节点有没有添加进去

在这里插入图片描述

5.管理页面查看集群的状态
可能你原本配置的用户已经不存在了,这是重启造成的,具体原因我也不清楚,这个可以百度,后期要是知道了原因或者解决方法我会添加进来// todo
在这里插入图片描述


以上算是普通模式搭建完成可以实现节点间的数据共享

镜像模式

  1. 设置镜像队列策略
    新建一个虚拟主机,在前端管理页面做如下操作
    在这里插入图片描述
# 在Linux中执行如下命令(任何一个节点都可以)
rabbitmqctl set_policy -p vhost ha-all "^" '{"ha-mode":"all"}'

# 下面这个说明是从别的博客中直接复制过来的
"vhost" 为vhost名称, "^"匹配所有的队列, ha-all 策略名称为ha-all, '{"ha-mode":"all"}' 策略模式为 all 即复制到所有节点,包含新增节点。则此时镜像队列设置成功。

说明:这里的虚拟主机vhost-test是代码中需要用到的虚拟主机,虚拟主机的作用是做一个消息的隔离,本质上可认为是一个rabbitmq-server,是否增加虚拟主机,增加几个,这是由开发中的业务决定,即有哪几类服务,哪些服务用哪一个虚拟主机,这是一个规划)

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
 
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
    ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
        all:表示在集群中所有的节点上进行镜像
        exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
        nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
    ha-params:ha-mode模式需要用到的参数
    ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
priority:可选参数,policy的优先级

测试

  • 管理端页面测试
  • Java代码测试
  1. 给/虚拟主机添加一个exchange
    在这里插入图片描述

同样的操作给vhost添加一个exchange
在这里插入图片描述

  1. 创建队列
    在这里插入图片描述

同样也给vhost虚拟主机创建一个队列
在这里插入图片描述

  1. 将队列和exchange绑定
    在这里插入图片描述

同样的操作给vhost中的哪个exchange整一遍
4. 往队列里发送一个消息
我把队列的名字改了,改成了message.enlink01,至于原因是因为好记。
在这里插入图片描述

在这里插入图片描述

  1. 测试普通模式下数据共享

    • 消息队列在enlink01这个节点中,
    • 要想验证数据共享,我们只需要登录节点enlink02的前端管理页面,获取这个队列中的消息看看就可以了。
      在这里插入图片描述
  2. 验证镜像模式下,数据的备份,实现高可用。

    • 方式:停止enlink01节点,从enlink02节点的管理界面去看看能不能获取本来在enlink01节点中的消息。
# 应该注意的时使用rabbitmqctl stop_app 而不是 stop
[root@enlink01 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@enlink01 ...

在这里插入图片描述

在这里插入图片描述

致谢博客

https://blog.csdn.net/zifengye520/article/details/104694723/

https://www.cnblogs.com/ExMan/p/11011588.html

https://www.cnblogs.com/itero/p/11199717.html

https://blog.csdn.net/u013098162/article/details/106842095/

https://blog.csdn.net/vir56k/article/details/105264631

https://www.rabbitmq.com/cli.html

http://c.biancheng.net/view/793.html

https://blog.csdn.net/wexiaoword/article/details/81352045?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-8-81352045.nonecase

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值