因为rabbitMQ是Erlang语言编写的,所以我们首先需要安装Erlang:
rpm -Uvh http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el7.centos.x86_64.rpm
###如果是集群几台rabbitmq的erlang的版本需要一致,否则加入节点时会失败!
(1)官网源码包下载地址:http://www.rabbitmq.com/releases/rabbitmq-server/
(2)、安装Rabbitmq版本为3.5.6.1:
下载包: wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.6/rabbitmq-server-3.5.6-1.noarch.rpm
安装包: rpm -ivh rabbitmq-server-3.5.6-1.noarch.rpm
(3)、查看状态以及日志home_dir, .erlang.cookie文件在home dir目录下,后面需将该目录下的.erlang.cookie文件拷贝到另外两台机器上。
(4)、启动rabbitmq:
service rabbitmq-server start
关闭:service rabbitmq-server stop
查看状态: rabbitmqctl status
(5)、安装命令维护插件
rabbitmq-plugins enable rabbitmq_management
(6)、设置配置文件,并开启用户远程访问:
#cd /etc/rabbitmq
#cp /usr/share/doc/rabbitmq-server-3.5.6/rabbitmq.config.example /etc/rabbitmq/
#mv rabbitmq.config.example rabbitmq.config
vi /etc/rabbitmq/rabbitmq.config
(7)、重启rabbit-server服务
service rabbitmq-server restart
(8)、登录访问
在浏览器中输入ip:15672即可出现登录页面,用户名和密码都是guest
(9)、开机启动:
chkconfig rabbitmq-server on
chkconfig --list 查看
RabbitMQ集群模式
RabbitMQ集群中节点包括内存节点(RAM)、磁盘节点(Disk,消息持久化),集群中至少有一个Disk节点。
2.普通模式(默认)
对于普通模式,集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点。对于消费者来说,若消息进入A节点的Queue中,当从B节点拉取时,RabbitMQ会将消息从A中取出,并经过B发送给消费者。
应用场景:该模式各适合于消息无需持久化的场合,如日志队列。当队列非持久化,且创建该队列的节点宕机,客户端才可以重连集群其他节点,并重新创建队列。若为持久化,只能等故障节点恢复。
3.镜像模式
与普通模式不同之处是消息实体会主动在镜像节点间同步,而不是在取数据时临时拉取,高可用;该模式下,mirror queue有一套选举算法,即1个master、n个slaver,生产者、消费者的请求都会转至master。
应用场景:可靠性要求较高场合,如下单、库存队列。
缺点:若镜像队列过多,且消息体量大,集群内部网络带宽将会被此种同步通讯所消耗。
PS:(1)镜像集群也是基于普通集群,即只有先搭建普通集群,然后才能设置镜像队列。(2)若消费过程中,master挂掉,则选举新master,若未来得及确认,则可能会重复消费。
######二台机器:
192.168.1.19 | test-jIAY-op |
---|---|
192.168.1.108 | op-rabbit2 |
vi /etc/hosts
192.168.1.19 test-jIAY-op
192.168.1.108 op-rabbit2
以上方法搭建2-3台rabbitmq主机,查看主节点的.erlang.cookie添加到其他节点:
###查看主节点.erlang.cookie:
cat /var/lib/rabbitmq/.erlang.cookie
###添加到分节点:
echo "BKHXYEWMFMCPMOGUUVBE" > /var/lib/rabbitmq/.erlang.cookie
###test-jIAY-op作为主节点将 op-rabbit2加入集群中:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@test-jIAY-op
###重启服务:
service rabbitmq-server restart
###查看集群状态:
rabbitmqctl cluster_status
###启动web管理插件,几台台机器都要启动:
rabbitmq-plugins enable rabbitmq_management
####
PS:若希望修改节点类型,则(需要先Stop)
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
####常用命令:
rabbitmq-server -detached 启动RabbitMQ节点
rabbitmqctl start_app 启动RabbitMQ应用,而不是节点
rabbitmqctl stop_app 停止
rabbitmqctl status 查看状态
rabbitmqctl add_user mq 123456
rabbitmqctl set_user_tags mq administrator 新增账户
rabbitmq-plugins enable rabbitmq_management 启用RabbitMQ_Management
rabbitmqctl cluster_status 集群状态
rabbitmqctl forget_cluster_node rabbit@rabbit3 节点摘除
rabbitmqctl reset application重置
###错误汇总:
解决:更换一致erl版本。
#####
在我更换了节点或者主节点后,无法将节点加入集群的问题:
解决方法:
删除节点上的数据记录后恢复: