Linux安装RabbitMQ

本文详细介绍了在CentOS 6.6环境下安装Python、simplejson、Erlang及RabbitMQ的过程,并通过三台虚拟机构建了一个高可用的RabbitMQ集群。此外,还讲解了如何设置镜像队列策略及配置HAProxy负载均衡。
摘要由CSDN通过智能技术生成

安装须知

安装系统 : 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值