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

news2025/1/14 4:43:49

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 台服务器 上。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ros2笔记-6.2 使用urdf创建机器人模型

本节主要跟着小鱼老师的视频操作,不同的仿真平台有不同的建模语言,但是几乎都支持URDF。 本节使用URDF创建一个机器人模型。 6.2.1 帮机器人创建一个身体 URDF使用XML来描述机器人的结构和传感器、执行器等信息。 在chapt6/chap6_ws/src创建功能包:r…

基于mybatis-plus历史背景下的多租户平台改造

前言 别误会,本篇【并不是】 要用mybatis-plus自身的多租户方案:在表中加一个tenant_id字段来区分不同的租户数据。并不是的! 而是在假设业务系统已经使用mybatis-plus多数据源的前提下,如何实现业务数据库隔开的多租户系统。 这…

【JAVA基础】Collections方法的具体使用方法

java基础中Collections及collect(toList,toSet,toMap)的用法 package com.gaofeng;import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream;public class demo01 {public static void main(String[] …

HDFS 的API的操作

3.1 客户端环境准备(windows) 1)拷贝hadoop-3.1.X到非中文路径(比如d:\)。 2)配置HADOOP_HOME环境变量 3)配置Path环境变量。 注意:如果环境变量不起作用,可以重启电脑试试。 也可以直接添加…

【数据库】二、关系数据库

文章目录 二、关系数据库1 关系2 关系数据库3 完整性约束4 关系运算 二、关系数据库 1 关系 域:一组具有相同数据类型的值的集合。 笛卡尔积:所有域(域可相同)中所有取值的组合 例如:D1{1,2,3},D2{A,b}&…

[笔记] 使用 Jenkins 实现 CI/CD :从 GitLab 拉取 Java 项目并部署至 Windows Server

随着软件开发节奏的加快,持续集成(CI)和持续部署(CD)已经成为确保软件质量和加速产品发布的不可或缺的部分。Jenkins作为一款广泛使用的开源自动化服务器,为开发者提供了一个强大的平台来实施这些实践。然而…

playwright 模拟登录

一、流程如下 C#代码: using Microsoft.Playwright; using Newtonsoft.Json; using System; using System.IO; using System.Net.Http; using System.Text; using System.Xml.Linq;namespace TestProject3 {[TestClass]public class UnitTest1 : PageTest{[TestMet…

使用大数据分析提升电子商务的转化率

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

HTB:Bastion[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用enum4linux…

HAMi + prometheus-k8s + grafana实现vgpu虚拟化监控

最近长沙跑了半个多月,跟甲方客户对了下项目指标,许久没更新 回来后继续研究如何实现 grafana实现HAMi vgpu虚拟化监控,毕竟合同里写了需要体现gpu资源限制和算力共享以及体现算力卡资源共享监控 先说下为啥要用HAMi吧, 一个重要原…

springboot使用Easy Excel导出列表数据为Excel

springboot使用Easy Excel导出列表数据为Excel Easy Excel官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write 主要记录一下引入时候的pom&#xff0c;直接引入会依赖冲突 解决方法&#xff1a; <!-- 引入Easy Excel的依赖 -->&l…

泛目录和泛站有什么差别

啥是 SEO 泛目录&#xff1f; 咱先来说说 SEO 泛目录是啥。想象一下&#xff0c;你有一个巨大的图书馆&#xff0c;里面的书架上摆满了各种各样的书&#xff0c;每一本书都代表着一个网页。而 SEO 泛目录呢&#xff0c;就像是一个超级图书管理员&#xff0c;它的任务就是把这些…

黑马天机学堂学习计划模块

核心功能 系统设计思路 ​​​​​​​ 代码分析 1. 学习记录管理 • 存储学习记录到 Redis&#xff1a; 利用 Redis 缓存学习记录&#xff0c;减少频繁的数据库访问。 public void writeRecordCache(LearningRecord record) {String key String.format("LEARNING:R…

初学stm32 --- DAC输出三角波和正弦波

输出三角波实验简要&#xff1a; 1&#xff0c;功能描述 通过DAC1通道1(PA4)输出三角波&#xff0c;然后通过DS100示波器查看波形 2&#xff0c;关闭通道1触发(即自动) TEN1位置0 3&#xff0c;关闭输出缓冲 BOFF1位置1 4&#xff0c;使用12位右对齐模式 将数字量写入DAC_…

专题 - STM32

基础 基础知识 STM所有产品线&#xff08;列举型号&#xff09;&#xff1a; STM产品的3内核架构&#xff08;列举ARM芯片架构&#xff09;&#xff1a; STM32的3开发方式&#xff1a; STM32的5开发工具和套件&#xff1a; 若要在电脑上直接硬件级调试STM32设备&#xff0c;则…

25年无人机行业资讯 | 1.1 - 1.5

25年无人机行业资讯 | 1.1 - 1.5 中央党报《经济日报》刊文&#xff1a;低空经济蓄势待发&#xff0c;高质量发展需的平衡三大关系 据新华网消息&#xff0c;2025年1月3日&#xff0c;中央党报《经济日报》发表文章指出&#xff0c;随着国家发展改革委低空经济发展司的成立&a…

时序数据库InfluxDB—介绍与性能测试

目录 一、简述 二、主要特点 三、基本概念 1、主要概念 2、保留策略 3、连续查询 4、存储引擎—TSM Tree 5、存储目录 四、基本操作 1、Java-API操作 五、项目中的应用 六、单节点的硬件配置 七、性能测试 1、测试环境 2、测试程序 3、写入测试 4、查询测试 一…

计算机网络 (35)TCP报文段的首部格式

前言 计算机网络中的TCP&#xff08;传输控制协议&#xff09;报文段的首部格式是TCP协议的核心组成部分&#xff0c;它包含了控制TCP连接的各种信息和参数。 一、TCP报文段的结构 TCP报文段由首部和数据两部分组成。其中&#xff0c;首部包含了控制TCP连接的各种字段&#xff…

GelSight Mini视触觉传感器凝胶触头升级:增加40%耐用性,拓展机器人与触觉AI 应用边界

马萨诸塞州沃尔瑟姆-2025年1月6日-触觉智能技术领军企业Gelsight宣布&#xff0c;旗下Gelsight Mini视触觉传感器迎来凝胶触头的更新。经内部测试&#xff0c;新Gel凝胶触头耐用性提升40%&#xff0c;外观与触感与原凝胶触头保持一致。此次升级有效满足了客户在机器人应用中对设…

burpsiute的基础使用(2)

爆破模块&#xff08;intruder&#xff09;&#xff1a; csrf请求伪造访问&#xff08;模拟攻击&#xff09;: 方法一&#xff1a; 通过burp将修改&#xff0c;删除等行为的数据包压缩成一个可访问链接&#xff0c;通过本地浏览器访问&#xff08;该浏览器用户处于登陆状态&a…