MQ在互联网时代已经不是什么新鲜技术,传统MQ主要在应用内部实现,到互联网时代已经多如牛毛,RabbitMQ、ActiveMQ、zeroMQ、kafka,每个技术都有不同的业务场景,技术选型需要各自的业务需求。.
比较文章参考:http://blog.csdn.net/linsongbin1/article/details/47781187
1 介绍
RabbitMQ(http://www.rabbitmq.com) 是由 LShift 提供的一个Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang(http://www.erlang.org)写成,他遵循Mozilla Public License开源协议。
2 系统要求
1、 Linux 2.6.18版本以上,使用内存大于4G
2、 gcc 版本 4.1.2
3 Erlang安装
例子以otp_src_17.0.tar.gz版本方式进行安装,脚本中的环境变量ERL_HOME使用/opt/erlang路径请根据实际情况定义。
将安装包放到任意目录下执行:
tar-zxvf otp_src_17.0.tar.gz
cd otp_src_17.0
./configure --prefix=/opt/erlang
make
make install
./configure --prefix=/opt/erlang --enable-smp-support --enable-threads --enable-sctp --enable-kernel-poll --enable-hipe --with-ssl
上述参数说明:
--prefix 指定安装目录--enable-smp-support启用对称多处理支持(Symmetric Multi-Processing对称多处理结构的简称)--enable-threads启用异步线程支持--enable-sctp启用流控制协议支持(Stream Control Transmission Protocol,流控制传输协议)--enable-kernel-poll启用Linux内核poll--enable-hipe启用高性能Erlang(High Performance Erlang)参考资料: http://www.cnblogs.com/me-sa/archive/2012/10/09/erlang_hipe.html--with-ssl使用SSL包
vim/etc/profile
export ERL_HOME=/opt/erlang/bin
export PATH=$PATH:$ERL_HOME
source /etc/profile
错误:
configure: error: No curses library functions found
configure: error: /bin/sh '/usr/local/xuguang/RabbitMq/erlang/otp_src_R15B01/erts/configure' failed for erts
RootCause:缺少ncurses安装包
Fix:yum -y install ncurses-devel
测试
在控制台输入erl显示如下:
[root@APP-NO4 opt]# erl
Erlang R15B01 (erts-5.9.1) [source] [smp:2:2] [async-threads:0][hipe] [kernel-poll:false]
Eshell V5.9.1 (abort with ^G)
1>
表示安装正确
4 RabbitMQ安装(简单安装)
例子以rabbitmq-server-generic-unix-3.2.4.tar.gz版本进行按照。
将安装包放到任意目录下执行:
tar–zxvf rabbitmq-server-generic-unix-3.2.4.tar.gz
cd rabbitmq_server-3.2.4
./rabbitmq-plugins enable rabbitmq_management
./rabbitmq-server -detached
rpm包安装
rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.6.5-1.noarch.rpm(注:要下载下来)
或 rpm -ivh --nodeps rabbitmq-server-3.6.5-1.noarch.rpm
rpm包安装 /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/sbin
-rwxr-xr-x 1 root root 1480 8月 5 21:26 rabbitmqctl
-rwxr-xr-x 1 root root 1431 8月 5 21:26 rabbitmq-defaults
-rwxr-xr-x 1 root root 11379 8月 5 21:26 rabbitmq-env
-rwxr-xr-x 1 root root 1362 8月 5 21:26 rabbitmq-plugins
-rwxr-xr-x 1 root root 9042 8月 5 21:26 rabbitmq-server
注:rabbitmq-defaults 设置erl_dir目录
RabbitMQ的根目录:/var/lib/rabbitmq
RabbitMQ的配置文件目录:/etc/rabbitmq/
RabbitMQ的日志文件目录:/var/log/rabbitmq
两个配置文件分别是:
rabbitmq.config
rabbitmq-env.conf
错误:
/usr/lib/rabbitmq/bin/rabbitmq-server:行49: /var/run/rabbitmq/pid: 权限不够
chown -R rabbitmq:rabbitmq /var/run/rabbitmq
缺少包:
socat is needed by rabbitmq-server-3.6.5-1.noarch
yum install socat
启动服务:
service rabbitmq-server restart
浏览器查看:http://localhost:15672 用户名:guest 密码:guest画面显示如下表示安装正确
5 RabbitMQ集群配置
5.1普通集群
前提条件:将需要集群的机器已按装好RabbitMQ并且在运行
以node1、node2集群为例,将所有机器列表加入所有集群机器/etc/hosts文件中
拷贝任意集群机器~/.erlang.cookie文件到所有机器(请先停止rabbitmq然后再copy),同目录下并且执行chmod 600 ~/.erlang.cookie
保证rabbitmq运行正常,分别执行:
./rabbitmqctl stop_app
./rabbitmqctl reset
./rabbitmqctl start_app
连接集群:如node1连接node2在node1上执行
./rabbitmqctl stop_app
./rabbitmqctl join_cluster rabbit@node2
./rabbitmqctl start_app
在任意机器上查看集群状态执行:
./rabbitmqctl cluster_status
打开页面查看结果
注: 若有多台机器加入集群node3
./rabbitmqctl stop_app
./rabbitmqctl join_cluster rabbit@node2
./rabbitmqctl start_app
Node2和node3不需要执行join_cluster因为他们会自动加入链通
一般情况下进行三台机器集群
一台配置成磁盘存储(默认集群中至少保证有一台机器处于磁盘存储模式)、两台设置成内存存储
join_cluster--ram rabbit@node2
5.2高可用
可以通过LVS、haproxy作为网络均衡负载实现。已知在LVS环境下进行测试通过,请参看LVS安装手册
6添加用户
任意集群机器中执行
添加入库用户
./rabbitmqctl add_user impuser 123rty789
设置角色
./rabbitmqctl set_user_tags impuser administrator
设置虚拟空间
./rabbitmqctl add_vhost /imp
./rabbitmqctl set_permissions -p /imp impuser ".*"".*" ".*"
添加转发用户
./rabbitmqctl add_user transferuser 123rty789
设置角色
./rabbitmqctl set_user_tags transferuser administrator
设置虚拟空间
./rabbitmqctl add_vhost /transfer
./rabbitmqctl set_permissions -p /transfer transferuser ".*" ".*" ".*"
添加布控报警用户
./rabbitmqctl add_user alarmuser 123rty789
设置角色
./rabbitmqctl set_user_tags alarmuser administrator
设置虚拟空间
./rabbitmqctl add_vhost /alarm
./rabbitmqctl set_permissions -p /alarm alarmuser ".*"".*" ".*"
7其他
删除虚拟空间
rabbitmqctl delete_vhost 虚拟空间
rabbitmqctl add_vhost 虚拟空间
端口配置:
RABBIYMQ_HOME/etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_NODE_PORT=port
RABBIYMQ_HOME/etc/rabbitmq/rabbitmq.config
[
{rabbitmq_management,[{listener, [{port, 12345}]}]}
].
参考地址:
http://www.rabbitmq.com/configure.html,http://www.rabbitmq.com/man/rabbitmqctl.1.man.html
8注意事项
1、 集群中的软件版本必须一致包括Erlang
2、 若需要重新部署集群环境则在需要强制重置
a) 确保环境稳定运行./rabbitmqctl stop_app ./rabbitmqctl force_reset ./rabbitmqctlstart_app
3、 ERROR: node with name"rabbit" already running on ""
a) 同一台机器运行多个实例,可以通过rabbitmq-env.conf配置文件中的NODENAME配置选项配置节点名称
参考: