点击上方蓝色字体,选择“星标公众号”
高质量文章,尽快交付
作者 | 张龙浩
来源 | urlify.cn/67fequ
前言
微风徐徐的季节,本该和家人朋友一起享受美丽的花草,或者懒洋洋地晒太阳听风鸣鸟叫,度过周末。可是因为工作和理想,我又回到了公司,敲着键盘,写着代码。程序员的世界,灰暗,灰暗。希望天下所有努力的程序员都能实现自己的梦想!!
回到正题,为什么要搭建 RabbitMQ 集群?RabbitMQ 集群有哪些模式?如何搭建 RabbitMQ 集群?RabbitMQ 镜像的高可用策略有哪些?
1、首先这个产品有很多优点,最看好的就是它的异步性,提高了系统抗峰值负载的能力。第二是系统和功能结构的解耦。基于这两点,它在整个系统中的作用至关重要。既然这么重要,当然要考虑它的高可用性。那么我们就有了第一个问题的答案。
2. RabbitMQ有3种模式,但是集群模式有2种,具体如下:
准备集群环境来安装 RabbitMQ
我的环境如下:
1、两台Centos7机器,主机名分别为:F、G。
2、IP地址为:F—172.18.8.229,G—172.18.8.224。
3、修改hosts文件如下,以下是机器G的hosts文件内容,F还需要做如下配置:
[root@G bin]# cat /etc/hosts
127.0.0.1 G localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 G localhost localhost.localdomain localhost6 localhost6.localdomain6
172.18.8.224 G
172.18.8.229 F
4、保证两台机器能互相ping通,如下图:
好了,环境现在已经满足了,接下来我们在两台机器上安装rabbitmq。
不看官方文档就别学了,地址如下:
安装rabbitmq需要依赖erlang环境,所以我们需要先安装erlang环境。
安装完成后,下载rabbitmq的rpm包ivh,如果实在不会安装,这里有Linux系统安装rabbitmq的例子(二)软件安装与卸载,如果实在不会安装,加入左上角的群,或者点击网页右上角的X,你要相信,这不是你的错,而是你和rabbitmq的缘分。
如果安装和启动过程中出现错误,您可以尝试以下解决方法:
安装成功启动后,下面是一些常用的操作。
[root@G bin]# ./rabbitmq-server -deched --后台启动服务
[root@G bin]# ./rabbitmqctl start_app --启动服务
[root@G bin]# ./rabbitmqctl stop_app --关闭服务
[root@G bin]# ./rabbitmq-plugins enable rabbitmq_management --启动web管理插件
[root@G bin]# ./rabbitmqctl add_user zlh zlh --添加用户,密码
[root@G bin]# ./rabbitmqctl set_user_tags zlh administrator --设置zlh为administrator权限
如果看到下面的操作,说明启动成功高可用集群软件,并且web管理页的插件也启动成功,如果下面的6为0,则需要启动web管理插件
具体的rabbitmqctl命令详见官网文档:
搭建rabbitmq通用模式集群
在上述两台机器上安装完rabbitmq之后,可以在机器中看到如下文件,路径在$HOME或者/var/lib/rabbitmq中,文件名为.erlang.cookie,是一个隐藏文件,那么这个文件中存放的是什么,有什么用呢?
我们这样说吧:RabbitMQ 集群依赖于 Erlang 集群,而 Erlang 集群就是用这个 cookie 来做通信认证的,所以搭建集群的第一步就是要获取这个 cookie高可用集群软件,怎么做呢?
1、集群中两台机器,即F、G的.erlang.cookie文件中的cookie值必须一致,且权限必须为owner只读。
机器 G 中的 cookie:
机器 F 中的 cookie:
修改文件权限如下:
[root@F ~]# chmod 600 .erlang.cookie
2.检查集群状态。我的已经完成了。
[root@F bin]# ./rabbitmqctl cluster_status
Cluster status of node rabbit@F ...
[{nodes,[{disc,[rabbit@G]},{ram,[rabbit@F]}]},
{running_nodes,[rabbit@G,rabbit@F]},
{cluster_name,<<"rabbit@F">>},
{partitions,[]},
{alarms,[{rabbit@G,[]},{rabbit@F,[]}]}]
3.停止当前机器上的rabbitmq服务
[root@F bin]# ./rabbitmqctl stop_app
4.将G中的rabbitmq加入到集群中
[root@F bin]# ./rabbitmqctl join_cluster --ram rabbit@G
5.启动当前机器的rabbitmq服务
[root@F bin]# ./rabbitmqctl start_app
6.打开web管理页面查看节点
就这样。你可以做一个测试来验证我们在前言中提到的正常模式指令。它们一定是正确的。
构建rabbitmq镜像高可用集群
写到这里,接下来,朋友要请我吃饭,我会尽快去参加聚会的。即便如此,我也会准备齐全。走走走。
本节参考的文件如下:
首先,镜像模式依赖的是策略模块,这个模块是干什么用的呢?
Policy的中文意思就是策略或者战略,所以就是设置哪些Exchange或者队列需要进行复制和同步。那么如何进行复制和同步呢?没错,就是它的作用。
这里面的内容有点多,我先举个例子:
[root@G ~]# ./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
参数含义:
ha-all:策略名称。
^: 为匹配字符,只有一个 ^ 表示匹配全部。^zlh 匹配名为 zlh 的交换机或队列。
ha-mode:匹配类型,分为3种模式:all(所有队列)、exctly(部分)(需要配置ha-params参数,该参数为int类型,比如3,很多集群中随机3台机器)、nodes(需要配置ha-params参数,该参数为数组类型,比如["3rabbit@F", "rabbit@G"],指定了F、G两台机器)。
参考示例如下
当然也可以在web管理界面进行配置:
配置完成后队列如下,ha-haall的说明用的是我自己ha-haall策略,属于镜像模式,没有说明的是普通模式:
总结
接下来是大家最喜欢的总结,一共有两个内容,如下: