一、部署Rabbitmq集群 Rabbitmq集群大概分为两种方式: 1、普通模式:默认的集群模式,消息的尸体只存在一个节点上; 2、镜像模式:把需要的队列做成镜像,存在于多个节点。 ha-mode: all:列队到所有节点; exatly:随机镜像到其他节点上; nodes:镜像到指定节点上。 集群节点模式: 1、内存节点:工作在内存上; 2、磁盘节点:工作在磁盘上; 例外:内存节点和磁盘节点共同存在,提高访问速度的同时增加数据持久化。 相比内存节点虽然不写入磁盘,但是它执行比磁盘节点要好,集群中,只需要一个磁盘来保存状态就足够了,如果集群中只有内存节点,那么节点一旦宕机,所有的状态、消息都会丢失,无法实现数据的持久化。 rpm包(提取码:rv8g) 1、环境如下 2、安装rabbitmq服务
在192.168.171.134/135/140节点上进行如下操作,部署rabbitmq服务:
[root@localhost ~]# mkdir rabbitmq
[root@localhost ~]# cd rabbitmq/
[root@localhost rabbitmq]# ls
erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm#安装rabbitmq
[root@localhost rabbitmq]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm
[root@localhost rabbitmq]# chkconfig rabbitmq-server on
[root@localhost rabbitmq]# /etc/init.d/rabbitmq-server start
Starting rabbitmq-server (via systemctl): [ OK ]
3、配置主机192.168.171.134
[root@localhost ~]# tail -4 /etc/hosts #配置本地解析(主机名可自定义)192.168.171.134 rabbitmq01192.168.171.135 rabbitmq02192.168.171.140 rabbitmq03192.168.171.143 rabbitmq04#将hosts文件复制到其他节点
[root@localhost ~]# scp /etc/hosts root@192.168.171.135:/etc/
[root@localhost ~]# scp /etc/hosts root@192.168.171.140:/etc/
[root@localhost ~]# scp /etc/hosts root@192.168.171.143:/etc/#将rabbitmq01的cookie节点信息复制到其他需要加入群集的节点#部署群集的时候需要节点cookie信息一致
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.171.135:/var/lib/rabbitmq/
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.171.140:/var/lib/rabbitmq/
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.171.143:/var/lib/rabbitmq/
4、重启所有要加入群集的节点服务器
在所有要加入群集的服务器上执行以下命令进行重启(包括rabbitmq01)
[root@localhost ~]# init 6
若重启的时后被卡在某个界面,那么需要强制重启
[root@rabbitmq01 ~]# ps -ef | grep rabbitmq # 确定已经启动,可以看到重启后主机名已经变更为hosts解析中所配置的
5、在rabbitmq01上配置群集
[root@rabbitmq01 ~]# rabbitmqctl stop_app # 停止节点服务
Stopping node rabbit@rabbitmq01 ...
[root@rabbitmq01 ~]# rabbitmqctl reset # 重置节点
Resetting node rabbit@rabbitmq01 ...
[root@rabbitmq01 ~]# rabbitmqctl start_app # 启动节点服务
Starting node rabbit@rabbitmq01 ... # 复制所返回的节点名称
6、配置rabbitmq02、03加入rabbitmq01群集
[root@rabbitmq02 ~]# rabbitmqctl stop_app
[root@rabbitmq02 ~]# rabbitmqctl reset
[root@rabbitmq02 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01 #以内存方式加入群集,后面是复制的rabbitmq01的节点名
[root@rabbitmq02 ~]# rabbitmqctl start_app
[root@rabbitmq02 ~]# rabbitmq-plugins enable rabbitmq_management # 开启网页插件
7、在rabbitmq01上查看节点状态
[root@rabbitmq01 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq01 ...
[{nodes,[{disc,[rabbit@rabbitmq01]},
{ram,[rabbit@rabbitmq03,rabbit@rabbitmq02]}]},
{running_nodes,[rabbit@rabbitmq03,rabbit@rabbitmq02,rabbit@rabbitmq01]},
{cluster_name,<<"rabbit@rabbitmq01">>},
{partitions,[]},
{alarms,[{rabbit@rabbitmq03,[]},
{rabbit@rabbitmq02,[]},
{rabbit@rabbitmq01,[]}]}]# rabbit01工作模式为磁盘节点;rabbit02和03为内存节点模式# running_nodes:正在运行的节点# cluster_name:节点名称# alarms:发生问题时rabbit01、02、03会进行报警
8、在rabbitmq创建管理用户并加入管理组 由于节点被reset重置了,所以用户也需要重新创建
[root@rabbitmq01 ~]# rabbitmqctl add_user admin 123.com
Creating user "admin" ...
[root@rabbitmq01 ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...
9、登录web界面访问 群集内任意节点的IP+15672端口都可以进行登录: 可以在下面的页面看到群集节点的信息: 10、配置web界面添加Vhost 进入创建的虚拟主机: 然后配置如下: 设置完成后再次查看虚拟主机: 设置匹配策略: 发布消息: 设置发布消息内容: 然后刷新当前页面,即可看到在当前虚拟主机中的队列总数: 四、单台节点加入或退出群集配置 1、节点加入群集 由于我在上面部署群集时,hosts文件已经可以解析群集内的节点,所以这里就省略解析了
#在节点192.168.171.143服务器上安装rabbitmq并配置
[root@localhost src]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm
[root@localhost src]# chkconfig rabbitmq-server on
[root@localhost src]# /etc/init.d/rabbitmq-server start#将群集中的cookie信息复制到本地
[root@localhost src]# scp root@rabbitmq01:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/
[root@localhost src]# init 6 #重启本机#加入群集
[root@rabbitmq04 ~]# rabbitmqctl stop_app
[root@rabbitmq04 ~]# rabbitmqctl reset
[root@rabbitmq04 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01#以内存运行的方式加入群集,若要以磁盘的方式加入,省略“--ram”选项即可
[root@rabbitmq04 ~]# rabbitmqctl start_app#开启web管理页面
[root@rabbitmq04 ~]# rabbitmq-plugins enable rabbitmq_management
查看web界面,确认rabbitmq04加入到群集:
2、单节点退出群集
1)先在rabbitmq04上面停止节点
[root@rabbitmq04 ~]# rabbitmqctl stop_app
2)回到主节点rabbitmq01上删除节点
[root@rabbitmq04 ~]# rabbitmqctl -n rabbit@rabbitmq01 forget_cluster_node rabbit@rabbitmq04 # -n:指定节点名称# forget_cluster_node:后面跟要删除的节点名称