高可用RabbitMQ集群搭建
Linux:Centos6.5
erlang:21.1
rabbitmq:3.7.8
2、环境
rabbitmq01 xxx.xx.xxx.144
rabbitmq02 xxx.xx.xxx.145
rabbitmq03 xxx.xx.xxx.146
分别在3台机器上配置/etc/hosts,如下
xxx.xx.xxx.144 mq144
xxx.xx.xxx.145 mq145
xxx.xx.xxx.146 mq146
3、部署过程
-
安装依赖环境:
1)安装GCC GCC-C++ Openssl等模块,安装过就不需要安装了
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
-
下载erlang:
官网下载:http://erlang.org/download/
或者直接下载(采用)
[root@mq144 ~]# cd /opt/rabbitmq/erlang [root@mq144 erlang]# wget http://erlang.org/download/otp_src_21.1.tar.gz
-
安装erlang:
解压:
[root@mq144 erlang]# tar -zxvf otp_src_21.1.tar.gz
-
安装:
[root@mq144 erlang]# cd otp_src_21.1 [root@mq144 otp_src_21.1]# ./configure --prefix /opt/rabbitmq/erlangist [root@mq144 otp_src_21.1]# make [root@mq144 otp_src_21.1]# make install
执行(./configure --prefix /opt/rabbitmq/erlangist)报错时,解决第一个odbc问题,运行如下命令:yum install unixODBC unixODBC-devel
查看安装位置:
[root@mq144 ~]# whereis erlang
配置环境变量:
在/etc/profile文件最后加上
export PATH=$PATH:/opt/rabbitmq/erlangist/lib/erlang/bin
执行
source /etc/profile
查看是否安装成功:
erl
-
安装rabbitmq
1、下载安装包
[root@mq144 ~]# cd /opt/rabbitmq/rabbitmq [root@mq144 ~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.8/rabbitmq-server-generic-unix-3.7.8.tar.xz
2、解压安装
yum install -y xz xz -d rabbitmq-server-generic-unix-3.7.8.tar.xz tar -xvf rabbitmq-server-generic-unix-3.7.8.tar
配置环境变量:
在/etc/profile文件最后加上
export PATH=$PATH:/opt/rabbitmq/rabbitmq/rabbitmq_server-3.7.8/sbin
执行
source /etc/profile
导入rabbitmq的管理界面
cd /opt/rabbitmq/rabbitmq/rabbitmq_server-3.7.8/sbin rabbitmq-plugins enable rabbitmq_management
-
将.erlang.cookie拷贝到其他节点
cat /home/keyten/.erlang.cookie scp keyten@xxx.xx.xxx.144:/home/keyten/.erlang.cookie /home/keyten/
scp root@xxx.xx.xxx.144:/root/.erlang.cookie /root -
查看.erlang.cookie是否一致
cat /root/.erlang.cookie
-
添加节点互通
xxx.xx.xxx.144 rabbit@mq144 xxx.xx.xxx.145 rabbit@mq145 xxx.xx.xxx.146 rabbit@mq146
ping 通另外两节点
ping rabbit@mq145 ping rabbit@mq146
-
选择一个节点stop,然后连接到另外节点
rabbitmqctl stop_app rabbitmqctl join_cluster rabbit@mq144 Clustering node rabbit@mq145 with rabbit@mq144 rabbitmqctl start_app
-
将144设置为内存节点
rabbitmqctl stop_app rabbitmqctl change_cluster_node_type ram rabbitmqctl start_app
-
查看集群状态
rabbitmqctl cluster_status
-
设置镜像队列策略
在任意一个节点上执行如下操作(这里在node1上执行)
首先,在web界面,登陆后,点击“Admin--Virtual Hosts(页面右侧)”,在打开的页面上的下方的“Add a new virtual host”处增加一个虚拟主机,同时给用户“admin”和“guest”均加上权限(在页面直接设置、点点点即可);然后,在linux中执行如下命令
rabbitmqctl set_policy -p rmqserver ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' 注意: -p Vhost: 可选参数,针对指定vhost下的queue进行设置 Name: policy的名称 Pattern: queue的匹配模式(正则表达式) Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes all:表示在集群中所有的节点上进行镜像 exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定 nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定 ha-params:ha-mode模式需要用到的参数 ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
"rmqserver" vhost名称, "^"匹配所有的队列, ha-all 策略名称为ha-all, '{"ha-mode":"all"}' 策略模式为 all 即复制到所有节点,包含新增节点。
则此时镜像队列设置成功。(这里的虚拟主机rmqserver是代码中需要用到的虚拟主机,虚拟主机的作用是做一个消息的隔离,本质上可认为是一个rabbitmq-server,是否增加虚拟主机,增加几个,这是由开发中的业务决定,即有哪几类服务,哪些服务用哪一个虚拟主机,这是一个规划)
将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。完成这 6 个步骤后,RabbitMQ 高可用集群就已经搭建好了,最后一个步骤就是搭建均衡器。
-
添加防火墙开放端口
vi /etc/sysconfig/iptables
添加:三台机子根据IP对应端口开放
例如:xxx.xx.xxx.144
-A INPUT -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 5672 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 25672 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 4369 -j ACCEPT
重启防火墙:
service iptables restart
记得创建管理员用于登陆管理系统:
rabbitmqctl add_user admin admin
rabbitmqctl set_permissions -p "/" admin "." "." ".*"
rabbitmqctl set_user_tags admin administrator