谷粒商城のRedisESRabbit MQ集群

文章目录

  • 前言
  • 一、搭建Redis集群
  • 三、搭建ES集群
  • 三、搭建Rabbit MQ集群


前言

  本篇是谷粒商城集群部署篇,搭建Redis、ES、Rabbit MQ集群实践的个人笔记,也是谷粒商城笔记的最后一篇。集群相关的理论性内容,会放在面试篇的笔记中。


一、搭建Redis集群

  采用3主节点+3从节点的架构,在docker上创建实例:

for port in $(seq 7001 7006); domkdir -p /mydata/redis/node-${port}/conftouch /mydata/redis/node-${port}/conf/redis.confcat << EOF > /mydata/redis/node-${port}/conf/redis.conf
port ${port}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.101.128
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
appendonly yes
EOFdocker run -p ${port}:${port} -p 1${port}:1${port} \--name redis-${port} \-v /mydata/redis/node-${port}/data:/data \-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \-d redis:5.0.7 redis-server /etc/redis/redis.conf
done

在这里插入图片描述  六个Redis实例创建完成:
在这里插入图片描述  进入其中一个主节点,设置集群信息:

docker exec -it redis-7001 bash
redis-cli --cluster create 192.168.101.128:7001 192.168.101.128:7002 192.168.101.128:7003 192.168.101.128:7004 192.168.101.128:7005 192.168.101.128:7006 --cluster-replicas 1

  7001,7002,7003是主节点,7005是7001的从节点,7006是7002的从节点,7004是7003的从节点:
在这里插入图片描述  使用cli命令-c指定集群模式,操作其中一个主节点:

redis-cli -c -h 192.168.101.128 -p 7001

  set一个键值,因为k1经过hash运算,被路由到了7003的hash槽,所以自动进入了7003节点:
在这里插入图片描述  再模拟一下宕机的情况,将7001主节点下线:

docker stop redis-7001

  然后进入7002的内部:

docker exec -it redis-7002 bash
redis-cli -c -h 192.168.101.128 -p 7002

  查看集群状态,7004从从节点被提升到了主节点,如果将7001重新上线,会成为7004的从节点
在这里插入图片描述

三、搭建ES集群

  首先临时修改配置:

sysctl -w vm.max_map_count=262144

  Docker 创建容器时默认采用 bridge 网络,自行分配 ip,不允许自己指定。在实际部署中,我们需要指定容器 ip,不允许其自行分配 ip,尤其是搭建集群时,固定 ip 是必须的,可以创建一个新的 bridge 网络:

docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.1.1 mynet

  创建master节点:

for port in $(seq 1 3); do# 创建目录结构并设置权限mkdir -p /mydata/elasticsearch/master-${port}/configmkdir -p /mydata/elasticsearch/master-${port}/datachmod -R 777 /mydata/elasticsearch/master-${port}# 生成 Elasticsearch 配置文件cat << EOF > /mydata/elasticsearch/master-${port}/config/elasticsearch.yml
cluster.name: my-es # 集群的名称,同一个集群该值必须设置成相同的
node.name: es-master-${port} # 该节点的名字
node.master: true # 该节点有机会成为 master 节点
node.data: false # 该节点可以存储数据
network.host: 0.0.0.0
http.host: 0.0.0.0 # 所有 http 均可访问
http.port: 920${port}
transport.tcp.port: 930${port}
# discovery.zen.minimum_master_nodes: 2 # 保证集群中的节点可以知道其余 N 个有 master 资格的节点
discovery.zen.ping_timeout: 10s # 设置集群中自动发现其他节点时 ping 连接的超时时间
discovery.seed_hosts: ["172.18.0.21:9301", "172.18.0.22:9302", "172.18.0.23:9303"] # 设置集群 Master 节点的初始列表
cluster.initial_master_nodes: ["172.18.0.21"] # 新集群初始时的候选主节点
EOF# 运行 Docker 容器docker run --name elasticsearch-node-${port} \-p 920${port}:920${port} \-p 930${port}:930${port} \--network=mynet \--ip 172.18.0.2${port} \-e ES_JAVA_OPTS="-Xms300m -Xmx300m" \-v /mydata/elasticsearch/master-${port}/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /mydata/elasticsearch/master-${port}/data:/usr/share/elasticsearch/data \-v /mydata/elasticsearch/master-${port}/plugins:/usr/share/elasticsearch/plugins \-d elasticsearch:7.4.2
done

