使用docker搭建本地集群Redis服务(参考:https://www.cnblogs.com/slowbirdoflsh/p/11633113.html)

环境配置

  # 拉取redis镜像

docker  pull  redis

  # 查看镜像详情

docker inspect redis

创建redis集群网络

docker  network  create  redis-cluster-net

集群挂在目录配置

1. 开启6个节点, 3对主从节点搭建集群

2. 开放7000-7005端口, 根据端口创建6个目录, 每个目录下创建data目录和配置文件redis-{port}.conf

3. 配置模板文件redis-cluster.tmpl

# 基本配置

## 开放端口

port ${port}

## 不作为守护进程

daemonize no

## 启用aof持久化模式

appendonly yes

# 集群配置

## 开启集群配置

cluster-enabled yes

## 存放集群节点的配置文件 系统自动建立

cluster-config-file nodes-${port}.conf

## 节点连接超时时间

cluster-node-timeout 50000  

## 实际为各节点网卡分配ip

cluster-announce-ip ${ip}

## 节点映射端口

cluster-announce-port ${port}

## 节点总线端口

cluster-announce-bus-port 1${port}

cluster-slave-validity-factor 10

cluster-migration-barrier 1

初始化redis集群目录脚本(init.sh):

#!/bin/bash

dir_redis_cluster='/home/lanlang/redis/redis-cluster'

gateway='172.18.0.1'

idx=1

for port in `seq 7000 7005`; do

mkdir -p ${dir_redis_cluster}/${port}/data;

idx=$(($idx+1));

port=${port} ip=`echo ${gateway} | sed "s/1$/$idx/g"` \

envsubst < ${dir_redis_cluster}/redis-cluster.tmpl \

> ${dir_redis_cluster}/${port}/redis-${port}.conf

done

执行init.sh之后创建目录

查看生成的redis配置文件:

集群搭建

启动脚本(start.sh):

#!/bin/bash

dir_redis_cluster='/home/lanlang/redis/redis-cluster'

for port in `seq 7000 7005`; do

docker run --name redis-${port} --net redis-cluster-net -d \

-p ${port}:${port} -p 1${port}:1${port} \

-v ${dir_redis_cluster}/${port}/data:/data \

-v ${dir_redis_cluster}/${port}/redis-${port}.conf:/usr/local/etc/redis/redis.conf redis \

redis-server /usr/local/etc/redis/redis.conf

done

执行完成:

查看启动的服务:

docker ps

查看集群功能是否开启:

docker  exec  -it  redis-7000  redis-cli  -p 7000  info  cluster

节点连接:

docker exec -it redis-7000 redis-cli -p 7000 cluster meet 172.18.0.3 7001

docker exec -it redis-7000 redis-cli -p 7000 cluster meet 172.18.0.4 7002

docker exec -it redis-7000 redis-cli -p 7000 cluster meet 172.18.0.5 7003

docker exec -it redis-7000 redis-cli -p 7000 cluster meet 172.18.0.6 7004

docker exec -it redis-7000 redis-cli -p 7000 cluster meet 172.18.0.7 7005 

查看节点并进行主从配置:

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

配置7001节点为7000节点的从节点

docker exec -it redis-7001 redis-cli -p 7001 cluster replicate bbf710160c18a6267428714e887b33a04e557235

配置7003节点为7002节点的从节点

docker exec -it redis-7003 redis-cli -p 7003 cluster replicate 0c29ac82d4dbb68d48909906a902719cf05ca191

配置7005节点为7004节点的从节点

redis-cluster]# docker exec -it redis-7005 redis-cli -p 7005 cluster replicate c813df11ff91f18c49dd0931b4d5dcca3c43df9f

查看节点:

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

slots分配:

将16384个槽分配到3个主节点中每个节点平均分5461个槽

docker exec -it redis-7000 redis-cli -p 7000 cluster addslots {0..5460} # 7002 5461~10920 

docker exec -it redis-7002 redis-cli -p 7002 cluster addslots {5461..10920} # 7004 10920~16383 

docker exec -it redis-7004 redis-cli -p 7004 cluster addslots {10921..16383} 

查看集群情况:

docker  exec  -it  redis-7000 redis-cli  -p 7000 cluster info

查看槽点情况:

docker  exec  -it  redis-7000  redis-cli  -p 7000  cluster  slots

测试:

  docker  exec -it redis-7000 redis-cli  -c -p 7000

常见问题:

  1. 在启动redis服务的时候,WARNING: IPv4 forwarding is disabled. Networking will not work

vim /etc/sysctl.conf

新增
net.ipv4.ip_forward=1 重启network
systemctl restart network 查看
sysctl net.ipv4.ip_forward

