Rabbitmq集群+HAproxy部署
标签: linux学习
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。
初来乍到,请多指教。
智能推荐
RabbitMQ + Haproxy 高可用队列集群
1.RabbitMQ是消息队列中间件是分布式系统中重要的组件,其作用是:系统应用耦合,异步消息,流量削锋等。由erlang开发的AMQP(Advanved Message Queue)的开源实现,官方地址:http://www.rabbitmq.com 2.Haproxy提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。(负载均衡策略有很多:轮询、加权轮询、源地址哈希、最小连接数等等...
Haproxy+Keepalived代理RabbitMq集群
####环境准备: 前面已经部署好了RabbitMq集群,https://www.jianshu.com/p/47391a5805b1 192.168.47.145 ----zabbix 192.168.47.147 ----zabbix1 192.168.47.129 ----zabbix2 测试环境:centos7.6 两台虚拟机,部署软件:Haproxy+Keepalived | 关闭防火墙...
linux Haproxy+rabbitMQ 镜像集群安装
rabbitMQ 安装需要安装erlang,erlang 需要 c++编译处理。因此安装步骤如下: 多说一句,为了以后集群方便知道 rabbitmq在那个主机,建议修改hostname。具体修改方法请参考其他网友解决方案 如:http://blog.csdn.net/yangshangwei/article/details/52878530 我分别给两台服务器修改了hostname, 修改后的ip...
Rabbitmq镜像模式集群+Haproxy+Keepalived
Rabbitmq镜像模式集群+Haproxy+Keepalived 1、部署 RabbitMQ Cluster(HA) 1)、3台centos7操作系统,ip分别为: 10.11.59.113 10.11.59.114 10.11.59.115 域名解析: 确定三台rabbitmq可以ping通 安装依赖的erlang环境(3台) rabbitmq常用命令 启动rabbitmq 账号配置(安装启动...
RabbitMQ集群代理HAProxy的安装
在集群处理中,我们需要一个中间代理进行一个转发。因为程序写好,发布上线后,总不能因为一个节点挂了,然后修改程序的配置指向另一个节点。所以,我们需要一个控制管理对某个集群进行统一管理,而外部只需要对这个控制管理代理进行操作即可。哪怕内部任意一个节点挂了,提供给外部访问的还是控制管理代理。 如图所示: 下载依赖包 yum install gcc vim wget 解压上传haproxy源码包 tar ...
猜你喜欢
Mybatis基础(part 1)
一.mybatis调用SQL语句 1.使用XML配置SQL语句 在SqlMapConfig.xml配置数据源并指定映射配置文件的位置(每个DAO对应的XML文件,该文件映射了DAO的全限定类名) 2.使用注解配置sql语句 在SqlMapConfig.xml配置数据源和class属性(指定被注解的dao全限定类名),在DAO上写注解。 用注解来配置,故此处使用class属性指定被注解...
Docker 容器内运行 Dubbo 服务
原文:http://www.aqcoder.com/post/content?id=41 在使用 Docker 容器内运行 Dubbo 服务的时候一个令人很头痛的问题就是服务地址注册。 Docker 容器内有自己的 IP 段,和宿主主机是隔离的,Dubbo 会使用容器内的 IP 注册到 zookeeper 注册中心上。这样其他的服务是无法访问的。 方式一:–host 一个很直接的方案就...
python基础教程
Python基础教程 一、简介 1.1 python语言介绍 python的创始人:Guido Van Rossum Python下载地址:https://www.python.org/ Python文档下载地址:https://www.python.org/doc/ Pycharm下载地址:https://www.runoob.com/w3cnote/pycharm-windows-instal...
1、Git安装与配置
1、Git安装与配置 一:版本控制 定义:版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 为什么要用版本控制:在起初的项目开发中,我们会不断的编写代码,但是,害怕有一天系统突然挂掉了,完蛋,辛苦写的代码就这么没了,所有为了防止这一点,都会开发一点就以目录拷贝的形式保存下来,自己这么1.0、2.0、3.0…的这么去标记,开始的还好,后面的话你压根就不知道...
Golang net/rpc 包的深度解读和学习
Golang 提供了一个开箱即用的RPC服务,实现方式简约而不简单。本文对net/rpc 包做深度解读和学习实战。 RPC 简单介绍 远程过程调用 (Remote Procedure Call,RPC) 是一种计算机通信协议。允许运行在一台计算机的程序调用另一个地址空间的子程序(一般是开放网络中的一台计算机),而程序员就像调用调用本地程序一样,无需额外做交互编程。RPC 是一种 CS (Clien...
