一、前言
線上的 RabbitMQ用的是單節點,前段時間由於機器內存不足,發生了OOM,業務受到了影響,故打算換成 RabbitMQ集羣。RabbitMQ模式有三種,分別是:單一模式、普通模式、鏡像模式,鏡像模式纔是RabbitMQ真正的HA方案,關於更詳細的簡紹,請移步到官網:http://www.rabbitmq.com/ha.html ,下面是關於RabbitMQ集羣的部署過程:
二、環境
erlang版本:
erlang-19.0.4-1.el7.centos.x86_64
rabbitmq版本:
rabbitmq-server-3.6.6
服務器主機名:
ip-172-31-13-114 磁盤節點 ip-172-31-15-124 內存節點 ip-172-31-11-216 內存節點
三、安裝
1、erlang安裝
a、wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm rpm -Uvh erlang-solutions-1.0-1.noarch.rpm b、rpm --import https://packages.erlang-solutions.com/rpm/erlang_solutions.asc c、Add the following lines to some file in /etc/yum.repos.d/: [erlang-solutions] name=Centos $releasever - $basearch - Erlang Solutions baseurl=https://packages.erlang-solutions.com/rpm/centos/$releasever/$basearch gpgcheck=1 gpgkey=https://packages.erlang-solutions.com/rpm/erlang_solutions.asc enabled=1 d、yum install erlang esl-erlang
2、RabbitMQ 安裝
a、 wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-generic-unix-3.6.6.tar.xz b、tar -xvf rabbitmq-server-generic-unix-3.6.6.tar.xz c、 mv rabbitmq_server-3.6.6 /data/rabbitmq d、cd /data/rabbitmq/;./sbin/rabbitmq-server -detached
四、配置
1、需要配置host,不然集羣沒用辦法創建,我這裏用的aws的ec2,用的默認主機名,這裏就不修改了
2、拷貝.erlang.cookie,RabbitMQ集羣依賴erlang集羣才能工作,所以需要先構建erlang集羣,.erlang.cookie文件在啓動用戶的家目錄下,我這裏是用work用戶啓動的RabbitMQ,拷貝一臺服務器的/home/work/.erlang.cookie到其他機器並設置權限
chown work:work /home/work/.erlang.cookie chmod 400 /home/work/.erlang.cookie
3、設置集羣的模式:鏡像
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
PS:
在任意一個節點操作即可,這裏在ip-172-31-13-114上操作
4、加入集羣(ip-172-31-15-124 、ip-172-31-11-216 )
rabbitmqctl stop_app rabbitmqctl join_cluster --ram rabbit@ip-172-31-13-114 rabbitmqctl start_app
PS:
--ram 指定內存節點類型,--disc指定磁盤節點類型
5、查看集羣
rabbitmqctl cluster_status
6、啓用管理和監控模塊
rabbitmq-plugins enable rabbitmq_management
7、設置集羣的名字
rabbitmqctl set_cluster_name my_mq
8、添加用戶:
rabbitmqctl add_user spider spider
9、設置用戶權限策略
rabbitmqctl set_user_tags spider administrator
10、vhost授權
rabbitmqctl set_permissions -p / spider '.*' '.*' '.*'
11、改變節點類型爲磁盤節點
rabbitmqctl stop_app rabbitmqctl change_cluster_node_type disc rabbitmqctl start_app
12、將節點移出集羣
將節點ip-172-31-11-216 移出集羣前,先要stop_app,然後reset節點
[root@ip-172-31-11-216 ~]# rabbitmqctl stop_app Stopping node rabbit@ip-172-31-11-216 ... [root@ip-172-31-11-216 ~]# rabbitmqctl reset Resetting node rabbit@ip-172-31-11-216 ...