在这里插入图片描述在这里插入图片描述  创建node节点,和master节点的区别在于不参与master节点选举:

for port in $(seq 4 6); do# 创建目录结构并设置权限mkdir -p /mydata/elasticsearch/node-${port}/configmkdir -p /mydata/elasticsearch/node-${port}/datachmod -R 777 /mydata/elasticsearch/node-${port}# 生成 Elasticsearch 配置文件cat << EOF > /mydata/elasticsearch/node-${port}/config/elasticsearch.yml
cluster.name: my-es # 集群的名称,同一个集群该值必须设置成相同的
node.name: es-node-${port} # 该节点的名字
node.master: false # 该节点不会成为 master 节点
node.data: true # 该节点可以存储数据
network.host: 0.0.0.0
# network.publish_host: 192.168.101.128 # 如果需要通信,可以设置为本机外网 IP
http.host: 0.0.0.0 # 所有 http 均可访问
http.port: 920${port}
transport.tcp.port: 930${port}
# discovery.zen.minimum_master_nodes: 2 # 官方推荐(N/2)+1 来保证集群的安全性
discovery.zen.ping_timeout: 10s # 设置集群中自动发现其他节点时 ping 连接的超时时间
discovery.seed_hosts: ["172.18.0.21:9301", "172.18.0.22:9302", "172.18.0.23:9303"] # 设置 Master 节点初始列表
cluster.initial_master_nodes: ["172.18.0.21"] # 新集群初始时的候选主节点
EOF# 运行 Docker 容器docker run --name elasticsearch-node-${port} \-p 920${port}:920${port} \-p 930${port}:930${port} \--network=mynet \--ip 172.18.0.2${port} \-e ES_JAVA_OPTS="-Xms300m -Xmx300m" \-v /mydata/elasticsearch/node-${port}/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /mydata/elasticsearch/node-${port}/data:/usr/share/elasticsearch/data \-v /mydata/elasticsearch/node-${port}/plugins:/usr/share/elasticsearch/plugins \-d elasticsearch:7.4.2
done

在这里插入图片描述在这里插入图片描述  全部启动完毕后,通过docker logs命令可以查看某个节点的同步过程,大致说明了:

  • Elasticsearch 集群 my-es 的 es-node-4 节点成功应用了来自 es-master-1 主节点的集群状态变更。
  • 变更内容是新节点 es-node-6 加入到集群中。在这里插入图片描述  在网页上也可以访问到集群:
    在这里插入图片描述  ES会在标记了node.master: true的节点之中,选举一个主节点,加上*号
    在这里插入图片描述  如果将主节点强制下线,会重新选举一个主节点:
    在这里插入图片描述

三、搭建Rabbit MQ集群

  Rabbit MQ集群本次选用镜像集群。简单的说,普通集群模式下,假设我有A,B,C三个节点,消费者需要从C节点中获取信息,但是该消息现在只存在于A节点的队列中,这时MQ会将消息从A节点的队列复制到C节点的队列,消费者再进行消费。如果A节点宕机了,那么消费者也就无法进行消费。镜像集群模式,数据会主动在节点之间进行同步,而不是在读取数据的时候才临时拉取。
  首先创建出对应的文件夹和目录:

mkdir /mydata/rabbitmq
cd rabbitmq/
mkdir rabbitmq01 rabbitmq02 rabbitmq03

  启动三个实例:

# 启动 RabbitMQ 容器 rabbitmq01
docker run -d \--hostname rabbitmq01 \--name rabbitmq01 \-v /mydata/rabbitmq/rabbitmq01:/var/lib/rabbitmq \-p 15673:15672 \-p 5673:5672 \-e RABBITMQ_ERLANG_COOKIE='moon' \rabbitmq:management# 启动 RabbitMQ 容器 rabbitmq02
docker run -d \--hostname rabbitmq02 \--name rabbitmq02 \-v /mydata/rabbitmq/rabbitmq02:/var/lib/rabbitmq \-p 15674:15672 \-p 5674:5672 \-e RABBITMQ_ERLANG_COOKIE='moon' \--link rabbitmq01:rabbitmq01 \rabbitmq:management# 启动 RabbitMQ 容器 rabbitmq03
docker run -d \--hostname rabbitmq03 \--name rabbitmq03 \-v /mydata/rabbitmq/rabbitmq03:/var/lib/rabbitmq \-p 15675:15672 \-p 5675:5672 \-e RABBITMQ_ERLANG_COOKIE='moon' \--link rabbitmq01:rabbitmq01 \--link rabbitmq02:rabbitmq02 \rabbitmq:management

