RabbitMQ基本操作

RabbitMQ基本操作: https://blog.csdn.net/Michael_lcf/article/details/124677268
RabbitMQ的5大核心概念: https://blog.csdn.net/Michael_lcf/article/details/126435452
RabbitMQ的队列模式:https://blog.csdn.net/Michael_lcf/article/details/139362674
RabbitMQ实现分布式WebSocket通信: https://blog.csdn.net/Michael_lcf/article/details/126403772

为什么要用MQ:1.流量消峰。2.应用解耦。3.异步处理。

1、windows安装rabbitmq

分别安装 erlangrabbitmq
下载链接: https://download.csdn.net/download/Michael_lcf/85332315

Erlang_otp_win64_22.3.exe
rabbitmq-server-3.8.3.exe

浏览器访问:http://127.0.0.1:15672/.
guest/guest

2、linux单节点rabbitmq

2.2、安装rabbitmq

链接: https://download.csdn.net/download/Michael_lcf/86262885

=== 安装rabbitmq ===
rpm -ivh erlang-21.3-1.el7.x86_64.rpm
yum install socat -y
rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm

=== 启动rabbitmq ===
systemctl enable rabbitmq-server
systemctl start rabbitmq-server
systemctl status rabbitmq-server
systemctl stop rabbitmq-server

=== 开启web管理插件 ===
rabbitmq-plugins enable rabbitmq_management
用默认账号密码(guest/guest)访问地址 http://192.168.168.101:15672/出现权限问题;

=== 添加一个新的用户
# 创建账号
rabbitmqctl add_user admin123 admin123
# 设置用户角色
rabbitmqctl set_user_tags admin123 administrator
# 设置用户权限
# set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
rabbitmqctl set_permissions -p "/" admin123 ".*" ".*" ".*"
用户 user_admin123 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限
# 当前用户和角色
rabbitmqctl list_users


# 创建一个vhost:vhost_name就是想要创建的vhost
rabbitmqctl add_vhost [vhost_name]
rabbitmqctl delete_vhost [vhost_name]
rabbitmqctl list_vhosts

用账号密码(admin123/admin123)访问地址 http://192.168.168.101:15672/正常访问;
=== 重置命令 ===
# 关闭应用的命令
rabbitmqctl stop_app
# 重置的命令
rabbitmqctl reset
# 重新启动命令
rabbitmqctl start_app
# 查看所有队列命令
rabbitmqctl list_queues

2.3、安装过程的小插曲

2.3.1、Error: unable to perform an operation on node ‘rabbit@michael’

Error: unable to perform an operation on node 'rabbit@michael'. Please see diagnostics information and suggestions below.

Most common reasons for this are:

 * Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues)
 * CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server)
 * Target node is not running

In addition to the diagnostics info below:

 * See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more
 * Consult server logs on node rabbit@michael
 * If target node is configured to use long node names, don't forget to use --longnames with CLI tools

DIAGNOSTICS
===========

attempted to contact: [rabbit@michael]

rabbit@michael:
  * connected to epmd (port 4369) on michael
  * node rabbit@michael up, 'rabbit' application running

Current node details:
 * node name: 'rabbitmqcli-3572-rabbit@michael'
 * effective user's home directory: /var/lib/rabbitmq
 * Erlang cookie hash: mXgl+uqZ4XzA9DXxrrbEyw==

/etc/hosts 文件中如下图添加 相关配置:

3、三节点rabbitmq集群

3.1、三节点集群安装rabbitmq

前提三节点 均已安装rabbitmq。
1.修改3台机器的主机名称

在第1台机器执行
echo node1 > /etc/hostname
在第2台机器执行
echo node2 > /etc/hostname
在第3台机器执行
echo node3 > /etc/hostname

2.配置各个节点的 hosts 文件,让各个节点都能互相识别对方

cat >> /etc/hosts << EOF

192.168.168.171 node1
192.168.168.172 node2
192.168.168.173 node3
EOF

3.以确保各个节点的cookie文件使用的是同一个值
在node1上执行远程操作命令

scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/.erlang.cookie

4.启动RabbitMQ服务,顺带启动Erlang虚拟机和RbbitMQ应用服务
在三台节点上分别执行以下命令

rabbitmq-server -detached

5.在node2执行
此处 我们以node1为主,然后把node2加入到node1。

rabbitmqctl stop_app (只关闭RabbitMQ服务)
(rabbitmqctl stop 会将Erlang虚拟机关闭;rabbitmqctl stop_app 只关闭RabbitMQ服务;)
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app (只启动应用服务)

