三台Centos7.9中Docker部署Redis集群模式

Docker部署Redis集群模式

  • 1. 安装 Docker 和 Docker Compose
    • 安装 Docker:
    • 安装 Docker Compose:
  • 2. 配置 Redis 容器和网络
  • 3. 启动 Redis 容器
  • 4. 设置 Redis 集群
    • 4.1 集群创建异常处理
  • 5. 验证和测试
    • 数据测试:
    • 集群上下线测试:
  • 部署总结

如果 CentOS 服务器上还没有安装 Docker 和 Docker Compose,请按照以下步骤安装。

1. 安装 Docker 和 Docker Compose

安装 Docker:

# 更新系统
sudo yum update -y

# 安装 Docker 依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 安装 Docker
sudo yum install -y docker

# 启动 Docker 服务
sudo systemctl start docker

# 设置 Docker 开机启动
sudo systemctl enable docker

# 检查 Docker 是否安装成功
docker --version

安装 Docker Compose:

  • 若次步骤觉得太慢,建议使用github自行下载后安装

# 自行安装使用这个,反之使用下面的
# mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

# 下载最新版本的 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 给 Docker Compose 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 检查安装版本
docker-compose --version

2. 配置 Redis 容器和网络

在 CentOS 上,创建每台服务器所需的 Redis 配置 和 Docker 网络,确保各容器之间的网络连接。

假设你有三台服务器,Server 1、Server 2 和 Server 3,每台服务器运行两个 Redis 实例。需要做以下操作:

第一步:为每台服务器创建 docker-compose.yml 配置文件
在 Server 1、Server 2 和 Server 3 上创建和配置 docker-compose.yml 文件。

配置文件示例:
创建一个目录,并进入该目录:

mkdir ~/redis-cluster
cd ~/redis-cluster

docker-compose.yml 示例:

version: '3'

services:
  redis-7001:
    image: redis:6.0
    container_name: redis-7001
    ports:
      - "7001:7001"
      - "17001:17001"
    volumes:
      - ./7001/data:/data
      - ./7001/redis.conf:/etc/redis/redis.conf
    command: redis-server /etc/redis/redis.conf
    networks:
      - redis-cluster
    restart: always

  redis-7002:
    image: redis:6.0
    container_name: redis-7002
    ports:
      - "7002:7002"
      - "17002:17002"
    volumes:
      - ./7002/data:/data
      - ./7002/redis.conf:/etc/redis/redis.conf
    command: redis-server /etc/redis/redis.conf
    networks:
      - redis-cluster
    restart: always

networks:
  redis-cluster:
    driver: bridge

redis.conf实例:

# 绑定所有网络接口,允许外部机器连接
bind 0.0.0.0
# 设置节点的端口(为每个节点配置不同端口)
port 7001
cluster-enabled yes
# 节点的集群配置文件
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
maxclients 10000
# 不进行持久化存储,节省资源
save ""
# 禁用 append-only 文件持久化
appendonly no
protected-mode no
loglevel notice
logfile ""
# 集群的对外配置(announce 是告知外部客户端的节点地址)
cluster-announce-ip 192.168.15.128
cluster-announce-port 7001
cluster-announce-bus-port 17001

修改配置:
在 Server 2 和 Server 3 上修改 docker-compose.yml 文件,调整每台服务器上的端口。例如:

Server 2:redis-7003 和 redis-7004
Server 3:redis-7005 和 redis-7006

3. 启动 Redis 容器

创建并启动 Docker 容器:
在每台服务器上,执行以下命令以启动 Redis 容器。

docker-compose up -d

这将会根据配置创建并启动 Redis 容器。

使用 docker ps 可以查看正在运行的容器:

docker ps

检查容器启动状态:
在每台服务器上,确认容器启动后没有错误。

4. 设置 Redis 集群

当所有 Redis 容器在三台服务器上运行并可以互相通信时,我们将通过 redis-cli 创建一个 Redis 集群。

创建 Redis 集群:
在任意一台服务器(如 Server 1)上执行以下命令,创建 Redis 集群:

docker exec -it redis-7001 redis-cli --cluster create \
192.168.15.128:7001 192.168.15.128:7002 \
192.168.15.129:7003 192.168.15.129:7004 \
192.168.15.130:7005 192.168.15.130:7006 \
--cluster-replicas 1

这里 192.168.15.128:7001、192.168.15.129:7003 和 192.168.15.130:7005 是主节点,7002、7004、7006 是它们的从节点。
–cluster-replicas 1 表示为每个主节点设置一个从节点。
根据提示输入 yes,完成集群创建。

4.1 集群创建异常处理

