RabbitMQ集群搭建

RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。不过,如前文所述,如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。
在一个集群里,有3台以上机器,其中 1台使用磁盘模式,其它使用内存模式。其它几台为内存模式的节点,无疑速度更快,因此客户端(consumer、producer)连接访问它们。而磁盘模式的节点,由于磁盘IO相对较慢,因此仅作数据备份使用。

Broker:消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。完全根据key进行投递的叫做Direct交换机;对key进行模式匹配后进行投递的叫做Topic交换机;Fanout交换机,它采取广播模式,一个消息进来时,投递到与该交换机绑定的所有队列
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

消息队列的使用过程大概如下:
(1)客户端连接到消息队列服务器,打开一个channel。
(2)客户端声明一个exchange,并设置相关属性。
(3)客户端声明一个queue,并设置相关属性。
(4)客户端使用routing key,在exchange和queue之间建立好绑定关系。
(5)客户端投递消息到exchange。

消息队列持久化包括3个部分:
(1)exchange持久化,在声明时指定durable => 1
(2)queue持久化,在声明时指定durable => 1
(3)消息持久化,在投递时指定delivery_mode => 2(1是非持久化)
如果exchange和queue都是持久化的,那么它们之间的binding也是持久化的。如果exchange和queue两者之间有一个持久化,一个非持久化,就不允许建立绑定。

rabbitMQ 3.6.14集群搭建:
elang  opt2以上,采用20.1
安装erlang的yum源:
添加密钥安装:
yum install -y erlang
安装socat
wget –no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo
yum install socat -y
rabbitMQ官网下载rpm包:
rpm -ivh rabbitmq-server-3.6.14-1.el6.noarch.rpm

<--------------------!
配置:
cd /etc/rabbitmq/
touch rabbitmq-env.conf
touch rabbitmq.config
chown -R rabbitmq /etc/rabbitmq/
vim rabbitmq-env.conf
RABBITMQ_NODE_IP_ADDRESS= //IP地址,空串bind所有地址,指定地址bind指定网络接口
RABBITMQ_NODE_PORT=       //TCP端口号,默认是5672
RABBITMQ_NODENAME=        //节点名称。默认是rabbit
RABBITMQ_CONFIG_FILE= //配置文件路径 ,即rabbitmq.config文件路径
RABBITMQ_MNESIA_BASE=     //mnesia所在路径
RABBITMQ_LOG_BASE=        //日志所在路径
RABBITMQ_PLUGINS_DIR=     //插件所在路径
cp /usr/share/doc/rabbitmq-server-3.6.14/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
常用配置:
tcp_listerners    #设置rabbimq的监听端口,默认为[5672]。
disk_free_limit     #磁盘低水位线,若磁盘容量低于指定值则停止接收数据,默认值为{mem_relative, 1.0},即与内存相关联1:1,也可定制为多少byte.
vm_memory_high_watermark    #设置内存低水位线,若低于该水位线,则开启流控机制,默认值是0.4,即内存总量的40%。
hipe_compile     #将部分rabbimq代码用High Performance Erlang compiler编译,可提升性能,该参数是实验性,若出现erlang vm segfaults,应关掉。
force_fine_statistics    #该参数属于rabbimq_management,若为true则进行精细化的统计,但会影响性能。
frame_max     #包大小,若包小则低延迟,若包则高吞吐,默认是131072=128K。
heartbeat     #客户端与服务端心跳间隔,设置为0则关闭心跳,默认是600秒。
---------------------!>

修改/etc/host
10.9.12.70 node1   (节点类型为disc)
10.9.12.76 node2     (ram)
10.9.12.78 node3      (ram)
在node1 :cat /var/lib/rabbitmq/.erlang.cookie
EDQFRITDJFWKONFXKQZF
在node2和node3分别都进行:

修改cookie后,启动node2和3,接着执行如下:


在node2和node3加入集群:
1.rabbitmqctl join_cluster rabbit@node1 --ram  ##以ram形式 不保存到本地,以disk形式 保存到本地(默认)
出现报错:

解决方法:ps -ef|grep rabbitmq     kill -9 xxxxx
                    /etc/init.d/rabbitmq-server start
                    rabbitmqctl status 节点信息显示正常
2 rabbitmqctl start_app
3 rabbitmqctl cluster_status  ##查询集群状态

关于集群的一些操作:
1.设置集群名称:
rabbitmqctl set_cluster_name rabbitmq-cluster
2.修改节点类型:
rabbitmqctl change_cluster_node_type ram
3.修改默认密码:
rabbitmqctl change_password guest password
4.将节点移出集群:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl forget_cluster_node rabbit@node2
5.查看/添加/删除用户
rabbitmqctl list_users
rabbitmqctl add_user username password
rabbitmqctl delete_user username
6.添加权限
rabbitmqctl set_user_tags xxx administrator
7.关于vhost
添加: rabbitmqctl add_vhost pms
删除:rabbitmqctl delete_vhost pms
查看:rabbitmqctl list_vhosts
设置权限:rabbitmqctl set_permissions -p vhost username ".*" ".*" ".*"   ##权限位对应为 config read write
读:有关消费消息的任何操作,包括清除整个队列(需要绑定操作成功)
写:发布消息(需要绑定操作成功)
配置:队列和交换器的创建和删除
查看权限:rabbitmqctl list_permissions -p vhost
删除权限:rabbitmqctl delete_permission -p vhost username
8.设置镜像模式:


通过管理界面设置:


通过后台命令设置:
格式:set_policy [-p vhostpath] {name} {pattern} {definition} [priority]
name:策略名
pattern:正则表达式,定义适用此策略的节点,"^" 意为设置所有节点适应此策略
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Pattern: queue的匹配模式(正则表达式)
Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
        1.ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
                     all:表示在集群中所有的节点上进行镜像
             exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
              nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
        2.ha-params:ha-mode模式需要用到的参数
        3. ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
priority:可选参数,policy的优先级
例如:对队列名称以“queue_”开头的所有队列进行镜像,并在集群的两个节点上完成进行
rabbitmqctl set_policy --priority 0 --apply-to queues mirror_queue "^queue_" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

9.安装管理界面插件:默认端口15672
rabbitmq-plugins enable rabbitmq_management
报错:
Error: {cannot_write_enabled_plugins_file,"/etc/rabbitmq/enabled_plugins",
           enoent}
解决:mkdir /etc/rabbitmq/
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.14/sbin/rabbitmq-plugins
./rabbitmq-plugin s enable rabbitmq_management
报错:

解决:
kill -9 xxxxx所有进程  rabbitmq-server start重启即可:


http://10.9.12.76:15672       guest用户只能用于本机127.0.0.1访问



新增用户并授权外网登陆:
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
或者在/etc/rabbitmq/rabbitmq.config文件添加:
[
{rabbit, [{tcp_listeners, [5672]}, {loopback_users, ["admin"]}]}
].
使用admin及密码123456重新登陆管理界面:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值