Redis集群搭建-Docker的更多相关文章

  1. Docker Swarm redis 集群搭建

    Docker Swarm redis 集群搭建 环境1: 系统:Linux Centos 7.4 x64 内核:Linux docker 3.10.0-693.2.2.el7.x86_64 Docke ...

  2. 基于Dokcer搭建Redis集群搭建(主从集群)

    最近陆陆续续有不少园友加我好友咨询 redis 集群搭建的问题,我觉得之前写的这篇 <基于Docker的Redis集群搭建> 文章一定是有问题了,所以我花了几分钟浏览之前的文章总结了下面几 ...

  3. 25.redis集群搭建笔记

    ###Redis集群### 0.准备 软件: redis-3.0.0.gem redis-3.0.0.tar.gz#源码   1.安装ruby环境 redis基于ruby槽位计算,hash算法技术,k ...

  4. Redis 集群搭建详细指南

    先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公司?我的回答都是大城市!大公司! 为什么这么说呢,你想一下,无论女孩男孩找朋友都喜欢找个子高胸大的.同样的道理嘛 ...

  5. 二、redis集群搭建

    redis集群搭建 redis3.0后支持集群.集群中应该至少有三个节点,每个节点有一备份节点.需要6台服务器.搭建伪分布式,需要6个redis实例.搭建集群的步骤: 一.安装单机版redis 第一步 ...

  6. redis集群搭建及注意事项

    上一篇:redis的安装及注意事项 这里,在一个Linux虚拟机上搭建6个节点的redis伪集群,思路很简单,一台虚拟机上开启6个redis实例,每个redis实例有自己的端口.这样的话,相当于模拟出 ...

  7. Linux Redis集群搭建与集群客户端实现(Python)

    硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...

  8. [转载] Redis集群搭建最佳实践

    转载自http://blog.csdn.net/sweetvvck/article/details/38315149?utm_source=tuicool 要搭建Redis集群,首先得考虑下面的几个问 ...

  9. Linux Redis集群搭建与集群客户端实现

    硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...

  10. Redis集群搭建-韩国庆

    认真一步一步搭建下来,就可以成功.... Redis-cluster集群架构讲解 redis集群专业名词称之为Redis-cluster,redis集群是从3.0版本以后才有的概念,也就是说在3.0之 ...

随机推荐

  1. SSD-KD:天翼云&清华出品,最新无原始数据的蒸馏研究 | CVPR'24

    无数据知识蒸馏能够利用大型教师网络所学到的知识,来增强较小型学生网络的训练,而无需访问原始训练数据,从而避免在实际应用中的隐私.安全和专有风险.在这方面的研究中,现有的方法通常遵循一种反演蒸馏的范式, ...

  2. 记录一次BOOST库相关的使用包含互斥量、条件变量的类,引发的编译报错

    1. 工作中的代码: 2. 使用指针作为形参,不会造成编译报错,我是可以理解的. 那么请讨论下为什么使用值传递和引用作为形参,会造成编译报错? 3. 答案揭晓 boost 的mutex源码: 最终原因 ...

  3. 反问面试官3个ThreadLocal的问题

    ThreadLocal,一个Java人面试绕不开的话题,我也很奇怪为什么那些面试官很喜欢问这个,也不知道他们自己有没有搞清楚. 接下来,我想先说说ThreadLocal的用法和使用场景,然后反问面试官 ...

  4. 第44天:WEB攻防-PHP应用&SQL盲注&布尔回显&延时判断&报错处理&增删改查方式

    #PHP-MYSQL-SQL操作-增删改查 1.功能:数据查询 查询:SELECT * FROM news where id=$id 2.功能:新增用户,添加新闻等 增加:INSERT INTO ne ...

  5. PRT预计算辐射传输方法

    PRT(Precomputed Radiance Transfer)技术是一种用于实时渲染全局光照的方法.它通过预计算光照传输来节省时间,并能够实时重现面积光源下3D模型的全局光照效果. 由于PRT方 ...

  6. C# 的显示转换 *.Parse(string) Convert.ToInt32(double value)

    // 显式转换 (类型) /// (int)表示使用强制的显示转换,是一种类型转换,C#默认的整形是 int32 , /// 因此使用此方法转成int32 不遵循四舍五入,直截取整数部分 /// (i ...

  7. 00 通过 Pytorch 实现 Transformer 框架完整代码

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  8. Win11使用Translucent TB设置Windows导航栏透明失败解决方案

    Win11使用Translucent TB设置Windows导航栏透明失败解决方案 Translucent TB下载方式:直接在Windows自带的Microsoft应用商店里面搜索下载就可以了 1. ...

  9. KubeSphere DevOps 系统功能实战

    James,Java 工程师,喜欢学习和记录当下热门技术并验证其优势和缺点,以及当下火热的云原生解决方案的实施与推广. 前言 基于 Jenkins 的 KubeSphere DevOps 系统是专为 ...

  10. Java 如何确保 JS 不被缓存

    大家好,我是 V 哥.今天咱们来聊一聊 Java 后端确保 JavaScript 不被缓存的问题,先来了解一下为什么需要这样做,通常源于以下几种场景或问题: 1. 先来看几个问题 1. 文件更新后无法 ...