RabbitMq集群部署

2017-02-14

版权声明:本文为作者原创文章,可以随意转载,但必须在明确位置表明出处!!!

消息队列

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

RabbitMq但节点部署

  • 所需安装包

    erlang-17.4-1.el6.x86_64.rpm
    rabbitmq-server-3.6.5-1.noarch.rpm

  • 安装erlang

    将erlang安装包复制到任意位置,执行安装命令

    1
    2
    3
    rpm -ivh --nodeps --force erlang-17.4-1.el6.x86_64.rpm
    Preparing... ########################################### [100%]
    1:erlan ########################################### [100%]
  • 安装MQ

    将rabbitmq安装包复制到任意位置,执行按照命令

    1
    2
    3
    4
    rpm -ivh --nodeps --force rabbitmq-server-3.6.5-1.noarch.rpm
    warning: rabbitmq-server-3.6.5-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID 056e8e56: NOKEY
    Preparing... ########################################### [100%]
    1:rabbitmq-server ########################################### [100%]

节点配置

  • 创建路径

    1
    2
    3
    mkdir -p /home/rabbit/db
    mkdir -p /home/rabbit/logs
    chmod 777 /home/rabbit
  • 创建配置文件rabbitmq-env.conf

    配置文件目录在/etc/rabbitmq/目录下,若此目录下没有次文件使用命令vi手动创建

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    vi rabbitmq-env.conf
    #文件内容
    #RABBITMQ_NODE_PORT= //端口号
    #HOSTNAME=
    #RABBITMQ_NODENAME=mq
    #配置文件的路径
    RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.config
    #需要使用的MNESIA数据库的路径
    RABBITMQ_MNESIA_BASE=/home/rabbit/db
    #log的路径
    RABBITMQ_LOG_BASE=/home/rabbit/logs
    #RABBITMQ_PLUGINS_DIR=/rabbitmq/plugins //插件的路径
  • 创建配置文件rabbitmq.config

    配置文件目录在/etc/rabbitmq/目录下,若此目录下没有次文件使用命令vi手动创建

    1
    2
    3
    4
    5
    6
    vi rabbitmq.conifg
    文件内容
    [
    {rabbit, [{tcp_listeners, [5672]},{vm_memory_high_watermark,0.5},{disk_free_limit, "32GB"},{cluster_partition_handling, autoheal},{cluster_keepalive_interval, 10000},{hipe_compile, true}]}
    ].

打开管理插件

管理插件是一个网站,默认端口是15672,可以在浏览器中访问,对mq server进行管理。执行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
rabbitmq-plugins enable rabbitmq_management 回车
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@i-03gmv586... failed.
* Could not contact node rabbit@i-03gmv586.
Changes will take effect at broker restart.
* Options: --online - fail if broker cannot be contacted.
--offline - do not try to contact broker.

启动MQ SERVER

1
2
3
service rabbitmq-server start 回车
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

创建管理用户

rabbitmqctl add_user admin[用户名] admin[密码]

1
2
rabbitmqctl add_user admin admin 回车
Creating user "admin" ...

设置用户权限

1
2
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" 回车
Setting permissions for user "admin" in vhost "/" ...

设置用户角色

1
2
rabbitmqctl set_user_tags admin administrator 回车
Setting tags for user "admin" to [administrator] ...

查看用户列表

如果能够看见admin用户则代表用户创建成功

1
2
3
4
rabbitmqctl list_users 回车
Listing users ...
amdin [administrator]
guest [administrator]

安装验证

在浏览器中访问管理网站 http://IP:15672/,如果能打开管理界面证明安装完全成功,使用admin用户登录,密码同样为admin

MQ集群安装步骤

  • 共有2个MQ节点,按照单机部署方案分别在两台服务器上安装。
  • 假设有MQ节点分为node1[192.168.102.31]和node2[192.168.102.32]

在所有主机上关闭MQ但节点

1
service rabbitmq-server stop

将node1上的erlang cookie 复制到其它节点主机上去,该文件在路径/var/lib/rabbitmq/.erlang.cookie,这里将node1主机上的该节点复制到node2主机上去,执行命令

1
2
3
4
scp ./.erlang.cookie 192.168.102.32:/var/lib/rabbitmq/ 回车
Warning: Permanently added '192.168.102.32' (RSA) to the list of known hosts.
root@192.168.102.32's password:
.erlang.cookie 100% 20 0.0KB/s 00:00

启动node1

1
2
3
service rabbitmq-server start 回车
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

节点node2加入集群

这里以node2为例,如果有更多节点,在节点机器重复操作此步骤即可。启动node2

1
service rabbitmq-server start

关闭mq_app

1
2
rabbitmqctl stop_app 回车
Stopping node 'rabbit@ubuntu02' ...

加入集群

将node2节点加入到集群
命令中的rabbit@ubuntu01 为node1的节点名称,格式为rabbit@[机器名]

1
2
rabbitmqctl join_cluster rabbit@ubuntu01 回车
Clustering node 'rabbit@ubuntu02' with 'rabbit@ubuntu01' ...

如果这一步执行错误,请在node2主机的hosts文件尾加上node1的主机地址和主机名

1
2
3
vi /etc/hosts
192.168.104.2 ubuntu01

关闭MQ

1
2
service rabbitmq-server stop 回车
Stopping rabbitmq-server: rabbitmq-server.

启动MQ SERVER

1
2
3
service rabbitmq-server start 回车
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

测试验证

在任意节点执行如下命令,出现如下内容代表安装成功

1
2
3
4
5
6
7
rabbitmqctl cluster_status 回车
Cluster status of node 'rabbit@ubuntu02' ...
[{nodes,[{disc,['rabbit@ubuntu01','rabbit@ubuntu02']}]},
{running_nodes,['rabbit@ubuntu01','rabbit@ubuntu02']},
{cluster_name,<<"rabbit@ubuntu01">>},
{partitions,[]},
{alarms,[{'rabbit@ubuntu01',[]},{'rabbit@ubuntu02',[]}]}]

然后打开网页输入http://IP:15672 登陆后就会看到管理页面有两个队列了。

集群启动步骤

当集群所有节点都关掉之后,必须在某一个节点上执行rabbitmqctl force_boot,然后再启动该节点。当该节点启动之后,其他节点按正常启动即可。

1
2
3
4
5
6
rabbitmqctl force_boot 回车
Forcing boot for Mnesia dir /var/lib/rabbitmq/mnesia/rabbit@ubuntu01 ...
service rabbitmq-server start 回车
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

推荐我的微信公众号:爱做饭的老谢


上一篇:设计模式(策略模式)
下一篇:U盘安装CentOS6.5