[关闭]
@zhaikun 2018-02-06T16:04:18.000000Z 字数 3898 阅读 1568

rabbitMQ搭建

软件


使用生产上的版本:

Rabbit MQ:3.2.2
erlang:R16B03

1、准备工作

下载rabbit mq:http://www.rabbitmq.com/releases/
下载erlang:http://www.erlang.org/download/
安装ncurses
yum list|grep ncurses
yum -y install ncurses-devel
升级make版本和xslt版本
yum -y install libxslt-devel

2、安装erlang

执行命令:
tar -zxvf otp_src_R16B03.tar.gz
cd otp_src_R16B03
./configure
make
make install
测试:
命令行输入:erl --version
出现版本信息,则成功。

3、安装rabbitmq

tar zxvf rabbitmq-server-3.2.2.tar.gz
cd rabbitmq-server-3.2.2
make
make install

4、故障排查

在make install的时候得到一个报错:
echo “Put your EZs here and use rabbitmq-plugins to enable them.” > plugins/README
rm -f plugins/rabbit_common*.ez
Please set TARGET_DIR.
Please set SBIN_DIR.
Please set MAN_DIR.
Please set DOC_INSTALL_DIR.
make: * [install_dirs] 错误 1
解决办法
说让添加环境变量,解决方法:(rabbitmq-server-3.2.2目录下执行)
export TARGET_DIR=/home/SITAPP/rabbitmq
export SBIN_DIR=/home/SITAPP/rabbitmq/sbin
export MAN_DIR=/home/SITAPP/rabbitmq/man
export DOC_INSTALL_DIR=/home/SITAPP/rabbitmq/doc
重新make install又得到一个错误:
/bin/sh: xmlto: command not found
/bin/sh: line 2: xmlto: command not found
make: *
[docs/rabbitmqctl.1.gz] 错误 127
安装xmlto命令,yum install -y xmlto
重新make install完成。

5、配置rabbitMQ:

设置日志与消息持久化目录:
ln -s /home/app/rabbitmq/sbin/rabbitmq-server /usr/bin/rabbitmq-server
ln -s /home/app/rabbitmq/sbin/rabbitmq-env /usr/bin/rabbitmq-env

6、启动rabbitMQ(rabbitmq/sbin目录下):

./ rabbitmq-server
./rabbitmq-server -detached(后台启动)

出现下面信息,则表示成功:

#

Starting broker… completed with 0 plugins.

7、查看服务状态:

lsof -i:5672

8、关闭rabbitmq服务:

./rabbitmqctl stop

9、启动/关闭web管理工具:

启动:./rabbitmq-plugins enable rabbitmq_management
关闭:./rabbitmq-plugins disable rabbitmq_management
出现错误
Error: {cannot_write_enabled_plugins_file,”/etc/rabbitmq/enabled_plugins”,
enoent}
创建目录:
mkdir /etc/rabbitmq
从新启动:
./rabbitmq-plugins enable rabbitmq_management
出现下面信息:
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.
重启rabbitmq服务。

通过访问http://192.168.30.162:15672/ 用户名密码guest访问即可。

export TARGET_DIR=/home/app/rabbitmq
export SBIN_DIR=/home/app/rabbitmq/sbin
export MAN_DIR=/home/app/rabbitmq/man
export DOC_INSTALL_DIR=/home/app/rabbitmq/doc

集群配置

1、修改hosts

172.16.4.103 perterzhai01
172.16.4.104 perterzhai03

2、修改cookie,保持一致

说明

Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在 $home/.erlang.cookie 中(像我的root用户安装的就是放在我的root/.erlang.cookie中),文件是400的权限。所以必须包管各节点cookie对峙一致,不然节点之间就无法通信。

复制cookie内容

打开文件然后需要先把其中的一台服务器的.erlang.cookie中的内容复制到别的机器上,最好是复制内容,因为文件权限不对的话会出现问题,在最后退出保存的时候使用wq!用!来进行强制保存即可.

普通集群

对于Queue来说,消息实体只存在于其中一个节点,A、B两个节点仅有相同的元数据,即队列结构。

当消息进入A节点的Queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer。

所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连A或B,出口总在A,会产生瓶颈。

该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体。

如果做了消息持久化,那么得等A节点恢复,然后才可被消费;如果没有持久化的话,然后就没有然后了……

3、主节点服务配置脚本

./rabbitmqctl stop_app
./rabbitmqctl reset
./rabbitmqctl start_app
这个是用来在perterzhai01上执行的,这个也可以不执行,直接在节点服务器执行下边的脚本,不过得保证这个rabbitmq服务是正常启动的.

4、节点服务配置脚本

./rabbitmqctl stop_app
./rabbitmqctl reset
./rabbitmqctl join_cluster --ram rabbit@perterzhai01
./rabbitmqctl start_app
和主服务配置脚本的唯一区别是多了第三行的内容,其中--ram指的是作为内存节点,要是想做为磁盘节点的话,就不用加--ram这个参数了,把第3行写成这样就好了
./rabbitmqctl join_cluster rabbit@perterzhai01
高可用
rabbitmqctl set_policy ha-all "^ha." '{"ha-mode":"all"}'
PS:只要在节点列表里包含了本身,它就成为一个磁盘节点。在RabbitMQ集群里,必须至少有一个磁盘节点存在。

现在先执行主节点上的脚本,等待执行完成之后再执行服务节点的脚本,顺序不要错了哦~

5、查看节点状态

./rabbitmqctl cluster_status
查看结果

  1. [root@perterzhai03 sbin]# ./rabbitmqctl cluster_status
  2. Cluster status of node rabbit@perterzhai03 ...
  3. [{nodes,[{disc,[rabbit@perterzhai01]},{ram,[rabbit@perterzhai03]}]},
  4. {running_nodes,[rabbit@perterzhai01,rabbit@perterzhai03]},
  5. {partitions,[]}]
  6. ...done.
  7. [root@perterzhai03 sbin]#

主节点状态

  1. [root@perterzhai01 sbin]# ./rabbitmqctl cluster_status
  2. Cluster status of node rabbit@perterzhai01 ...
  3. [{nodes,[{disc,[rabbit@perterzhai01]},{ram,[rabbit@perterzhai03]}]},
  4. {running_nodes,[rabbit@perterzhai03,rabbit@perterzhai01]},
  5. {partitions,[]}]
  6. ...done.
  7. [root@perterzhai01 sbin]#

两台机器的内容几乎是一样的,这样的话你的集群就建立成功了
普通的集群模式已经建立完成了.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注