Linux安装RABBITMQ - Go语言中文社区

Linux安装RABBITMQ


Linux安装RABBITMQ

环境信息:Centos7

准备工作

安装前的依赖安装
yum install gcc glibc-devel make ncurses-devel openssl-devel autoconf
yum install unixODBC unixODBC-devel

erlang官网
erlang21.3直接下载

步骤

将Erlang下载到本地
wget http://www.erlang.org/download/otp_src_21.3.tar.gz
解压并安装
tar -zxvf otp_src_21.3.tar.gz
cd otp_src_21.3
./configure
make&&make install
如果上步都已经完成 则可以使用了
输入 erl

原文传送门


yum方式安装erlang和rabbitmq

erlang的yum下载(密码0kov)
rabbitmq的yum下载(密码e6jf)
步骤

1. 下载之后上传到服务器上
2. yum install 上面的文件
3. 需要增加相关的依赖
	如:yum install gcc glibc-devel make ncurses-devel openssl-devel autoconf
	   yum install unixODBC unixODBC-devel

安装rabbitmq的一些注意事项

当我使用以下命令启动的时候报错
[root@1006130733e6 application]# rabbitmqctl start_app
Starting node rabbit@1006130733e6 ...
Error: unable to connect to node rabbit@1006130733e6: nodedown

DIAGNOSTICS
===========

attempted to contact: [rabbit@1006130733e6]

rabbit@1006130733e6:
  * connected to epmd (port 4369) on 1006130733e6
  * epmd reports: node 'rabbit' not running at all
                  no other nodes on 1006130733e6
  * suggestion: start the node

current node details:
- node name: 'rabbitmq-cli-64@1006130733e6'
- home dir: /var/lib/rabbitmq
- cookie hash: emO8Rk8KpUA/qTFubFyMEQ==


当我使用以下命令启动的时候就正常
service rabbitmq-server.service start

关于RabbitMQ的一些基本操作
原文传送门

$ sudo chkconfig rabbitmq-server on  # 添加开机启动RabbitMQ服务
$ sudo /sbin/service rabbitmq-server start # 启动服务
$ sudo /sbin/service rabbitmq-server status  # 查看服务状态
$ sudo /sbin/service rabbitmq-server stop   # 停止服务
 
# 查看当前所有用户
$ sudo rabbitmqctl list_users
 
# 查看默认guest用户的权限
$ sudo rabbitmqctl list_user_permissions guest
 
# 由于RabbitMQ默认的账号用户名和密码都是guest。为了安全起见, 先删掉默认用户
$ sudo rabbitmqctl delete_user guest
 
# 添加新用户
$ sudo rabbitmqctl add_user username password
 
# 设置用户tag
$ sudo rabbitmqctl set_user_tags username administrator
 
# 赋予用户默认vhost的全部操作权限
$ sudo rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
 
# 查看用户的权限
$ sudo rabbitmqctl list_user_permissions username

开启web管理接口

如果只从命令行操作RabbitMQ,多少有点不方便。幸好RabbitMQ自带了web管理界面,只需要启动插件便可以使用。

$ sudo rabbitmq-plugins enable rabbitmq_management

配置RabbitMQ

关于RabbitMQ的配置,可以下载RabbitMQ的配置文件模板到/etc/rabbitmq/rabbitmq.config, 然后按照需求更改即可。
关于每个配置项的具体作用,可以参考官方文档。
更新配置后,别忘了重启服务哦!

开启用户远程访问

默认情况下,RabbitMQ的默认的guest用户只允许本机访问, 如果想让guest用户能够远程访问的话,只需要将配置文件中的loopback_users列表置为空即可,如下:

{loopback_users, []}
另外关于新添加的用户,直接就可以从远程访问的,如果想让新添加的用户只能本地访问,可以将用户名添加到上面的列表, 如只允许admin用户本机访问。

{loopback_users, ["admin"]}
更新配置后,别忘了重启服务哦!



 sudo /sbin/service rabbitmq-server status  # 查看服务状态


这里可以看到log文件的位置,转到文件位置,打开文件:



这里显示的是没有找到配置文件,我们可以自己创建这个文件

cd /etc/rabbitmq/
vi rabbitmq.config
编辑内容如下:

[{rabbit, [{loopback_users, []}]}].
这里的意思是开放使用,rabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置。

保存配置后重启服务:

service rabbitmq-server stop
service rabbitmq-server start
此时就可以从外部访问了,但此时再看log文件,发现内容还是原来的,还是显示没有找到配置文件,可以手动删除这个文件再重启服务,不过这不影响使用

rm rabbit@mythsky.log 
service rabbitmq-server stop
service rabbitmq-server start
注意:记得要开放5672和15672端口

rabbitmq普通集群的搭建

1. 将主节点与子节点的[/var/lib/rabbitmq/.erlang.cookie]设置为一致,直接复制一份
2. 设置[.erlang.cookie]权限
	chmod 600 /var/lib/rabbitmq/.erlang.cookie
3. 授予权限给rabbitmq:rabbitmq
	chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
4. 将[etc/hosts]的文件配置各方的映射关系
	我这边配置了其他的测试不可以,将子节点加入不了父节点,后来试了一下,改为子节点的hostname(即下面的childnodehostname就可以了)
	rabbitmqctl join_cluster --ram rabbit@childnodehostname
5. 集群操作
	- 修改/etc/hosts让主从都能ping主机名能ping通
	- 首先将主子节点的[.erlang.cookie]一致
	- 主节点的rabbitmqctl stop_app
	- 将子节点加入到主节点rabbitmqctl join_cluster --ram rabbit@childnodehostname
	- 启动父节点即可
  1. 改变rabbitmq子节点模式
rabbitmqctl stop_app
# ram为内存模式或者disc为磁盘模式
rabbitmqctl change_cluster_node_type ram
rabbitmqtl start_app
  1. 查看查看各个节点和集群的工作运行状态
rabbitmqctl status, rabbitmqctl cluster_status
  1. 集群的内存模式和磁盘模式

在RabbitMQ集群中的节点只有两种类型:内存节点/磁盘节点,单节点系统只运行磁盘类型的节点。而在集群中,可以选择配置部分节点为内存节点。
内存节点将所有的队列,交换器,绑定关系,用户,权限,和vhost的元数据信息保存在内存中。而磁盘节点将这些信息保存在磁盘中,但是内存节点的性能更高,为了保证集群的高可用性,必须保证集群中有两个以上的磁盘节点,来保证当有一个磁盘节点崩溃了,集群还能对外提供访问服务。在上面的操作中,可以通过如下的方式,设置新加入的节点为内存节点还是磁盘节点

  1. RABBITMQ退出集群
假设要把rabbitmq2退出集群
在rabbitmq2上执行
#rabbitmqctl stop_app
#rabbitmqctl reset
#rabbitmqctl start_app

在集群主节点上执行
# rabbitmqctl forget_cluster_node rabbit@rabbitmq2
  1. RABBITMQ集群重启
集群重启时,最后一个挂掉的节点应该第一个重启,如果因特殊原因(比如同时断电),而不知道哪个节点最后一个挂掉。可用以下方法重启:

先在一个节点上执行
#rabbitmqctl force_boot
#service rabbitmq-server start
在其他节点上执行
#service rabbitmq-server start
查看cluster状态是否正常(要在所有节点上查询)。
#rabbitmqctl cluster_status

如果有节点没加入集群,可以先退出集群,然后再重新加入集群。
上述方法不适合内存节点重启,内存节点重启的时候是会去磁盘节点同步数据,如果磁盘节点没起来,内存节点一直失败。
  1. 注意事项
- cookie在所有节点上必须完全一样,同步时一定要注意。
- erlang是通过主机名来连接服务,必须保证各个主机名之间可以ping通。可以通过编辑/etc/hosts来手工添加主机名和IP对应关系。如果主机名ping不通,rabbitmq服务启动会失败。
- 如果queue是非持久化queue,则如果创建queue的那个节点失败,发送方和接收方可以创建同样的queue继续运作。但如果是持久化queue,则只能等创建queue的那个节点恢复后才能继续服务。
- 在集群元数据有变动的时候需要有disk node在线,但是在节点加入或退出的时候所有的disk node必须全部在线。如果没有正确退出disk node,集群会认为这个节点当掉了,在这个节点恢复之前不要加入其它节点。.

rabbitmq镜像集群的搭建

设置镜像队列后,节点之间会进行消息同步,每个节点的消息内容都是同步的
镜像队列可以同步queue和message,当主queue挂掉,从queue中会有一个变为主queue来接替工作。

镜像队列是基于普通的集群模式的,所以你还是得先配置普通集群,然后才能设置镜像队列。

镜像队列设置后,会分一个主节点和多个从节点,如果主节点宕机,从节点会有一个选为主节点,原先的主节点起来后会变为从节点。

queue和message虽然会存在所有镜像队列中,但客户端读取时不论物理面连接的主节点还是从节点,都是从主节点读取数据,然后主节点再将queue和message的状态同步给从节点,因此多个客户端连接不同的镜像队列不会产生同一message被多次接受的情况。

镜像集群的特点:所有节点的消息都会进行同步。RabbitMQ是没有中心的。

Rabbit镜像功能,需要基于rabbitmq策略来实现,政策是用来控制和修改群集范围的某个vhost队列行为和Exchange行为,在cluster中任意节点启用策略,策略会自动同步到集群节点。

策略的修改可以通过命令也可以通过WEB,如果我是通过WEB来修改的,非常简单。
Pattern:“^” 表示所有匹配所有队列名称。”^log” 是指同步”log”开头的队列名称。
ha-mode:“all”代表同步到所有节点。

镜像集群的实现

  1. web页面的管理实现
    在这里插入图片描述
    在这里插入图片描述
  2. 命令的实现
// 命令行方式添加策略
// 策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。
rabbitmqctl set_policy -p <vhost> ha-allqueue"^" '{"ha-mode":"all"}'

// 添加成功后,可以看到队列列表中,在Node列中有个+N的标记,表示同步了几个节点,查看某个具体队列的详情,可以看到已经被rabbit1监视起来了

在这里插入图片描述


在这里插入图片描述

文章参考

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/a656678879/article/details/89875360
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 23:23:51
  • 阅读 ( 920 )
  • 分类:Linux

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