keepalived+haproxy 搭建高可用高负载高性能rabbitmq集群
一、环境准备
1. 我这里准备了三台centos7 虚拟机
主机名 | 主机地址 | 软件 |
---|---|---|
node-01 | 192.168.157.133 | rabbitmq、erlang、haproxy、keepalived |
node-02 | 192.168.157.134 | rabbitmq、erlang、haproxy、keepalived |
node-03 | 192.168.157.135 | rabbitmq、erlang |
2. 关闭三台机器的防火墙
# 关闭防火墙
service firewalld stop
# 关闭防火墙开机自启
systemctl disable firewalld
3. 三台主机的host和hostname配置
#配置hostname,重启生效
hostnamectl set-hostname <hostname>
# 加入三台主机的ip和hostname
vi /etc/hosts
192.168.157.133 node-01
192.168.157.134 node-02
192.168.157.135 node-03
4. erlang与rabbitmq版本选择RabbitMQ Erlang Version Requirements — RabbitMQhttps://www.rabbitmq.com/which-erlang.html二、安装erlang环境
1. 下载erlang,选择与rabbitmq版本匹配的版本,这里我选择的是25.0.4版本Downloads - Erlang/OTPThe official home of the Erlang Programming Languagehttps://www.erlang.org/downloads
2. 下载相关erlang编译依赖包
yum install –y ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel
yum install –y openssl-devel zlib-devel
yum install –y make ncurses-devel gcc gcc-c++ unixODBC unixODBC-devel openssl openssl-devel
2. 解压安装erlang
#创建erlang目录
mkdir /usr/local/erlang
#解压
tar -zxvf otp_src_25.0.4.tar.gz
#进入otp_src_25.0.4目录
./configure --prefix=/opt/erlang --without-javac
make && make install
3. configure的时候一般会遇到一些依赖不存在的情况,只需要用yum安装一下,重新运行configure命令即可。
4. 提示找不到wx-config: command not found
#更新epel第三方软件库
yum install -y epel-release
#再次执行,就可以安装了
yum install –y wxWidgets-devel
yum install wxBase #for /usr/bin/wx-config-3.0
cd /usr/bin
#创建软连接
ln -s wx-config-3.0 wx-config
5. 配置环境变量并验证
#修改/etc/profile
#加入如下配置,并保存
export ERLANG_HOME=/usr/local/erlang
export PATH=$ERLANG_HOME/bin:$PATH
#重新加载配置
source /etc/profile
#验证,输入erl命令,出现erlang命令行就是安装成功
三、安装rabbitmq镜像集群
1. github下载rabbitmq,我选择的 rabbitmq-server-generic-unix-3.11.21.tar.xzhttps://github.com/rabbitmq/rabbitmq-server/releaseshttps://github.com/rabbitmq/rabbitmq-server/releases
2. 解压安装
#解压到/usr/local目录
tar -xvf rabbitmq-server-generic-unix-3.11.21.tar.xz -C /usr/local
#配置rabbitmq环境变量
export ERLANG_HOME=/usr/local/erlang
export RABBITMQ_HOME=/usr/local/rabbitmq_server-3.11.21
export PATH=$ERLANG_HOME/bin:$RABBITMQ_HOME/sbin:$PATH
#重新加载/etc/profile
source /etc/profile
#开启rabbitmq管理界面
rabbitmq-plugins enable rabbitmq_management
#后台启动rabbitmq
rabbitmq-server -detached
3. 访问对应的host:15672进入rabbitmq管理页面,默认用户密码 guest/guest
4. 创建rabbitmq用户
#创建admin用户,密码admin
rabbitmqctl add_user admin admin
#设置用户角色
#超级管理员 administrator
#监控者 monitoring
#策略制定者 policymaker
#普通管理者 management
rabbitmqctl set_user_tags admin administrator
#设置权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
#查看所有用户
rabbitmqctl list_users
5. 拷贝.erlang.cookie到其他主机
如果启动rabbitmq的是root用户那么这个文件就在/root/用户下的隐藏文件,可以用ls -al查看到
#使用scp命令将node-01上的.erlang.cookie复制到其他主机上
scp /root/.erlang.cookie node-02:/root/.erlang.cookie
scp /root/.erlang.cookie node-03:/root/.erlang.cookie
6. 将node-02和node-03加入到node-01集群
在node-02和node-03上执行
#以后台模式启动
rabbitmq-server -detached
#停掉rabbitmq服务,不会关闭erlang服务环境
rabbitmqctl stop_app
#用来清空数据,如果主节点有数据也需要清空
rabbitmqctl reset
#加入node-01集群
rabbitmqctl join_cluster rabbit@node-01
#启动rabbitmq
rabbitmqctl start_app
7. 查看集群状态
登录任意节点后台可以看到集群状态
8. 添加集群同步策略
ha-mode: all,在集群中所有的节点上进行镜像
ha-sync-mode: automatic,在集群节点宕机重新连接后自动同步
方式一:命令添加
# 添加策略
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
# 查看策略
rabbitmqctl list_policies
方式二:管理后台界面上添加
9. 验证镜像模式
在node-01上创建一个队列ha-queue,可以看到node里面有三个节点,进去查看可以看到使用的策略为ha-all,并且node-02和node-03为镜像节点。
四、安装haproxy
node-01 和 node-02上操作
#yum 安装haproxy
yum install -y haproxy
#修改haproxy.cnf配置,配置文件在/etc/haproxy目录下
vi haproxy.cnf
#增加如下配置
#页面配置
listen status# 绑定9188端口bind 0.0.0.0:9188mode httpstats enablestats refresh 30sstats uri /stats # 登录用户admin 密码adminstats auth admin:adminstats realm (Haproxy\ statistic)stats admin if TRUE#配置rabbitmq管理端
listen rabbitmq_admin# 绑定15673端口bind 0.0.0.0:15673server node-01 192.168.157.133:15672server node-02 192.168.157.134:15672server node-03 192.168.157.135:15672#配置rabbitmq集群
listen rabbitmq_cluster# 绑定5673端口bind 0.0.0.0:5673mode tcpoption tcplogmaxconn 10000# 负载模式为轮训balance roundrobinserver node-03 192.168.157.135:5672 check inter 1000 rise 2 fall 2 backupserver node-02 192.168.157.134:5672 check inter 1000 rise 2 fall 2 backupserver node-01 192.168.157.133:5672 check inter 1000 rise 2 fall 2
启动haproxy
haproxy -f /etc/haproxy/haproxy.cnf
访问haproxy监控管理页面
通过haproxy配置的端口访问rabbitmq管理页面
五、安装keepalived
#yum安装keepalived
yum install -y keepalived
#修改keepalived.cnf配置,在/etc/keepalived/keepalived.cnfglobal_defs {router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}#检测脚本
vrrp_script check_haproxy {# 检测HAProxy脚本script "/etc/keepalived/script/check_haproxy.sh"# 每隔两秒检测interval 2# 权重weight 2
}vrrp_instance haproxy {#MASTER为主 BACKUP为备state MASTER#填自己网卡的名字interface eno16777736mcast_src_ip 192.168.157.133 virtual_router_id 51priority 100advert_int 1#认证方式,主备配置一致就行authentication {auth_type PASSauth_pass 1111}#脚本track_script {check_haproxy}#虚拟IP地址virtual_ipaddress {192.168.157.11}
}
启动keepalived
service keepalived restart
验证通过虚拟IP访问haproxy负载的rabbitmq管理端地址
至此安装全部完成。
相关文章:
keepalived+haproxy 搭建高可用高负载高性能rabbitmq集群
一、环境准备 1. 我这里准备了三台centos7 虚拟机 主机名主机地址软件node-01192.168.157.133rabbitmq、erlang、haproxy、keepalivednode-02192.168.157.134rabbitmq、erlang、haproxy、keepalivednode-03192.168.157.135rabbitmq、erlang 2. 关闭三台机器的防火墙 # 关闭…...
网络安全(黑客)零基础自学
网络安全是什么? 网络安全,顾名思义,网络上的信息安全。 随着信息技术的飞速发展和网络边界的逐渐模糊,关键信息基础设施、重要数据和个人隐私都面临新的威胁和风险。 网络安全工程师要做的,就是保护网络上的信息安…...
如何把本地项目上传github
一、在gitHub上创建新项目 【1】点击添加()-->New repository 【2】填写新项目的配置项 Repository name:项目名称 Description :项目的描述 Choose a license:license 【3】点击确定,项目已在githu…...
跳跃游戏【贪心算法】
跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。在这里插入图片…...
vue2+element-ui 实现下拉框滚动加载
一、自定义滚动指令。 VUE.directive( el-select-loadmore: { bind(el, binding) { const SELECTWRAP_DOM el.querySelector(.el-select-dropdown .el-select-dropdown__wrap) SELECTWRAP_DOM.addEventListener(scroll, function () { /*…...
探索AIGC人工智能(Midjourney篇)(二)
文章目录 利用Midjourney进行LOGO设计 用ChatGPT和Midjourney的AI绘画,制作儿童绘本故事 探索Midjourney换脸艺术 添加InsightFaceSwap机器人 Midjourney打造专属动漫头像 ChatGPT Midjourney画一幅水墨画 Midjourney包装设计之美 Midjourney24节气海报插画…...
01-Flask-简介及环境准备
Flask-简介及环境准备 前言简介特点Flask 与 Django 的比较环境准备 前言 本篇来介绍下Python的web框架–Flask。 简介 Flask 是一个轻量级的 Web 框架,使用 Python 语言编写,较其他同类型框架更为灵活、轻便且容易上手,小型团队在短时间内…...
【Git游戏】远程分支
origin/<branch> 远程分支在本地以 origin/<branch>格式存在,他指向上次和远程分支通过时的记录 git checkout origin/<branch> 会出现HEAD分离的情况 与远程通讯 git fetch —— 从远端获取数据(实际上将本地仓库中的远程分支更新…...
Day07-ElementUI
Day02-ElementUI 一 菜单设计 1 静态菜单 a 在components文件夹中新建一个组件Menu.vue <template><div class="menu-wrap"><el-menuclass="el-menu-vertical-demo"background-color="#031627"text-color="#fff"ac…...
【Go 基础篇】Go语言中的defer和recover:优雅处理错误
Go语言以其简洁、高效和强大的特性受到了开发者的热烈欢迎。在错误处理方面,Go语言提供了一种优雅的机制,即通过defer和recover组合来处理恐慌(panic)错误。本文将详细介绍Go语言中的defer和recover机制,探讨其工作原理…...
4.15 TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?
目录 HTTP 的 Keep-Alive TCP 的 Keepalive 总结: HTTP的Keep-Alive,是应用层(用户态)实现的,称为HTTP长连接; TCP的Keepalive,是由TCP层(内核态)实现的,…...
如何在VSCode中将html文件打开到浏览器
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
2022年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
第1题:拦截导弹 某国为了防御敌国的导弹袭击, 发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷: 虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。 某天, 雷达捕捉到敌国的…...
五公里场地训练笔记(完整版)
由于考研和口罩等原因,停跑了比较长的时间。中长距离就是这样,修为尽失,大概是要从头开始了,不过还是要乐观的面对,CHEER UP! 翻看咕咚软件,以前的PB是21:12,在2017年9月…...
【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
使用 OpenAI GPT 模型的最佳实践
推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 为了帮助用户获得最佳输出,OpenAI 提供了使用 GPT 模型的最佳实践。这来自体验,因为许多用户不断尝试使用此模型并找到了最有效的方法。 在本文中,我将总结使用 Ope…...
解除用户账户控制提醒
解决用户账户控制提醒 1. 前言2. 解决用户账户控制提醒2.1 控制面板2.2 注册表2.3 UAC服务 结束语 1. 前言 当我们使用电脑时,有时进行安装应用或者打开应用时,总会弹出一个提示框,要选择点击是否允许程序运行; 系统经常弹出用户…...
行业追踪,2023-08-23
自动复盘 2023-08-23 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…...
算法修炼Day60|● 84.柱状图中最大的矩形
LeetCode:84.柱状图中最大的矩形 84. 柱状图中最大的矩形 - 力扣(LeetCode) 1.思路 双指针思路,以当前数组为中心,借助两个数组存放当前数柱左右两侧小于当前数柱高度的索引,进行h*w的计算。注意首尾节点的左侧索引…...
前端面试题css(一)
题目 盒子垂直水平居中如何实现text-align:center vertical-align: middle水平垂直居中布局positionmargin水平垂直居中布局 grid栅格化布局及其兼容性介绍一下BFC触发 BFC 的条件包括:常见的用途包括: 写过的动画效果overflow有哪些属性visible&#x…...
.NETCORE中关于swagger的分组
有些时候我们的项目接口过多,就希望对应的swagger能够执行分组,网络上的几乎是千篇一律的分组方法,会累死! 这里提供一个更加高效的分组方法,比如你可以说哪些模块分到哪个组,哪些权限分到哪个组ÿ…...
4.1011
目录 四次挥手中收到乱序的FIN包会如何处理? 在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么? 四次挥手中收到乱序的FIN包会如何处理? 如果FIN报文比数据包先道道客户端,此时FIN是一个乱序报文,此时…...
uniapp中引入axios的错误?
场景 在unaipp中使用axios npm i axios 下载完成后 然后在页面中使用 axios.get(“http://3000/searchS”) 然后报错 Adapter http’ is not available in the build 原因 在 UniApp 中使用 Axios 发送 HTTP 请求时,如果出现错误 “Adapter http’ is not available…...
Discuz!论坛发帖标题字数限制80字符可以修改吗?修改发帖标题字数的方法
Discuz!论坛发帖标题字数限制80字符修改方法 1.数据库修改2.修改JS验证字符数文件3.修改模板中写死的字符限制数4.修改函数验证文件5.修改语言包文件6.更新缓存 Discuz X3.4论坛网站帖子标题字数限制80字符,当我们想使用长标题的时候就得一删再删,实在是…...
R语言画样本不均衡组的箱线图
# 导入 ggplot2 包 library(ggplot2)# 示例数据框,包含数值数据和分组信息 data <- data.frame(Group c(rep("Group A",10), rep("Group B",15),rep("Group C",20)),Value c(rnorm(10, mean 10, sd 2),rnorm(15, mean 15, sd…...
ArcGIS学习总结(19)——要素转点与空间连接(属性表字段映射)
1.在新创建的面矢量数据的属性表中没有对应的字段信息,为了能够和有属性信息的数据进行匹配,使其具有对应字段的信息。 2.需要匹配的矢量文件属性表信息。 3.对新创建的矢量文件执行要素转点:数据管理工具→要素→要素转点。 4.选择分析工…...
【每日一题Day306】LC228汇总区间 | 双指针
汇总区间【LC228】 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范…...
vue中实现echarts三维散点图
需要安装 echarts 同时引入 echarts-gl 我安装的版本: "echarts": "^5.3.2", "echarts-gl": "^2.0.9", import Vue from "vue"; import * as echarts from "echarts"; Vue.prototype.$echarts echa…...
多头自注意力机制的代码实现
文章目录 1、自注意力机制2、多头注意力机制 transformer的整体结构: 1、自注意力机制 自注意力机制如下: 计算过程: 代码如下: class ScaledDotProductAttention(nn.Module):def __init__(self, embed_dim, key_size, value_…...
抽象工厂模式
目录 了解抽象工厂模式前的前置知识 什么是抽象工厂模式? 为什么要提出抽象工厂模式? 抽象工厂模式中的四大角色? 抽象工厂模式的优缺点? 抽象工厂模式的适用场景? 了解抽象工厂模式前的前置知识 在讲抽象工厂模式…...
互联网推广的好处/pc网站优化排名软件
1.在项目中创建Number类,判断字符串"mingrikejijiavabu"中字符"i"出现了几次,并将结果输出。 方法一: 1 public class Number { //创建类2 3 public static void main(String[] args) { //定…...
公司网站开发语言/长沙网站优化体验
本文继续向Web开发人员和设计师推荐优秀文章。梦想天空博客关注前端开发技术,展示最新HTML5和CSS3技术应用,分享实用的jQuery插件,推荐优秀的网页设计案例,共享精美的设计素材和强大的Web开发工具。本文特别推荐给Web设计师和开发…...
芸志建站怎么建立网站/地推团队联系方式
本文实例讲述了php进程间通讯的方法。分享给大家供大家参考,具体如下:php单进程单线程处理批量任务太慢了,受不鸟了,但是php不能多线程,最终选择了多进程处理批量任务.php多进程主要使用for进行分裂,然后利用的unix/linux的信号量进行进程间通讯.本例使用…...
色盲测试图/百度seo查询收录查询
很多网站,尤其是那些已经运营了很久的大型网站,在做SEM的时候不是砍砍杀杀的事情,而是慢工出细活。不做事比把错事做的很对强,尤其是SEM。你了解哪个网站么,别看我画了谷歌、百度两个产品图,但还是个门外汉…...
石景山网站建设设计公司/安徽网络推广和优化
需求: 所有的OSPF进程都为Y; R1、R4和R5之间运行OSPF,其互联接口和Loopback接口以及R1的S3/0/0都运行OSPF area0内,不能改变路由器接口的默认类型。 R1的g0/0/1,R5的g0/0/1和SW3的vlan15都运行在OSPF area15内…...
app营销推广方式/深圳sem优化
比较两个numpy数组是否相等的最简单方法是什么(其中equality定义为:ab iff,对于所有索引i:A[i] B[i])? 简单地使用给了我一个布尔数组: 1 2 3>>> numpy.array([1,1,1]) numpy.array([1,1,1]) array([ True, True, True…...