@zhaikun
2018-02-06T16:04:18.000000Z
字数 3898
阅读 1568
软件
Rabbit MQ:3.2.2
erlang:R16B03
下载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
执行命令:
tar -zxvf otp_src_R16B03.tar.gz
cd otp_src_R16B03
./configure
make
make install
测试:
命令行输入:erl --version
出现版本信息,则成功。
tar zxvf rabbitmq-server-3.2.2.tar.gz
cd rabbitmq-server-3.2.2
make
make install
在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完成。
设置日志与消息持久化目录:
ln -s /home/app/rabbitmq/sbin/rabbitmq-server /usr/bin/rabbitmq-server
ln -s /home/app/rabbitmq/sbin/rabbitmq-env /usr/bin/rabbitmq-env
./ rabbitmq-server
./rabbitmq-server -detached(后台启动)
出现下面信息,则表示成功:
Starting broker… completed with 0 plugins.
lsof -i:5672
./rabbitmqctl stop
启动:./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
172.16.4.103 perterzhai01
172.16.4.104 perterzhai03
说明
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节点恢复,然后才可被消费;如果没有持久化的话,然后就没有然后了……
./rabbitmqctl stop_app
./rabbitmqctl reset
./rabbitmqctl start_app
这个是用来在perterzhai01上执行的,这个也可以不执行,直接在节点服务器执行下边的脚本,不过得保证这个rabbitmq服务是正常启动的.
./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集群里,必须至少有一个磁盘节点存在。
现在先执行主节点上的脚本,等待执行完成之后再执行服务节点的脚本,顺序不要错了哦~
./rabbitmqctl cluster_status
查看结果
[root@perterzhai03 sbin]# ./rabbitmqctl cluster_status
Cluster status of node rabbit@perterzhai03 ...
[{nodes,[{disc,[rabbit@perterzhai01]},{ram,[rabbit@perterzhai03]}]},
{running_nodes,[rabbit@perterzhai01,rabbit@perterzhai03]},
{partitions,[]}]
...done.
[root@perterzhai03 sbin]#
主节点状态
[root@perterzhai01 sbin]# ./rabbitmqctl cluster_status
Cluster status of node rabbit@perterzhai01 ...
[{nodes,[{disc,[rabbit@perterzhai01]},{ram,[rabbit@perterzhai03]}]},
{running_nodes,[rabbit@perterzhai03,rabbit@perterzhai01]},
{partitions,[]}]
...done.
[root@perterzhai01 sbin]#
两台机器的内容几乎是一样的,这样的话你的集群就建立成功了
普通的集群模式已经建立完成了.