6.在node3执行
此处 我们以node1为主,然后把node3加入到node2。(把node3加入到node1也可以。)

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node2
rabbitmqctl start_app

7.集群状态

rabbitmqctl cluster_status

8.需要重新设置用户

创建账号
rabbitmqctl add_user admin123 admin123
设置用户角色
rabbitmqctl set_user_tags admin123 administrator
设置用户权限
rabbitmqctl set_permissions -p "/" admin123 ".*" ".*" ".*"

9.解除集群节点(node2和node3机器分别执行)

(node2和node3机器分别执行)
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status

 (node1机器上执行)
rabbitmqctl forget_cluster_node rabbit@node2
rabbitmqctl forget_cluster_node rabbit@node3

3.2、配置集群镜像队列策略

如果RabbitMQ集群中只有一个Broker节点,那么该节点的失效将导致整体服务的临时性不可用,并且也可能会导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,但是这样仍然无法避免由于缓存导致的问题:因为消息在发送之后和被写入磁盘井执行刷盘动作之间存在一个短暂却会产生问题的时间窗。通过publisherconfirm机制能够确保客户端知道哪些消息己经存入磁盘,尽管如此,一般不希望遇到因单点故障导致的服务不可用。
引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他Broker节点之上,如果集群中的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。

  1. 启动三台集群节点。

  2. 随便找一个节点添加policy。

  3. 在node1上创建一个队列发送一条消息,队列存在镜像队列。

  4. 停掉node1之后发现node2成为镜像队列。

  5. 就算整个集群只剩下一台机器了 依然能消费队列里面的消息,说明队列里面的消息被镜像队列传递到相应机器里面了。

4、Haproxy+Keepalive实现高可用负载均衡

HAProxy提供高可用性、负载均衡及基于TCPHTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的井发连接数。
扩展nginx,lvs,haproxy之间的区别: http://www.ha97.com/5646.html

4.1、Haproxy Install

1.下载haproxy(在node1和node2)

yum -y install haproxy

2.修改node1和node2的haproxy.cfg

vim /etc/haproxy/haproxy.cfg

backend app
    balance     roundrobin
    server  rabbitmq_node1 192.168.168.171:5672 check inter 5000 rise 2 fall 3 weight 1
    server  rabbitmq_node2 192.168.168.172:5672 check inter 5000 rise 2 fall 3 weight 1
    server  rabbitmq_node3 192.168.168.173:5672 check inter 5000 rise 2 fall 3 weight 1

在这里插入图片描述

3.在两台节点启动haproxy

haproxy -f /etc/haproxy/haproxy.cfg
ps -ef | grep haproxy

4.访问地址

http://192.168.168.171:8888/stats
http://192.168.168.172:8888/stats

4.2、Keepalived实现双机(主备)热备

试想如果前面配置的HAProxy主机突然宕机或者网卡失效,那么虽然RbbitMQ集群没有任何故障但是对于外界的客户端来说所有的连接都会被断开结果将是灾难性的为了确保负载均衡服务的可靠性同样显得十分重要,这里就要引入Keepalived它能够通过自身健康检查、资源接管功能做高可用(双机热备),实现故障转移.

1.下载keepalived

yum -y install keepalived

2.节点node1配置文件

vim /etc/keepalived/keepalived.conf

把资料里面的keepalived.conf修改之后替换

3.节点node2配置文件
需要修改global_defs的router_id,如:nodeB
其次要修改vrrp_instance_VI中state为"BACKUP";
最后要将priority设置为小于100的值

4.添加haproxy_chk.sh
(为了防止HAProxy服务挂掉之后Keepalived还在正常工作而没有切换到Backup上,所以
这里需要编写一个脚本来检测HAProxy 务的状态,当HAProxy服务挂掉之后该脚本会自动重启HAProxy的服务,如果不成功则关闭Keepalived服务,这样便可以切换到Backup 继续工作)
vim /etc/keepalived/haproxy_chk.sh(可以直接上传文件)
修改权限chmod 777 /etc/keepalived/haproxy_chk.sh

5.启动keepalive命令(node1和node2启动)

systemctl start keepalived

6.观察Keepalived的日志

tail -f /var/log/messages -n 200

7.观察最新添加的vip

ip add show

8.node1模拟keepalived关闭状态

systemctl stop keepalived

9.使用vip地址来访问rabbitmq集群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值