Linux安装RabbitMQ[通俗易懂]

CentOSrelease6.6,python,erlang,rabbitmq

大家好,又见面了,我是你们的朋友全栈君。

安装须知

安装系统 : CentOS release 6.6 (Final) , Red Hat 4.4.7-11 , x86_64 GNU

1、安装Python

参考:http://www.aichengxu.com/view/37456
需要安装一个比较新的Python版本

1、安装 python

#wget https://www.python.org/ftp/python/3.5.0/Python-3.5.1.tar.xz
#xz –d Python-3.5.1.tar.xz
#tar -xvf Python-3.5.1.tar
#cd Python-3.5.1
#./configure (--prefix=/usr/local/python-3.5.1)可选
#make && make install
# make clean && make distclean

★注:./configure 不加prefix默认安装到/usr/local/bin

测试:在命令行下输入python,出现python解释器即表示已经正确安装。

此时

python –V 
Python 2.6.6 

这里写图片描述

这里写图片描述

安装目录:/usr/bin/python

仍然是系统默认的版本

使用python3.5 -V

这里写图片描述

这里写图片描述

安装目录:/usr/local/bin/python3.5

需要建立软连接指向当前系统默认的python目录处,让系统使用新的python版本

mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/python-3.5.1/bin/python3.5 /usr/bin/python

此时修改完成,输入python –V

这里写图片描述

这里写图片描述

PS:
有些人更新了python版本无法使用yum,需要为yum修改它的配置文件

vi /usr/bin/yum

将文件头部的#!/usr/bin/python改成#!/usr/bin/python2.6(注意这个是之前的老版本python号,因为此时老版本才能支持yum)

至此,Python安装完成

2、安装 simplejson

https://pypi.python.org/pypi/simplejson#downloads
simplejson-3.8.2.tar.gz

tar –zxvf simplejson-3.8.2.tar.gz
cd simplejson-3.8.2 
#python setup.py build
#python setup.py install

命令行下敲python

这里写图片描述

3、安装 erlang

RabbitMQ是基于Erlang的,必须配置Erlang环境。
本文采用yum安装方式
yum info erlang : No Package~~~

先下载epel源

# wget -O 
/etc/yum.repos.d/epel-erlang.repo http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo

切换yum源,可换为国内阿里云:
http://blog.csdn.net/realghost/article/details/45949759

先安装以下依赖包

#yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 
#yum install libX* tk unixODBC unixODBC-devel

yum –y install xmlto
yum install erlang

★注:可能会报错:
Error Downloading Packages:
erlang-megaco-R14B-04.3.el6.x86_64: failure: erlang-megaco-R14B-04.3.el6.x86_64.rpm from epel: [Errno 256] No more mirrors to try.
erlang-pman-R14B-04.3.el6.x86_64: failure: erlang-pman-R14B-04.3.el6.x86_64.rpm from epel: [Errno 256] No more mirrors to try.
erlang-compiler-R14B-04.3.el6.x86_64: failure: erlang-compiler-R14B-04.3.el6.x86_64.rpm from epel: [Errno 256] No more mirrors to try.
erlang-typer-R14B-04.3.el6.x86_64: failure: erlang-typer-R14B-04.3.el6.x86_64.rpm from epel: [Errno 256] No more mirrors to try.

重新将报错的安装包下载

安装完成,命令行输入erl

这里写图片描述

4、安装 RabbitMQ

RPM方式安装

rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc

这里写图片描述

rpm安装完成的路径
命令都在/usr/lib/rabbitmq/bin

这里写图片描述

其中,指向的命令链接目录都在
/usr/lib/rabbitmq/lib/rabbitmq_server-3.1.5/sbin

这里写图片描述

  • 安装web插件管理界面
rabbitmq-plugins enable rabbitmq_management

这里写图片描述

运行rabbitmqctl status

这里写图片描述

启动服务

/etc/init.d/rabbitmq-server restart

这里写图片描述

或者
rabbitmq-server start : 此方式关闭连接,自动结束进程

这里写图片描述

后台运行:rabbitmq-server -detached

再次运行rabbitmqctl status

这里写图片描述

ps aux | grep rabbitmq //查看端口

netstat -tnlp|grep 5672

这里写图片描述

启动成功

打开防火墙,开启rabbit_management页面管控台的15672端口

vi /etc/sysconfig/iptables

添加

## rabbitmq_management Port
-A INPUT -m state --state NEW -m tcp -p tcp --dport 15672 -j ACCEPT

## rabbitmq Port
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5672 -j ACCEPT

保存退出,重启防火墙

service iptables restart

验证服务

在浏览器输入http://192.168.230.131:15672/

这里写图片描述

初始密码guest/guest,进入管理界面:

这里写图片描述

关闭服务

/etc/init.d/rabbitmq-server stop

这里写图片描述

这里写图片描述

或者: rabbitmqctl stop

这里写图片描述

查看配置

cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.1.5/sbin

这里写图片描述

cat rabbitmq-defaults查看默认设置

这里写图片描述

查看日志

cd /var log/rabbitmq

这里写图片描述

这里写图片描述

这里写图片描述

添加RabbitMQ开机启动

使用rpm包安装完,默认开机任务有rabbitmq-server脚本
使用chkconfig --add rabbitmq-server命令把rabbitmq-server添加到开机启动,然后使用chkconfig –list 查看添加是否在开机任务中

用cd 命令切换到/etc/rc.d/init.d/目录下

cd /etc/rc.d/init.d

用touch rabbitmq创建一个文件,为这个文件添加可执行权限

这里写图片描述

这里写图片描述

chmod +x rabbitmq

这里写图片描述

接着用vi rabbitmq来编辑这个文件

#!/bin/bash
#chkconfig:2345 20 90
#description: rabbitmq
#processname: rabbitmq
case $1 in
          start) su root /etc/init.d/rabbitmq-server start;;
          stop)  su root /etc/init.d/rabbitmq-server stop;;
          status) su root /etc/init.d/rabbitmq-server status;;
          restart) su root /etc/init.d/rabbitmq-server restart;;
          *)  echo "require start|stop|status|restart"  ;;
esac

然后保存退出
这个时候就可以用service rabbitmq start/stop/status/restart来启动、停止rabbitmq服务了

这里写图片描述

这里写图片描述

最后一点我们需要开机自动启动,所以需要添加到启动里面

使用chkconfig --add rabbitmq命令把rabbitmq添加到开机启动,然后使用chkconfig –list 查看添加是否在开机任务中

这里写图片描述

添加rabbitmqadmin脚本

格式化命令输出数据格式

从Management查建中获取脚本

cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.1.5/plugins
wget http://localhost:55672/cli/rabbitmqadmin
chmod +x rabbitmqadmin 

这里写图片描述

./rabbitmqadmin -V "/" list exchanges

这里写图片描述

这里写图片描述

这里写图片描述

5、rabbitmq集群安装与配置

集群概述

通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。

这些节点通过 RabbitMQ HA 队列(镜像队列)进行消息队列结构复制。本方案中搭建 3 个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群对外就能提供服务。

设计架构可以如下:在一个集群里,有3台机器,其中1台使用磁盘模式,另2台使用内存模式。2台内存模式的节点,无疑速度更快,因此客户端 (consumer、producer)连接访问它们。而磁盘模式的节点,由于磁盘IO相对较慢,因此仅作数据备份使用,另外一台作为反向代理。

安装环境

  • CentOS 6.6,64位
  • RabbitMQ 3.1.5
  • HAProxy 1.4.22

集群安装在三台虚拟机上,hostname分别为:
master_node : 192.168.230.131
slave_node1 : 192.168.230.133
slave_node2 : 192.168.230.134

HAProxy 安装在 192.168.230.135 上,用于对外提供 RabbitMQ 均衡

配置步骤

1. 安装 erlang、rabbitmq
在 192.168.230.131、192.168.230.133、192.168.230.134 三个节点上安装,安装过程省略,开启 RabbitMQ 监控插件:
rabbitmq-plugins enable rabbitmq_management

2. 修改 /etc/hosts
加入集群 3 个节点的描述:
192.168.230.131 master_node
192.168.230.133 slave_node1
192.168.230.134 slave_node2

3. 设置 Erlang Cookie
Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个magic cookie来实现的,这个cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是400的权限。所以必须保证各节点cookie保持一致,否则节点之间就无法通信

将其中一台节点上的.erlang.cookie值复制下来保存到其他节点上。或者使用scp远程拷贝的方法也可,但是要注意文件的权限和属主属组

这里将 master_node 的该文件复制到 slave_node1、slave_node2,由于这个文件权限是 400,所以需要先修改 slave_node1、slave_node2 中的该文件权限为 777:

chmod 777 /var/lib/rabbitmq/.erlang.cookie

然后将 node1 中的该文件拷贝到 node2、node3,

scp -v root@master_node:/var/lib/rabbitmq/.erlang.cookie .erlang.cookie

这里写图片描述

这里写图片描述

复制好后别忘记还原.erlang.cookie的权限和所属用户/组,否则可能会遇到错误

# chmod 400 /var/lib/rabbitmq/.erlang.cookie
# chown rabbitmq /var/lib/rabbitmq/.erlang.cookie
# chgrp rabbitmq /var/lib/rabbitmq/.erlang.cookie

这里写图片描述

这里写图片描述

4. 使用 -detached 参数运行各节点
停止所有节点RabbitMq服务,然后使用detached参数独立运行
这步很关键,尤其增加节点停止节点后再次启动遇到无法启动都可以参照这个顺序

# rabbitmqctl stop
# rabbitmq-server -detached

这里写图片描述

  1. 组成集群
    master_node、slave_node1 与 slave_node2 组成集群:
    将master_node作为磁盘(disc)节点,slave_node1,slave_node2作为RAM节点