搭建Redis集群的过程中,执行到cluster create : … 的时候,发现程序发生阻塞,显示:Waiting for the cluster to join 的字样,然后就无休无尽的等待…

解决方案:

  • 关注点1:防火墙的问题,记得开放防火墙
  • 关注点2:Redis集群需要关注如下内容:

集群总线
每个Redis集群中的节点都需要打开两个TCP连接。一个连接用于正常的给Client提供服务,比如6379,还有一个额外的端口(通过在这个端口号上加10000)作为数据端口,例如:redis的端口为6379,那么另外一个需要开通的端口是:6379 + 10000, 即需要开启 16379。16379端口用于集群总线,这是一个用二进制协议的点对点通信信道。这个集群总线(Cluster bus)用于节点的失败侦测、配置更新、故障转移授权,等等。

firewall-cmd --list-ports

firewall-cmd --zone=public --add-port=7001/tcp  --add-port=7002/tcp --add-port=17001/tcp --add-port=17002/tcp --permanent
firewall-cmd --reload

firewall-cmd --zone=public --add-port=7003/tcp  --add-port=7004/tcp --add-port=17003/tcp --add-port=17004/tcp --permanent
firewall-cmd --reload

firewall-cmd --zone=public --add-port=7005/tcp  --add-port=7006/tcp --add-port=17005/tcp --add-port=17006/tcp --permanent
firewall-cmd --reload

验证集群:

创建完成后,可以在任意节点执行以下命令查看集群状态:

docker exec -it redis-7001 redis-cli -p 7001 cluster nodes

5. 验证和测试

查看集群节点,确认每个节点是否分配了槽,并且是主从配置。
对集群进行基本的增删改查操作,确保每个节点之间的数据同步。

数据测试:

向集群写入数据:

docker exec -it redis-7001 redis-cli -c -p 7001 set key1 "value1"

从其他节点读取数据:

docker exec -it redis-7002 redis-cli -c -p 7002 get key1

集群上下线测试:

  • 集群下线测试:
docker stop redis-7001
#或者
#使用cluster 原生命令(自行百度)
  • 集群角色查看:
docker exec -it redis-7002 redis-cli -p 7002 cluster nodes

等到集群连接时间超时后,redis-7001的salve节点,升级为master

  • 集群上线测试:
docker start redis-7001
#或者
#使用cluster 原生命令(自行百度)

部署总结

你需要在每台服务器上使用 Docker 容器部署 Redis 实例,每台服务器配置两个 Redis 容器,一个主节点,一个从节点。
使用 Docker Compose 管理每台服务器上的 Redis 实例。
配置 Redis 集群时,可以通过 redis-cli --cluster create 命令来创建集群。
Redis 集群成功创建后,可以通过 cluster nodes 命令验证集群状态。
使用上述步骤,你可以在 CentOS 上安装并成功配置一个包含 6 个节点的 Redis 集群,分布在 3 台服务器 上。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

centos9设置静态ip

CentOS 9 默认使用 NetworkManager 管理网络,而nmcli是 NetworkManager 命令行接口的缩写,是一个用来进行网络配置、管理网络连接的命令工具,可以简化网络设置,尤其是在无头(没有图形界面)环境下。 1、 cd…

Idea日志乱码

问题描述 前提:本人使用windows Idea运行sh文件,指定了utf-8编码,但是运行过程中还是存在中文乱码 Idea的相关配置都已经调整 字体调整为雅黑 文件编码均调整为UTF-8 调整Idea配置文件 但是还是存在乱码,既然Idea相关配置已经…

R4-LSTM学习笔记

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 LSTM-火灾温度预测 导入数据数据可视化设置X、y构建模型调用模型个人总结LSTM 的基本结构细胞状态(Cell State)LSTM 的优点 导入数据 i…

uniapp实现H5页面内容居中与两边留白,打造类似微信公众号阅读体验

在 UniApp 中,由于需要兼容多端应用,我们通常使用 rpx 作为尺寸单位。然而,在某些情况下,如需要实现内容居中且两边留白时,直接使用 rpx 可能会带来一些限制。这时,我们可以考虑使用 px 或 rem 等单位&…

网工_网络体系结构

2024.01.09:网络工程学习笔记(网工老姜) 第1节 网络体系结构 1.1 计算机一切皆011.2 网络协议1.3 协议的分层模型1.4 主机1向主机2发送数据过程1.5 本章小结 1.1 计算机一切皆01 在计算机内部,所有的数据最终都是以01的方式存在的…

CI/CD 流水线

CI/CD 流水线 CI 与 CD 的边界CI 持续集成CD(持续交付/持续部署)自动化流程示例: Jenkins 引入到 CI/CD 流程在本地或服务器上安装 Jenkins。配置 Jenkins 环境流程设计CI 阶段:Jenkins 流水线实现CD 阶段:Jenkins 流水…

