1. 安装erlang 安装依赖环境 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel 下载最新 Erlang 19.0 wget http://erlang.org/download/otp_src_19.0.tar.gz 解压 tar -xvzf otp_src_19.0.tar.gz 配置 ./configure --prefix=/usr/local/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac make && make install 2. 安装 rabbitmq wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-generic-unix-3.6.5.tar.xz xz -d rabbitmq-server-generic-unix-3.6.5.tar.xz tar -xvf rabbitmq-server-generic-unix-3.6.5.tar mv rabbitmq_server-3.6.5/ /usr/local/rabbitmq 然后在配置rabbitmq环境变量,vi /etc/profile文件,增加下面的环境变量: export PATH=$PATH:/usr/local/erlang/bin export PATH=$PATH:/usr/local/rabbitmq/sbin source /etc/profile使得文件生效 以上就已经完成了RabbitMq的安装 3.RabbitMQ服务启动关闭 启动服务: cd /usr/local/rabbitmq/sbin/ [root@iZ25e3bt9a6Z sbin]# ./rabbitmq-server -detached 查看服务状态: [root@iZ25e3bt9a6Z sbin]# ./rabbitmqctl status 关闭服务: [root@iZ25e3bt9a6Z sbin]# ./rabbitmqctl stop Stopping and halting node rabbit@iZ25e3bt9a6Z ... 4. 配置网页插件 首先创建目录,否则可能报错: mkdir /etc/rabbitmq 然后启用插件(在rabbitmq启动的前提下): ./rabbitmq-plugins enable rabbitmq_management 配置linux 端口 15672 网页管理 5672 AMQP端口 然后访问http://localhost:15672即可 默认用户guest 密码guest 5. 远程访问配置 默认网页是不允许访问的,需要增加一个用户修改一下权限,代码如下: 添加用户:rabbitmqctl add_user damon 123456 添加权限:rabbitmqctl set_permissions -p "/" damon ".*" ".*" ".*" 修改用户角色:rabbitmqctl set_user_tags damon administrator #根据自己需要创建以下内容 创建虚拟主机:rabbitmqctl add_vhost vhost(vhost为虚拟主机名) 清理原始权限:rabbitmqctl clear_permissions -p / damon 授予新主机权限:rabbitmqctl set_permissions -p vhost damon ".*" ".*" ".*" 然后就可以远程访问了,然后可直接配置用户权限等信息。 6. Rabbitmq的集群配置 (1)在2台节点上分别部署同一版本Rabbitmq,使用以下命令两台主机名是否相同 rabbitmqctl status 如果两台主机名相同,就得修改这两台机器的hostname,要想配置成功集群,就必须保证这两个节点的主机名不同,且能互相ping通 vim /etc/sysconfig/network (centos7以上:vim /etc/hostname) 分别将HOSTNAME属性值改为rabbitmq_node1,rabbitmq_node2,并重启 (2)如果两台主机名不相同,如:分别为rabbit@rabbitmq_node1,rabbit@rabbitmq_node2,就在两台主机里的/etc/hosts文件中分别添加: 192.168.10.15 rabbitmq_node1 主节点 192.168.10.16 rabbitmq_node2 (3)设置每个节点Cookie Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个 magic cookie来实现的,这个cookie存放在 /root/.erlang.cookie 中,文件是400的权 限。所以必须保证各节点cookie保持一致,否则节点之间就无法通信. 建议在RabbitMQ服务启动前修改cookie,如果RabbitMQ服务已经启动,修改cookie值后,必须重启RabbitMQ服务,这步很关键 # chmod 700 /root/.erlang.cookie # echo -n "AZVOCZYZZBVFLBPTBXU" > /root/.erlang.cookie # chmod 400 /root/.erlang.cookie # ps -ef | grep ^rabbitmq | awk '{print $2}' | xargs kill -9 #rabbitmq-server -detached (4) 设192.168.10.15 (rabbitmq_node1)为主节点,在192.168.10.15机器中执行 #rabbitmqctl stop_app #rabbitmqctl reset (这一步会重置,请备份数据) #rabbitmqctl start_app 在192.168.10.16 (rabbitmq_node2)机器中 #rabbitmqctl stop_app #停止rabbitmq_node2节点 #rabbitmqctl join_cluster rabbit@rabbitmq_node1 # 将testNod2节点添加进主节点 #rabbitmqctl start_app #启动rabbitmq_node2节点 (5)设置镜像策略 使用Rabbit镜像功能,需要基于rabbitmq策略来实现,策略是用来控制和修改群集范围的某个vhost队列行为和Exchange行为 在cluster中任意节点启用策略,策略会自动同步到集群节点 # rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}' 这行命令在vhost名称为hrsystem创建了一个策略,策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点, 策略正则表达式为 “^” 表示所有匹配所有队列名称。 例如rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" '{"ha-mode":"all"}' 注意:"^message" 这个规则要根据自己修改,这个是指同步"message"开头的队列名称,我们配置时使用的应用于所有队列,所以表达式为"^" 官方set_policy说明参见 set_policy [-p vhostpath] {name} {pattern} {definition} [priority] (http://www.rabbitmq.com/man/rabbitmqctl.1.man.html) (6)查看 至此,Rabbitmq的集群配置已经完成。在这2台机器中,执行以下命令: /usr/sbin/rabbitmqctl cluster_status 就可以看到集群配置的效果,分别如下所示:(切记:在任何情况下,集群中必须至少有一个节点是disk类型的,所以如果集群是3台机器的话,就需要有2台机器的节点是disk类型的) 7. rabbitmq常用命令 add_user <UserName> <Password> delete_user <UserName> change_password <UserName> <NewPassword> list_users add_vhost <VHostPath> delete_vhost <VHostPath> list_vhostsset_permissions [-p <VHostPath>] <UserName> <Regexp> <Regexp> <Regexp> clear_permissions [-p <VHostPath>] <UserName> list_permissions [-p <VHostPath>] list_user_permissions <UserName> list_queues [-p <VHostPath>] [<QueueInfoItem> ...] list_exchanges [-p <VHostPath>] [<ExchangeInfoItem> ...] list_bindings [-p <VHostPath>] list_connections [<ConnectionInfoItem> ...]