slave_node1 # rabbitmqctl stop_app
slave_node1 # rabbitmqctl join_cluster –ram root@master_node
slave_node1 # rabbitmqctl start_app

slave_node2 # rabbitmqctl stop_app
slave_node2 # rabbitmqctl join_cluster –ram root@master_node
slave_node2 # rabbitmqctl start_app

先停掉rabbitmq应用,然后调用cluster命令,将slave_node1连接到,使两者成为一个集群,最后重启rabbitmq应 用。在这个cluster命令下,slave_node1、slave_node2是内存节点,master_node是磁盘节点(RabbitMQ启动后,默认是磁盘节 点)。
master_node 如果要使slave_node1或slave_node2在集群里也是磁盘节点,join_cluster 命令去掉–ram参数即可

只要在节点列表里包含了自己,它就成为一个磁盘节点。在RabbitMQ集群里,必须至少有一个磁盘节点存在。

[root@master_node~]# rabbitmqctl cluster_status

[root@slave_node1~]# rabbitmqctl cluster_status

[root@slave_node2~]# rabbitmqctl cluster_status

往任意一台集群节点里写入消息队列,会复制到另一个节点上, 这样RabbitMQ集群就正常工作了,

这种模式更适合非持久化队列,只有该队列是非持久的,客户端才能重新连接到集群里的其他节点,并重新创建队列。假如该队列是持久化的,那么唯一办法是将故障节点恢复起来.
为什么RabbitMQ不将队列复制到集群里每个节点呢?这与它的集群的设计本意相冲突,集群的设计目的就是增加更多节点时,能线性的增加性能(CPU、内存)和容量(内存、磁盘)。

6. 设置镜像队列策略
在任意一个节点上执行:

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

将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。

完成这 6 个步骤后,RabbitMQ 高可用集群就已经搭建好了,最后一个步骤就是搭建均衡器。

7. 安装并配置 HAProxy
在 192.168.230.134 上安装 HAProxy,然后修改

/etc/haproxy/haproxy.cfg: 

listen rabbitmq_cluster 0.0.0.0:5672

mode tcp
balance roundrobin

server   node1 192.168.230.131:5672 check inter 2000 rise 2 fall 3  
server   node2 192.168.230.133:5672 check inter 2000 rise 2 fall 3
server   node2 192.168.230.134:5672 check inter 2000 rise 2 fall 3
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127437.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月9日 下午10:00
下一篇 2022年4月9日 下午10:09


相关推荐

  • 数据结构与算法(十五):二叉排序树[通俗易懂]

    数据结构与算法(十五):二叉排序树[通俗易懂]一、什么是二叉排序树二叉排序树(BinarySortTree)又称二叉查找树、二叉搜索树。它或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根

    2022年8月16日
    6
  • java graphics2d 绘图_Java编程 Graphics2D类的绘图方法

    java graphics2d 绘图_Java编程 Graphics2D类的绘图方法现在都讲究立体的效果 Graphics2D 类的绘图方式就属于高级绘图了 在我们日常生活中经常提到的 2d 3d 电影都是立体的 而编程语言也是一样 可以实现 2d 的效果哦 下面就让我们一起来学习下吧 Java 语言在 Graphics 类提供绘制各种基本的几何图形的基础上 扩展 Graphics 类提供一个 Graphics2D 类 它拥用更强大的二维图形处理能力 提供 坐标转换 颜色管理以及文字布局等更精确的控制

    2025年7月8日
    4
  • Linux新手入门教程

    Linux新手入门教程下面给你讲解新手第一次接触 Linux 操作系统一 学习 Linux 1 Linux 系统 Linux 命令 ssh websever apache MySQL 缓存 PHP Python java 必备服务 2 Linux 能做什么 企业服务器 嵌入式开发 3 Linux 的学习方法 强迫自己一个学习环境 给自

    2026年3月26日
    0
  • 安装luajit_lua安卓

    安装luajit_lua安卓wgethttp://luajit.org/download/LuaJIT-2.0.5.tar.gztarxzvfLuaJIT-2.0.5.tar.gzcdLuaJIT-2.0.5mkdir~/luajit2makeprefix=/home/wang/luajit2sudomakeinstallluajit-v#SuccessfullyLuaJIT2.0.5…

    2026年4月14日
    3
  • js中setTimeout和clearTimeout的使用

    js中setTimeout和clearTimeout的使用一、概念1、js中可以通过setTimeout函数设置定时器,让指定的代码在指定的时间运动. 如果我们希望在setTimeout之行前终止其运行就可以使用clearTimeout()。2、clearTimeout()用于重置js定时器,如果你希望阻止setTimeout的运行,就可以使用clearTimeout方法。二、使用场景1、写计时器2、需要让程序隔一

    2025年7月20日
    8
  • 第一章. ActionScript 语言基础

    第一章. ActionScript 语言基础

    2021年12月14日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号