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

devtools/2025/1/15 6:21:32/

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.0container_name: redis-7001ports:- "7001:7001"- "17001:17001"volumes:- ./7001/data:/data- ./7001/redis.conf:/etc/redis/redis.confcommand: redis-server /etc/redis/redis.confnetworks:- redis-clusterrestart: alwaysredis-7002:image: redis:6.0container_name: redis-7002ports:- "7002:7002"- "17002:17002"volumes:- ./7002/data:/data- ./7002/redis.conf:/etc/redis/redis.confcommand: redis-server /etc/redis/redis.confnetworks:- redis-clusterrestart: alwaysnetworks: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-portsfirewall-cmd --zone=public --add-port=7001/tcp  --add-port=7002/tcp --add-port=17001/tcp --add-port=17002/tcp --permanent
firewall-cmd --reloadfirewall-cmd --zone=public --add-port=7003/tcp  --add-port=7004/tcp --add-port=17003/tcp --add-port=17004/tcp --permanent
firewall-cmd --reloadfirewall-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 容器部署 Redis 实例,每台服务器配置两个 Redis 容器,一个主节点,一个从节点。
使用 Docker Compose 管理每台服务器上的 Redis 实例。
配置 Redis 集群时,可以通过 redis-cli --cluster create 命令来创建集群。
Redis 集群成功创建后,可以通过 cluster nodes 命令验证集群状态。
使用上述步骤,你可以在 CentOS 上安装并成功配置一个包含 6 个节点的 Redis 集群,分布在 3 台服务器 上。


http://www.ppmy.cn/devtools/150241.html

相关文章

手游业务该如何选择服务器?

在网络游戏行业当中,对于服务器配置的需求是非常高的,大型的网络游戏需要服务器的高稳定性,来保证用户的游戏体验感,那么对于手游业务来说该如何进行选择服务器呢? 手游业务通常都需要处理大量的用户数据信息和并发请求…

Flutter中Get.snackbar避免重复显示的实现

在pubspec.yaml中引入依赖框架。 #GetX依赖注解get: ^4.6.5创建一个SnackBarManager管理类去管理每个提示框。 import package:get/get.dart; import package:flutter/material.dart;class SnackBarManager {factory SnackBarManager() > instance;static final SnackBarMa…

代理模式详解与应用

代理模式(Proxy Pattern),也称为委托模式或 surrogate 模式,是一种结构型设计模式。它为其他对象提供一个代理以控制对这个对象的访问。通过引入代理对象,可以在不改变原始对象接口的前提下,添加额外的功能…

ue5玩家角色添加武器。切换武器位置,手上武器放到背上。演示一下人体插槽和武器的连接。仅仅演示,实际项目不是这么用的

把第一人称资源包导进来 这就是我们枪的骨骼网格体 我们找到这个骨骼 右手添加插槽 取个名字 因为武器上也有动画,所有武器单独写个蓝图类 新建一个蓝图类 BP_Weapon 把枪的蓝图拖到人的静态网格体下,成为一个部分 选中BP_Weapon的父类套接字…

计算机网络之---网络层的基本功能

网络层简述 网络层(Network Layer)是OSI(开放系统互联)模型的第三层,主要负责将数据包从源主机传输到目的主机,处理数据传输过程中的路由选择、寻址和分段等任务。网络层的主要目的是确保数据能够从源设备准…

VSCode 插件

VSCode 插件 1. GitHub Copilot - AI 代码助手 功能:根据上下文提供实时代码补全,支持自然语言转代码,提供符合现代编程规范的建议。进阶技巧: 使用快捷键 Alt ] 切换多个建议。写注释时,描述业务逻辑而不是具体实现…

对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察

近日,张圣航被推选为 Apache SeaTunnel 的 Committer成员。带着对技术的热情和社区的责任,他将如何跟随 Apache SeaTunnel 社区迈向新的高度?让我们一起来聆听他的故事。 自我介绍 请您简单介绍一下自己,包括职业背景、当前的工作…

linux内存泄露定位过程(kmemleak和slab debug)

1,当遇到内存增加过多时,或者由于内存导致系统oom时我们怎么定位呢,定位时需要确认是内核态还是用户态内存泄露。 排查步骤 top查看VIRT和RES内存 rootubuntu2004:~# top top - 21:05:39 up 7 min, 1 user, load average: 5.01, 4.09, 2.…