编程题-二分查找

题目: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1 解法一(循环遍历查找)&#xff…

OOM排查思路

K8S 容器的云原生生态,改变了服务的交付方式,自愈能力和自动扩缩等功能简直不要太好用。 有好的地方咱要夸,不好的地方咱也要说,真正的业务是部署于容器内部,而容器之外,又有一逻辑层 Pod 。 对于容器和…

Github Copilot学习笔记

(一)Prompt Engineering 利用AI工具生成prompt设计好的prompt结构使用MarkDown语法,按Role, Skills, Constrains, Background, Requirements和Demo这几个维度描述需求。然后收输入提示词:作为 [Role], 拥有 [Skills], 严格遵守 […

在 Rider 中使用 C# 创建 Windows 窗体应用 Winforms

1,创建项目 new solution 创建一个解决方案 2,打开设计器 在 Form1.cs 上右键打开设计器 认识一下 Rider 的界面 参考微软官方的例子,添加如下属性:注:这里 Listbox 的大小设置成 120, 94 失败,默认的是 12…

R数据分析:多分类问题预测模型的ROC做法及解释

有同学做了个多分类的预测模型,结局有三个类别,做的模型包括多分类逻辑回归、随机森林和决策树,多分类逻辑回归是用ROC曲线并报告AUC作为模型评估的,后面两种模型报告了混淆矩阵,审稿人就提出要统一模型评估指标。那么肯定是统一成ROC了,刚好借这个机会给大家讲讲ROC在多…

#Java-集合进阶-Map

1.Map 声明1 1.1 双列集合的特点 单列集合一次只能添加一个元素,双列集合一次可以添加一对元素 例: 小米手机2000华为手机5000苹果手机9000 这三对元素,左边的我们称之为键,右边的称为值。他们是一一对应的关系 所以双列集合中…

IntelliJ IDEA和MAVEN基本操作:项目和缓存存储到非C盘

为了将 IntelliJ IDEA 的所有项目和缓存存储到 C 盘以外的地方,以下是你需要调整的设置和步骤: 1. 更改项目默认存储位置 打开 IntelliJ IDEA。点击顶部菜单的 File > Settings (Windows)或 IntelliJ IDEA > Preferences &…

【Linux系列】`find / -name cacert.pem` 文件搜索

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

RabbitMQ基础(简单易懂)

RabbitMQ高级篇请看: RabbitMQ高级篇-CSDN博客 目录 什么是RabbitMQ? MQ 的核心概念 1. RabbitMQ 的核心组件 2. Exchange 的类型 3. 数据流向说明 如何安装RabbitQueue? WorkQueue(工作队列): Fa…

《Spring Framework实战》5:Spring Framework 概述

欢迎观看《Spring Framework实战》视频教程 Spring 使创建 Java 企业应用程序变得容易。它为您提供一切 需要在企业环境中采用 Java 语言,并支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以灵活地创建许多 类型的架构。从 Spring Framework 6.0 开…

有限元分析学习——Anasys Workbanch第一阶段笔记(10)桌子载荷案例分析_实际载荷与均布载荷的对比

目录 0 序言 1 桌子案例 2 模型简化 3 方案A 前处理 1)分析类型选择 2)材料加载 3)约束、载荷及接触 4)控制网格(网格大小需要根据结果不断调整) 初始计算结果 加密后计算结果 4 方案B、C 前处理 1)分析…

Git 基础——《Pro Git》

⭐获取 Git 仓库 获取 Git 仓库有两种方式: 将未进行版本控制的本地目录转换为 Git 仓库。从其他服务器克隆一个已存在的 Git 仓库。 在已存在目录中初始化 Git 仓库 进入目标目录 在 Linux 上:$ cd /home/user/my_project在 macOS 上:$ c…

Java 将RTF文档转换为Word、PDF、HTML、图片

RTF文档因其跨平台兼容性而广泛使用,但有时在不同的应用场景可能需要特定的文档格式。例如,Word文档适合编辑和协作,PDF文档适合打印和分发,HTML文档适合在线展示,图片格式则适合社交媒体分享。因此我们可能会需要将RT…

R语言在森林生态研究中的魔法:结构、功能与稳定性分析——发现数据背后的生态故事!

森林生态系统结构、功能与稳定性分析与可视化研究具有多方面的重要意义,具体如下: 一、理论意义 ●深化生态学理论 通过研究森林生态系统的结构、功能与稳定性,可以深化对生态系统基本理论的理解。例如,生物多样性与生态系统稳定性…