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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Laravel 5 如何实现网站在维护模式下允许指定 IP 用户访问(白名单)

    Laravel 5 如何实现网站在维护模式下允许指定 IP 用户访问(白名单)

    2021年11月4日
    35
  • 系统结构-并行算法FORK JOIN[通俗易懂]

    系统结构-并行算法FORK JOIN[通俗易懂]并行算法FORKJOIN一、FORKJOIN定义二、举例题目分析:一、FORKJOIN定义FORK语句的形式:FORKm,其中m为新进程开始的标号。执行FORKm语句时,派生出标号为m开始的新进程,具体为:1、准备好这个新进程启动和执行所必需的信息;2、如果是共享主存,则产生存储器指针、映像函数和访问权数据;3、将空闲的处理机分配给派生的新进程,如果没有空闲处理机,则让它们排队等待;4、继续在原处理机上执行FORK语句的原进程。与FORK语句相配合,作为每个并发进程的终端语句J

    2022年9月20日
    0
  • 如何解析域名?

    如何解析域名?

    2021年9月20日
    53
  • webpack基础打包命令_webpack打包现有项目

    webpack基础打包命令_webpack打包现有项目没有配置文件的打包如果我们没有使用配置文件webpack.config.js,那么我们就需要通过命令来打包案例我们首先创建一个webpackTest文件夹,然后在文件夹中再创建2个子文件夹dis

    2022年8月7日
    5
  • oracle错误959_oracle12528错误

    oracle错误959_oracle12528错误【错误情况】[oracle@ccdevsvradmin]$expwmap/pass@jackeydbExport:Release8.1.7.4.0-ProductiononFriOct811:28:372004(c)Copyright2000OracleCorporation.Allrightsreserved.Connectedto:Oracle9i…

    2022年9月15日
    0
  • 嵌入式C语言的小细节,excel的几个函数[通俗易懂]

    嵌入式C语言的小细节,excel的几个函数[通俗易懂]记录一下笔记嵌入式C语言有时候无法使用Static关键字嵌入式C语言中如果定义了变量没有使用可能报错嵌入式C语言中如果定义了无符号类型的变量最好别去和0比较,可能会报错嵌入式C语言的技巧if,else的嵌套使用得好可以加快速度excel的使用=‘sheet’!A1跨表传递数据很有用excel的使用中,=count(obj1:obj2)是一个很厉害的函数,作用是统计obj1到obj2的数字的个数;…

    2022年10月21日
    1

发表回复

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

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