Rabbitmq集群+HAproxy部署

MQ全称Messages Queue,即消息队列。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。队列的使用除去了接收和发送应用程序,同时执行的要求。在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式,大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
MQ的分类:
P2P模式(安全):
P2P模式包含三个角色:
1.消息队列(Queue)、
2.发送者(Sender)、
3.接收者(Receiver)。
每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。
P2P的特点如下:
• 每个消息只有一个消费者(Consumer),即一旦被消费,消息就不再在消息队列中
• 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行它不会影响到消息被发送到队列
• 接收者在成功接收消息之后,需向队列应答成功。
• 如果希望发送的每个消息都会被成功处理的话,那么需要P2P模式

Pub/Sub模式(并发):
Pub/Sub模式包含三个角色:主题(Topic)、发布者(Publisher)、订阅者(Subscriber) 。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。Pub/Sub的特点如下:
• 每个消息可以有多个消费者
• 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息
• 为了消费消息,订阅者必须保持运行的状态
• 如果希望发送的消息可以不被做任何处理、或者只被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型

RabbitMQ介绍:
RabbitMQ从整体上来看是一个典型的生产者消费者模型,主要负责接收、存储和转发消息。
在这里插入图片描述
RabbitMQ的通信过程:
在这里插入图片描述
1. P1生产消息,发送给服务器端的Exchange
2. Exchange收到消息,根据ROUTINKEY,将消息转发给匹配的Queue1
3. Queue1收到消息,将消息发送给订阅者C1
4. C1收到消息,发送ACK给队列确认收到消息
5. Queue1收到ACK,删除队列中缓存的此条消息

开始部署、上菜!!!!

部署环境:
192.168.237.11 haproxy
192.168.237.12 rabbitmq1
192.168.237.13 rabbitmq2
192.168.237.14 rabbitmq3
为以上四台虚拟机做域名解析同上,配置主机名同上,关闭防火墙,关闭selinux
第一步:分别为 rabbitmq1、rabbitmq2、rabbitmq3安装Erlang、安装Rabbitmq(三台机器同步)
1.写erlang的yum源、安装erlang:

# vim  /etc/yum.repos.d/erlang.repo
	[rabbitmq-erlang]
	name=rabbitmq-erlang
	baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/21/el/7
	gpgcheck=0
	gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
	repo_gpgcheck=0
	enabled=1
# yum -y install erlang

2.安装RabbitMQ(rabbitmq-server的版本可以安装自己喜欢的,我的是3.7.12)

 # wget https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/8/noarch/rabbitmq-server-3.7.20-1.el8.noarch.rpm
# yum install https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/noarch/rabbitmq-server-3.7.12-1.el7.noarch.rpm

3.修改rabbitmq的配置文件

# cp   /usr/share/doc/rabbitmq-server-3.7.12/rabbitmq.config.example  /etc/rabbitmq/rabbitmq.config
# vim /etc/rabbitmq/rabbitmq.config 

修改第61行如下所示:

 58    %%
 59    %% Uncomment the following line if you want to allow access to the
 60    %% guest user from anywhere on the network.
 61    {loopback_users, []}
 62
 63

4.安装插件并启动服务(安装web界面管理工具,l服务开启后可以看到端口:15672被监听):

# rabbitmq-plugins enable rabbitmq_management
# systemctl start rabbitmq-server
# ss -tnl

5.查看节点状态(可以看到节点名同主机名)

# rabbitmqctl cluster_status
   Cluster status of node rabbit@rabbitmq1 ...
   [{nodes,[{disc,[rabbit@rabbitmq1]}]},
   {running_nodes,[rabbit@rabbitmq1]},
   {cluster_name,<<"rabbit@rabbitmq1">>},
   {partitions,[]},
   {alarms,[{rabbit@rabbitmq1,[]}]}]

6.浏览器访问测试(http://ip:15672):
http://192.168.237.12:15672
默认账号/密码: guest/guest

rabbitma2、rabbitmq3重复上述1-6步即可。
rabbitma1、rabbitma2、rabbitma3都安装了erlang、安装了rabbitmq后在执行下面操作!!!
7.设置erlang的运行节点:
首先要保证三台机器的cookied内容一致,即将rabbitmq1的cookie文件拷贝到rabbitmq2、rabbitmq3,我们rpm包部署的一般都在/var/lib/rabbitmq/.erlang.cookie。

cat /var/lib/rabbitmq/.erlang.cookie
scp -r /var/lib/rabbitmq/.erlang.cookie rabbitmq2:/var/lib/rabbitmq/.erlang.cookie
scp -r /var/lib/rabbitmq/.erlang.cookie rabbitmq3:/var/lib/rabbitmq/.erlang.cookie

8.添加用户并设置密码(3台都要哦!!!):
由于guest这个用户,只能在本地访问,所以我们要在每个节点上,新增一个用户并赋予对/的所有权限,然后添加到管理员组中,让此用户能够远程访问

rabbitmqctl add_user  admin admin
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
rabbitmqctl set_user_tags admin administrator

9.测试访问(http://ip:15672 ):
http://192.168.237.12:15672
账号:admin
密码:admin

此时每个节点是单独的一台RabbitMQ,下面来将他们组成集群。

10.将rabbitmq2、rabbitmq3将加入到rabbitmq1中组成集群。
rabbitmq-server 启动时,会一起启动:节点和应用,它预先设置RabbitMQ应用为standalone(脱机)模式。要将一个节点加入到现有的集群中,你需要停止这个应用,并将节点设置为原始状态。如果使用systemctl stop rabbitmq-server,应用和节点都将被关闭。所以使用rabbitmqctl stop_app仅仅关闭应用。(即停应用,不停止节点)
rabbitmq2:
磁盘节点:

# rabbitmqctl stop_app
# rabbitmqctl join_cluster rabbit@rabitmq1

内存节点:

# rabbitmqctl join_cluster --ram rabbit@rabbitmq1
# rabbitmqctl start_app

rabbitmq2的操作同上(不在赘述)

11.在任意节点上查看集群状态:

[root@rabbitmq3 ~]# rabbitmqctl cluster_status
  Cluster status of node rabbit@rabbitmq3 ...
  [{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
  {running_nodes,[rabbit@rabbitmq2,rabbit@rabbitmq1,rabbit@rabbitmq3]},
  {cluster_name,<<"rabbit@rabbitmq1">>},
  {partitions,[]},
  {alarms,[{rabbit@rabbitmq2,[]},{rabbit@rabbitmq1,[]},{rabbit@rabbitmq3,[]}]}]

可以看到,此时集群已形成。
12.在任意节点上设置镜像队列策略
跟图走吧*_*-------->>>
在这里插入图片描述
在这里插入图片描述
图片小说明:在web界面登陆,点击“Admin–Virtual Hosts(页面右侧)”,在打开的页面上的下方的“Add a new virtual host”处增加一个虚拟主机,同时给用户“admin”和“guest”均加上权限(在页面直接设置、点点点即可);
然后在主机中设置(其中wiger52是我在web端设置的虚拟主机名,你可以换成自己的):

# rabbitmqctl set_policy -p wiger52  ha-all "^" '{"ha-mode":"all"}'

13.Rabbitmq+HAproxy
对虚拟机192.168.237.11进行操作:

# yum install  epep-release -y
# yum install haproxy -y

你只需要改主机机ip即可,另外,代理服务器的端口尽量不要和其他服务冲突

[root@tubage ~]# cat /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
    daemon

    stats socket /var/lib/haproxy/stats

defaults
       log        global
       mode       tcp
       option     tcplog
       option     dontlognull
       retries    3
       option redispatch
       maxconn 2000
       contimeout      5s
       clitimeout      120s
       srvtimeout      120s

listen rabbitmq_cluster 0.0.0.0:85    #作为代理的服务器的IP和端口
       mode      tcp
       balance roundrobin
       server rabbit1  192.168.237.12:15672 check inter 5000 rise 2 fall 2
       server rabbit2  192.168.237.13:15672 check inter 5000 rise 2 fall 2
       server rabbit3  192.168.237.14:15672 check inter 2000 rise 2 fall 3


listen monitor
    bind 0.0.0.0:8100#监控页面的访问端口
    mode http
    option httplog
    stats enable
    stats uri /rabbitmqstats
    stats refresh 30s
    stats auth admin:admin

# systemctl  start haproxy

14.测试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一切服务OK。
初来乍到,请多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值