Why not ZeroMQ
ZeroMQ更快不是吗?是的,RabbitMQ更丰富。看场景了,还是那句话,没有最好的,只有最合适的。
Erlang编译安装
参考文档:http://www.erlang.org/doc/installation_guide/INSTALL.html#How-to-Build-and-Install-ErlangOTP
[root@cx-t1 ~]
# cd /usr/local/src/
[root@cx-t1 src]
# wget http://www.erlang.org/download/otp_src_R15B03-1.tar.gz
[root@cx-t1 src]
# tar -xzf ./otp_src_R15B03-1.tar.gz ; cd otp_src_R15B03
[root@cx-t1 src]
# ./configure
[root@cx-t1 src]
# make
[root@cx-t1 src]
# make install
|
RabbitMQ编译安装
-
准备工作:修改机器名及安装依赖包
[root@cx-t1 ~]
# hostname rabbitmq-1
[root@cx-t1 ~]
# vi /etc/sysconfig/network
HOSTNAME=
cx-t1
[root@cx-t1 ~]
# vi /etc/hosts
# 有内部DNS的省事多了,墙裂推荐搞个内部DNS,以FQDN的形式保存主机名(别学我)
192.168.7.101
cx-t1
192.168.7.102
cx-t2
[root@cx-t2 ~]
# yum install xmlto
|
-
编译安装
[root@cx-t1 ~]
# cd /usr/local/src/
[root@cx-t1 src]
# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.0.1/rabbitmq-server-3.0.1.tar.gz
[root@cx-t1 src]
# tar -xzf ./rabbitmq-server-3.0.1.tar.gz; cd rabbitmq-server-3.0.1
[root@cx-t1 rabbitmq-server-3.0.1]
# make
[root@cx-t1 rabbitmq-server-3.0.1]
# make TARGET_DIR=/usr/local/rabbitmq-3.0.1 SBIN_DIR=/usr/local/rabbitmq-3.0.1/sbin MAN_DIR=/usr/local/rabbitmq-3.0.1/man install
[root@cx-t1 rabbitmq-server-3.0.1]
# vi /usr/local/rabbitmq-3.0.1/sbin/rabbitmq-defaults
CONFIG_FILE=
/data/rabbitmq/rabbitmq
LOG_BASE=
/data/log/rabbitmq
MNESIA_BASE=
/data/rabbitmq/mnesia
ENABLED_PLUGINS_FILE=
/data/rabbitmq/enabled_plugins
CONF_ENV_FILE=
/data/rabbitmq/rabbitmq-env
.conf
[root@cx-t1 rabbitmq-server-3.0.1]
# mkdir -pv /data/rabbitmq/mnesia /data/log/rabbitmq
[root@cx-t1 rabbitmq-server-3.0.1]
# groupadd -g 5672 rabbitmq ; useradd -u 5672 -g 5672 -d /home/rabbitmq -m rabbitmq
[root@cx-t1 rabbitmq-server-3.0.1]
# chown -R rabbitmq:rabbitmq /data/log/rabbitmq /data/rabbitmq
[root@cx-t1 rabbitmq-server-3.0.1]
# ln -s /usr/local/rabbitmq-3.0.1 /usr/local/rabbitmq
[root@cx-t1 rabbitmq-server-3.0.1]
# vi /etc/profile
export
PATH=
/usr/local/rabbitmq/sbin
:$PATH
[root@cx-t1 rabbitmq-server-3.0.1]
# source /etc/profile
[root@cx-t1 rabbitmq-server-3.0.1]
# rabbitmqctl --help
|
通过查看安装包中的MakeFile可以发现几个配置参数TARGET_DIR、SBIN_DIR和MAN_DIR需要在make时指定,
而RABBITMQ_NODENAME、RABBITMQ_MNESIA_DIR和RABBITMQ_LOG_BASE等即可在make时指定亦可在install后修改sbin/rabbitmq-defaults这个文件。
-
配置Erlang cookie,激活Management Plugin
more: http://www.rabbitmq.com/management.html
[root@cx-t1 ~]
# echo "your cookie, as complex as possible" > /home/rabbitmq/.erlang.cookie
[root@cx-t1 rabbitmq-server-3.0.1]
# su - rabbitmq
[rabbitmq@cx-t1 ~]$ rabbitmq-plugins
enable
rabbitmq_management
|
-
启动服务
[rabbitmq@cx-t1 ~]$ rabbitmq-server -detached
[rabbitmq@cx-t1 ~]$ rabbitmqctl list_users
|
配置RabbitMQ Clustering
Clustering配置有两种方式:
-
使用rabbitmqctl
这种方式轻便简洁,可以动态增减node(推荐)。
下面这个脚本例子就是将node rabbit@cx-t2加入到rabbit@cx-t1这个node。这种方式即便rabbit@cx-t2中有数据也会被rabbit@cx-t1所覆盖,相当于rabbit@cx-t2自动reset了。
[rabbitmq@cx-t2 ~]$ rabbitmqctl stop_app
Stopping node
'rabbit@cx-t2'
...
...
done
.
[rabbitmq@cx-t2 ~]$ rabbitmqctl join_cluster rabbit@cx-t1
Clustering node
'rabbit@cx-t2'
with
'rabbit@cx-t1'
...
...
done
.
[rabbitmq@cx-t2 ~]$ rabbitmqctl start_app
Starting node
'rabbit@cx-t2'
...
...
done
.
[rabbitmq@cx-t2 ~]$ rabbitmqctl cluster_status
Cluster status of node
'rabbit@cx-t2'
...
[{nodes,[{disc,[
'rabbit@cx-t1'
,
'rabbit@cx-t2'
]}]},
{running_nodes,[
'rabbit@cx-t1'
,
'rabbit@cx-t2'
]},
{partitions,[]}]
...
done
.
-
修改rabbitmq.config这个配置文件
必须是fresh node——即mnesia数据库是空的,才可以正常启动,否则需要执行如下命令后rabbitmqctl reset才可以正常启动加入集群。rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
总结:
- RabbitMQ安装步骤在每个机器上都是一样的,management plugin只需在一个机器上激活即可。
- 一定要确保每个机器上的erlang cookie都是一样的,这样node间才可以互相访问。
- 服务一定要用rabbitmq这个用户启动,不要使用root。
- rabbitmq默认的端口为5672,management plugin的默认端口为15672。
- 首次登录管理界面(http://yourhost:15672)用guest这个账号,密码为guest。登录后修改guest密码或新建一个管理员账号再删除guest