在这里插入图片描述在这里插入图片描述  可以在页面上访问:
在这里插入图片描述  然后让每个节点加入集群:

docker exec -it rabbitmq01 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
docker exec -it rabbitmq02 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit
docker exec -it rabbitmq03 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit

  登录网页,节点已经加入了集群。

在这里插入图片描述  设置镜像集群模式(RabbitMQ 3.8 版本开始,队列镜像功能已经被废弃,推荐使用仲裁队列来实现高可用。)

docker exec -it rabbitmq01 bash
rabbitmqctl set_policy -p / ha "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/473290.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

孙赢利_11月17日_超分周报

一. 康佳PC端实现&#xff1a;1080 → 4K 实时超分 1. 将图像预处理操作从 CPU → GPU 运行 2. 后处理部分操作 从 CPU → GPU 运行 inference_realesrgan_Animal_Video.py import argparse import cv2 import glob import os from basicsr.archs.rrdbnet_arch import RRDBNe…

录的视频怎么消除杂音?从录制到后期的杂音消除攻略

在录制视频时&#xff0c;杂音往往是一个令人头疼的问题。无论是环境噪音、设备噪音还是电磁干扰&#xff0c;杂音的存在都会极大地影响视频的听觉体验。录的视频怎么消除杂音&#xff1f;通过一些前期准备和后期处理技巧&#xff0c;我们可以有效地消除这些杂音&#xff0c;提…

论文《基于现实迷宫地形的电脑鼠设计》深度分析——智能车驱动算法

论文概述 《基于现实迷宫地形的电脑鼠设计》是由吴润强、庹忠曜、刘文杰、项璟晨、孙科学等人于2023年发表的一篇优秀期刊论文。其针对现阶段电脑鼠计算量庞大且不适用于现实迷宫地形的问题&#xff0c;特基于超声波测距与传统迷宫算法原理&#xff0c;设计出一款可在现实迷宫地…

算法日记 26-27day 贪心算法

接下来的题目有些地方比较相似。需要注意多个条件。 题目&#xff1a;分发糖果 135. 分发糖果 - 力扣&#xff08;LeetCode&#xff09; n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每…

vue3点击按钮el-dialog对话框不显示问题

vue3弹框不显示问题&#xff0c;控制台也没报错 把 append-to-body:visible.sync"previewDialogOpen" 改为 append-to-bodyv-model"previewDialogOpen" 就好了。

wordpress使用相关

这里写目录标题 遇到的相关问题WordPress安装插件过程中遇到需要ftp出现确实XMLReader 插件的提示cURL Support Missing&#xff08;curl 缺失&#xff09; 遇到的相关问题 WordPress安装插件过程中遇到需要ftp 一般在这个位置 出现确实XMLReader 插件的提示 解决&#xff1a…

21.3D surface

3D surface """ File : 05-decoding-Major Name : 3d_surface.py Author : lyq Date : 2024/11/16 23:10 Envi : PyCharm Description: files details """ import numpy as np import matplotlib.pyplot as plt# 设置全局默认字体…

ARM(安谋) China处理器

0 Preface/Foreword 0.1 参考博客 Cortex-M23/M33与STAR-MC1星辰处理器 ARM China&#xff0c;2018年4月established&#xff0c;独立运行。 1 处理器类型 1.1 周易AIPU 1.2 STAR-MC1&#xff08;星辰处理器&#xff09; STAT-MC1&#xff0c;主要为满足AIOT应用性能、功…

windows C#-异步编程概述(二)

不要阻塞&#xff0c;而要等待 上述代码演示了一种不好的做法&#xff1a;构建同步代码来执行异步操作。正如所写&#xff0c;此代码会阻止执行它的线程执行任何其他工作。在任何任务正在进行时&#xff0c;它都不会被中断。这就像你把面包放进去后盯着烤面包机一样。你会忽略…

【Android原生问题分析】夸克、抖音划动无响应问题【Android14】

1 问题描述 偶现问题&#xff0c;用户打开夸克、抖音后&#xff0c;在界面上划动无响应&#xff0c;但是没有ANR。回到Launcher后再次打开夸克/抖音&#xff0c;发现App的界面发生了变化&#xff0c;但是仍然是划不动的。 2 log初分析 复现问题附近的log为&#xff1a; 用户…

【STM32】MPU6050简介

文章目录 MPU6050简介MPU6050关键块带有16位ADC和信号调理的三轴MEMS陀螺仪具有16位ADC和信号调理的三轴MEMS加速度计I2C串行通信接口 MPU6050对应的数据手册&#xff1a;MPU6050 陀螺仪加速度计 链接: https://pan.baidu.com/s/13nwEhGvsfxx0euR2hMHsyw?pwdv2i6 提取码: v2i6…

【软件测试】设计测试用例的万能公式

文章目录 概念设计测试用例的万能公式常规思考逆向思维发散性思维万能公式水杯测试弱网测试如何进行弱网测试 安装卸载测试 概念 什么是测试用例&#xff1f; 测试⽤例&#xff08;Test Case&#xff09;是为了实施测试⽽向被测试的系统提供的⼀组集合&#xff0c;这组集合包…

使用 TensorFlow 实现 ZFNet 进行 MNIST 图像分类

ZFNet&#xff08;ZF-Net&#xff09;是由 Matthew Zeiler 和 Rob Fergus 提出的卷积神经网络架构&#xff0c;它在图像分类任务中取得了显著的效果。它在标准卷积神经网络&#xff08;CNN&#xff09;的基础上做了一些创新&#xff0c;例如优化了卷积核大小和池化策略&#xf…

如何让手机ip变成动态

在数字化浪潮中&#xff0c;手机已成为我们日常生活中不可或缺的一部分。无论是浏览网页、使用社交媒体还是进行在线购物&#xff0c;手机都扮演着举足轻重的角色。然而&#xff0c;在享受网络带来的便利时&#xff0c;我们也需要关注网络安全和隐私保护。静态IP地址可能让手机…

前端三大组件之CSS,三大选择器,游戏网页仿写

回顾 full stack全栈 Web前端三大组件 结构(html) 样式(css) 动作/交互(js) --- 》 框架vue&#xff0c;安哥拉 div 常用的标签 扩展标签 列表 ul/ol order——有序号 unordered——没序号的黑点 <!DOCTYPE html> <html><head><meta charset"…

CPU执行指令的过程

通过前面两篇文章的介绍&#xff0c;我们已经认识到了&#xff1a;可执行程序通过作业调度装入内存&#xff0c;操作系统为进程创建虚拟地址空间&#xff0c;分配物理内存&#xff0c;建立页表&#xff08;映射关系&#xff09;&#xff0c;申请并初始化PCB&#xff0c;开始调度…

【MySQL】InnoDB内存结构

目录 InnoDB内存结构 主要组成 缓冲池 缓冲池的作用 缓冲池的结构 缓冲池中页与页之间连接方式分析 缓冲池如何组织数据 控制块初始化 页面初始化 缓冲池中页的管理 缓冲区淘汰策略 查看缓冲池信息 总结 变更缓冲区-Chang Buffer 变更缓冲区的作用 主要配置选项…

论文笔记 SuDORMRF:EFFICIENT NETWORKS FOR UNIVERSAL AUDIO SOURCE SEPARATION

SUDORMRF: EFFICIENT NETWORKS FOR UNIVERSAL AUDIO SOURCE SEPARATION 人的精神寄托可以是音乐&#xff0c;可以是书籍&#xff0c;可以是运动&#xff0c;可以是工作&#xff0c;可以是山川湖海&#xff0c;唯独不可以是人。 Depthwise Separable Convolution 深度分离卷积&a…

SpringBoot+React养老院管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.入住合同文件上传2.添加和修改套餐的代码3.查看入住记录代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBootReact框架开发的养老院管理系统。首先…

w039基于Web足球青训俱乐部管理后台系统开发

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…