您的位置:首页 > 运维架构 > Linux

RabbitMQ在linux系统中集群配置

2017-07-17 18:11 246 查看
一、集群环境及安装jar包准备

1、linux环境准备

a、两台(多台)Centos6.5虚拟机,设置hostname分别为mq01、mq02。

b、Ip地址为:mq01:192.168.19.40 mq02:192.168.19.50

c、修改两台虚拟机Hosts文件: /etc/hosts文件

Mq01:

[root@mg01 bin]# cat /etc/hosts

127.0.0.1 mq01 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 mq01 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.19.40 mq01

192.168.19.50 mq02

Mq02:

[root@mg02 bin]# cat /etc/hosts

127.0.0.1 mq02 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 mq02 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.19.40 mq01

192.168.19.50 mq02

d、保证两台虚拟机能互相ping通:[root@mg01 ~]# ping 192.168.19.50



2、Jar包版本

a、Erlang:17.3-1

b、RabbitMq:3.6.1-1

二、安装细则

1、安装文档参考:

a、RabbitMQ:http://www.rabbitmq.com/install-rpm.html

2、安装注意事项:

a、安装RabbitMQ

上传:rabbitmq-server-3.6.1-1.noarch.rpm文件到/usr/local/src/rabbitmq/

安装:rpm –ivh rabbitmq-server.3.6.1-1.noarch.rpm

b、配置开启用户远程访问:默认只允许localhost用户访问。

cp /usr/share/doc/rabbitmq-server-3.6.1/rabbitmq.config.example etc/rabbitmq/rabbitmq.config #复制配置文件

(安装目录:/usr/share/doc/rabbitmq-server-3.6.1)

vi /etc/rabbitmq/rabbitmq.config P64行

注意:文件有两处下面代码,vi/vim都有提示行数,必须找到64行的修改,否则会导致启动失败。

%% {loopback_users, []},

修改1:去掉前面的两个%%,

修改2:最后面的逗号,保存。

修改结果如下:

c、开启后台管理插件

执行下面命令,开启web界面管理工具

rabbitmq-plugins enable rabbitmq_management

d、防火墙打开15672和5672端口

/sbin/iptables –I INPUT –p tcp –dport 15672 –j ACCEPT #控制台端口

/sbin/iptables –I INPUT –p tcp –dport 5672 –j ACCEPT #程序访问端口

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables status

e、启动、停止服务

service rabbitmq-server start

service rabbitmq-server stop

service rabbitmq-server restart

错误日志目录:/var/log/rabbitmq/startup_err

设置开机启动

chkconfig rabbitmq-server on

f、访问管理平台

firefox #打开虚拟机上的火狐

http://localhost:15672/

默认用户名密码都为guest

注意:出于安全的考虑,guest这个默认的用户只能通过http://localhost:15672 本地来登录,不能外部服务器登录,也就是不能远程访问,这对于服务器上没有安装桌面的情况是无法管理维护的。必须新创建管理员账号。

三、RabbitMQ单一启动

(登陆操作,添加用户,创建vhost等略)

单一启动主要测试安装是否正常,待正常完成安装后,测试几个常用操作:

[root@mq01 bin]# rabbitmq-server -deched –后台启动服务

[root@mq01 bin]# rabbitmqctl start_app –启动服务

[root@mq01 bin]# rabbitmqctl stop_app –关闭服务

[root@mq01 bin]# rabbitmq-plugins enable rabbitmq_management –启动web管理插件

[root@mq01 bin]# rabbitmqctl add_user zlh zlh –添加用户,密码

不出现ERROR,FAILED等字样说明启动成功。

四、一般模式集群

1、集群配置

在上述的两台机器上安装rabbitmq完成之后,你可以看到你的机器中有如下1个文件。路径在$HOME中或者在/var/lib/rabbitmq中,文件名称为.erlang.cookie,他是一个隐藏文件。这文件存储的内容是cookie值。

这样说吧:RabbitMQ的集群是依赖erlang集群,而erlang集群是通过这个cookie进行通信认证的,因此我们做集群的第一步就是统一cookie值。

a、在/var/lib/rabbitmq目录下,通过ll -a命令可查看隐藏文件,修改cookie值一致。

b、修改文件权限:chmod 600 .erlang.cookie (两个系统一致权限)

c、停止当前机器中的RabbitMQ服务

[root@mq02 ~]# ./rabbitmqctl stop_app

d、把mq01中的rabbitmq加入到集群中来

[root@mq02 ~]# rabbitmqctl join_cluster –ram rabbit@mq01

注意:

A、在加入集群操作中,mq02会访问mq01,由于是两台虚拟机的访问,所以原先mq01虚拟机还需要开放4369,25672这两个端口

B、加入集群操作,操作的机器必须先停止服务

e、开启当前机器中的RabbitMQ服务

[root@mq02 ~]# ./rabbitmqctl start_app

f、查看集群状态

[root@mq02 ~]# ./rabbitmqctl cluster_status

Cluster status of node rabbit@mq02 …

[{nodes,[{disc,[rabbit@mq01]},{ram,[rabbit@mq02 ]}]},

{running_nodes,[rabbit@mq01,rabbit@mq02 ]},

{cluster_name,<<”rabbit@mq02 “>>},

{partitions,[]},

{alarms,[{rabbit@mq01,[]},{rabbitmq02 F,[]}]}]

g、查看客户端网页管理nodes



(原来的单一节点会增加,name名字为虚拟机hostname)

说明:一般集群配置是负载均衡的一种体现,他(多个实例)增加了消息生产者的入口,共享了消息队列queue,一定程度上缓解了单点rabbitmq服务器的吞吐压力,多个实例集群在一个一起,比如,a,b都集群在c上,如果c宕机,那么整个rabbitmq都宕机,这也是这个模式的最大缺陷。(a,b宕机并不影响c)



五、高可用镜像队列

1、为了解决RabbitMQ的高可用的问题,引入镜像高可用模式:



把队列复制同步镜像,如图,把队列A复制一份镜像B,如果队列A所在服务器宕机,那么镜像队列B中消息会转移到其他服务器中,其他服务器上消费者可以消费消息,避免了消息的丢失。如果队列A所在服务器重会服务,镜像效果依然会存在。

缺点,镜像的消息是实时同步的,过多的镜像会占用很大的带宽开销。

2、设置镜像的方式依赖policy模块,这设置如下:

参考文档:http://www.rabbitmq.com/ha.html

先上例子慢慢说:

[root@mq01 ~]# ./rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:”all”}’

参数意思为:

ha-all:为策略名称。

^:为匹配符,只有一个^代表匹配所有,^zlh为匹配名称为zlh的exchanges或者queue。

ha-mode:为匹配类型,他分为3种模式:all-所有(所有的queue),exctly-部分(需配置ha-params参数,此参数为int类型比如3,众多集群中的随机3台机器),nodes-指定(需配置ha-params参数,此参数为数组类型比如[“3rabbit@mq01”,”rabbit@mq02”]这样指定为mq01与mq02这2台机器。)。

参考文档中三种匹配类型的示例:

第一种:给匹配某种命名的所有队列复制镜像,如下



第二种:随机给集群中的2台(数字自己定)



第三种:把指定命名规则的队列镜像由某个节点复制到另一个节点(另一个服务器)



六、Docker容器安装

见《Docker容器中部署RabbitMQ集群》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: