linux系统安装rabbitmq单机、集群部署安装

单机安装

软件版本

Erlang和RabbitMQ的对应关系:http://www.rabbitmq.com/which-erlang.html

我所用的环境为redhat7,Erlang-21.3 RabbitMQ-3.8.0

Erlang环境安装

安装依赖

yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC unixODBC-devel httpd python-simplejso

注意:openssl-devel、python-simplejso可能需要自行编译安装

python-simplejso安装过程:
tar vxzf simplejson-3.5.2.tar.gz
cd simplejson-3.5.2
python setup.py install

当安装完openssl以后执行openssl version
如出现报错:

openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
该错误是因为openssl库的挂载位置不正确
root下执行
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
若出现“已存在”的情况,可选择重命名或者删除
**注:**
执行config是建议后面添加参数--prefix=路径
当重复安装时注意使用whereis命令将其他ssl、erl全部删除

安装Erlang

wget http://erlang.org/download/otp_src_21.3.tar.gz
tar -xvf otp_src_21.3.tar.gz
cd otp_src_21.3
./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac

erlang语言编译配置选项:

–prefix 指定安装目录 

–enable-smp-support启用对称多处理支持(Symmetric Multi-Processing对称多处理结构的简称)

–enable-threads启用异步线程支持

–enable-sctp启用流控制协议支持(Stream Control Transmission Protocol,流控制传输协议)

–enable-kernel-poll启用Linux内核poll

–enable-hipe启用高性能Erlang

–with-ssl 启用ssl包

–without-javac 不用java编译

编译安装(root权限)

make && make install

配置Erlang的环境变量

vim /etc/profile
export PATH=$PATH:/usr/local/erlang/bin
source /etc/profile

检查

测试Erlang安装是否成功,输入erl,查看版本信息
测试输入hello .,在控制台上看到输入hello,之后退出输入halt() .,Erlang环境安装完毕
在erl中执行crypto:start().,如果返回ok,则安装成功!
注:openssl地址不确定可以用 which openssl查找

安装RabbitMQ服务

解压tar.xz格式的包
xz -d rabbitmq-server-generic-unix-3.8.0.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.8.0.tar -C /usr/local/
或者直接使用
tar -xvf rabbitmq-server-generic-unix-3.8.0.tar.xz 

设置rabbitmq的环境变量

vim /etc/profile
export PATH=$PATH:/usr/local/rabbitmq_server-3.8.0/sbin
source /etc/profile

启动服务

rabbitmq-server -detached   //启动rabbitmq,-detached代表后台守护进程方式启动。

分析

Warning不用管
ERROR是因为已经启动
Error的原因较多,网上说host的原因,但仅是原因之一,文章开始时候的依赖务必全部安装,装不上的需要自行编译安装,mq未能正确启动时也会报这个错

再次查看状态
出现该图片内容代表成功
其他相关命令

启动服务:rabbitmq-server -detached【 /usr/local/rabbitmq_server-3.8.0/sbin/rabbitmq-server  -detached 】
查看状态:rabbitmqctl status【 /usr/local/rabbitmq_server-3.8.0/sbin/rabbitmqctl status  】
关闭服务:rabbitmqctl stop【 /usr/local/rabbitmq_server-3.8.0/sbin/rabbitmqctl stop  】
列出角色:rabbitmqctl list_users

配置RabbitMQ监控插件

首先要使用浏览器访问RabbitMQ管理界面,则需要配置网页插件

rabbitmq-plugins enable rabbitmq_management


查看启动的插件

 rabbitmq-plugins list     //[E*显示启动]   [e*隐式启动]

在这里插入图片描述
关闭防火墙
RabbitMQ默认端口为5672
现在你在浏览器中输入服务器IP:15672 就可以看到RabbitMQ的WEB管理页面了,是不是很兴奋??可是你没有账号密码,淡定!!!
默认情况下,访问RabbitMQ服务的用户名密码为“guest”,这个账户有限制, 默认只能通过本地网络访问,远程访问受到限制,所以我们需要新添加一个用户,命令如下:
添加用户

rabbitmqctl add_user admin 123456  //添加用户,后面两个参数分别是用户名和密码
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"  //添加权限
rabbitmqctl set_user_tags admin administrator  //修改用户角色
然后就可以远程访问了,然后可直接配置用户权限等信息。 
登录:http://ip:15672 登录

在这里插入图片描述
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

集群安装

集群目的

  1. 允许消费者和生产者在RabbitMQ节点崩溃的情况下继续运行
  2. 通过增加更多的节点来扩展消息通信的吞吐量

Cluster集群搭建

首先将集群下各服务器完成单机安装
修改Linux中的/etc/hosts文件加入,让各个节点都能互相识别对方的存在

ip1 hostname
ip2 hostname
......

修改完成之后,重启服务器(非必须)至少需要重启mq。

RabbitMQ集群通信是建立在Erlang通信上的,Erlang通信是通过.erlang.cookie文件通信的,编辑 RabbitMQ的cookie 文件,以确保各个节点的cookie文件使用的是同一个值,cookie文件在$HOME目录下,cookie相当于密钥令牌,集群中的RbbitMQ节点需要通过交换密钥令牌以获得相互认证,如果节点的密钥令牌不一致,那么在配置节点时就会报错,报错如下:

rabbitmqctl join_cluster rabbit@node-2

在这里插入图片描述
复制哪一台服务器.erlang.cookie文件都行,只要保证相同

配置集群

使用 rabbitmqctl工具配置,启动这两个rabbitmq节点服务

rabbitmq-server -detached

这两个节点时独立的

rabbitmqctl cluster_status

查看各个节点的状态

组建集群

接下来为了将所有节点组成一个集群,需要以1节点为基准,将其他节点加入 1节点的集群中。这些节点是平等的,如果想调换彼此的加入顺序也可以。
步骤如下:
在node-2节点执行

# rabbitmqctl stop_app

Stopping rabbit application on node rabbit@node-2 ...

# rabbitmqctl reset

Resetting node rabbit@node-2 ...

# rabbitmqctl join_cluster rabbit@node-1    //rabbit@rabbitmq01为rabbitmq01集群的名字,在rabbitmq01上查看

Clustering node rabbit@node-2 with rabbit@node-1

# rabbitmqctl start_app

Starting node rabbit@node-2 ...

 completed with 3 plugins.

然后使用:rabbitmqctl cluster_status查看状态:
在这里插入图片描述
Web管理插件可看出成功了

在这里插入图片描述
所有节点完成上述操作后集群搭建完成

集群节点类型

RAM node:内存节点将所有的队列、交换机、绑定、用户、权限和 vhost 的元数据定义存储在内存中,好处是可以使得像交换机和队列声明等操作更加的快速。
Disk node: 将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启 RabbitMQ 的时候,丢失系统的配置信息。

在使用rabbitmqctl cluster_status命令来查看节点类型:显示如图
在这里插入图片描述
目前来看集群中所有的节点都为磁盘节点,我们可以将node-1修改为内存节点

rabbitmqctl stop_app

rabbitmqctl change_cluster_node_type ram

rabbitmqctl start_app

rabbitmqctl cluster_status

查看集群中node-1节点已经更改为ram类型
在这里插入图片描述
在RabbitMQ集群中,RabbitMQ规定必须要有一个disk节点,其他节点都可以为RAM节点,当节点加入或者离开集群时,它们必须将变更通知到至少一个磁盘节点。如果只有一个disk节点,而且改disk节点下线,那么集群可以继续发送或者接收消息,但是不能执行其他操作,直到该磁盘节点恢复前,你无法更改任何东西,所以说在建立集群的时候,我们确保应该有多个disk节点

解释

Erlang集群

rabbitmqctl首先会启动erlang节点,然后会从erlang分布式系统尝试连接RabbitMQ,而这时候需要erlang cookie和合适的节点名称,erlang节点通过交换作为秘密令牌的erlang cookie以获得认证,.erlang.cookie中存储的就是此令牌信息,所以集群所以erlang节点的erlang.cookie令牌信息必须一致

由于RabbitMQ的集群依赖erlang的集群,所以需要构建erlang集群,erlang集群之间是通过magic cookie实现的,这个cookie存放在$HOME/.erlang.cookie,随便选取一个节点的cookie复制到另外两个节点使三台保持一致

设置好之后即可重启rabbitmq
如果需要将rabbitmq02作为内存节点与rabbitmq01连接起来,则在rabbitmq02上执行以下命令

rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
**其中--ram代表是内存节点,如果希望是磁盘节点则不用加--ram,在rabbitmq集群中,至少需要一个磁盘节点**

然后可以使用ip:15672即可访问,可以查看到三台节点的信息
集群节点可以是两种类型: 磁盘节点(Disc Node) 或 内存节点(RAM Node).磁盘节点会在RAM和磁盘中复制数据, 通过冗余可以防止节点失效事件,并可从断电这种全局事件中进行恢复. RAM节点只在RAM中复制数据(除了队列的内容外,还依赖于队列是否是持久化的或者内容对于内存来说是否过大) ,并主要用于可伸缩性. RAM节点只有当管理资源(如,增加/删除队列,交换机,或绑定)的时候才具有更高的性能.一个集群必须至少有一个磁盘节点,通常来说还不止一个.
默认情况下,节点是磁盘节点.如果你想要创建内存节点,需要提供–ram 标志

rabbitmq命令详解参考

https://www.cnblogs.com/wuzhiyuan/p/6856985.html
http://www.blogjava.net/qbna350816/archive/2016/07/30/431394.html
http://www.rabbitmq.com/man/rabbitmqctl.1.man.html

如果在加入集群的时候没有指定内存节点(RAM Node),可以使用命令将某个RabbitMQ节点修改为内存节点

修改节点为ram模式
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
rabbitmqctl cluster_status
退出集群
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

注意事项

cookie在所有节点上必须完全一样,同步时一定要注意。
Erlang是通过主机名来连接服务的,必须保证各个主机名之间可以ping通。可以通过编辑/etc/hosts来手工添加主机名和IP对应关系。如果主机名ping不通,rabbitmq服务启动会失败。
如果queue是非持久化queue,则如果创建queue的那个节点失败,发送方和接收方可以创建同样的queue继续运作。但如果是持久化queue,则只能等创建queue的那个节点恢复后才能继续服务。
在集群元数据有变动的时候需要有disk node在线,但是在节点加入或退出的时候所有的disk node必须全部在线。如果没有正确退出disk node,集群会认为这个节点当掉了,在这个节点恢复之前不要加入其它节点。
RabbitMQ只要求集群中至少有一个磁盘节点,其他节点都可以是内存节点。当节点加入或者离开集群时,它们必须要将变更通知到至少一个磁盘节点。如果只有一个磁盘节点,磁盘节点奔溃后,集群可以继续路由消息(即保持运行),但是直到该节点恢复之前,无法更改任何东西。通常在集群中设置两个磁盘节点
cluster中的node可以被随意的停止和启动,他们并不影响cluster中的其他node的运行,node重启后会自动的和cluster中的其他node进行联系的。当cluster不能工作时,最后一个失效的node必须是重建后第一个开始工作的node,如果这种情况不满足,则所有的node则会为最后一个disk node的恢复等待30秒,如果最后一个失效的node无法重新工作,我们需要通过命令将其从cluster中移除

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值