环境安装

linux :centos 7

docker :19.03.3

docker-compose:1.24.1

创建目录和编排文件

1.在工作目录下创建目录redis

2.然后分别创建文件夹 6000-6005(以节点端口号命名的)

3.创建 docker-compose.yaml 文件

4.在各个端口目录下创建data目录和redis.conf配置文件

创建完成目录结构如下:

redis目录结构

各个端口目录结构,比如6000目录下

编写redis.conf 配置文件

#端口
port 6000##run in background 必须是no
daemonize no##enable redis-cluster
cluster-enabled yes##cluster node config file name
cluster-config-file nodes_6000.conf## timeout
tcp-keepalive 300
timeout 0##aof
appendonly yes#当daemonize = yes时候才会生效
pidfile /var/run/redis_6000.pid#log
#日志等级
loglevel notice
#日志文件存放路径
logfile "redis_6000.log"#集群对外ip
cluster-announce-ip 机器ip

每个节点的配置只需改变端口。

docker-compose.yaml 配置文件

version: '3.4'
services:node1:image: redis:5.0.5container_name: redis-node1restart: alwaysports:- 6000:6000- 16000:16000volumes:- /home/gwms/redis/6000/data:/data- /home/gwms/redis/6000:/usr/local/etc/rediscommand:redis-server /usr/local/etc/redis/redis.confnode2:image: redis:5.0.5container_name: redis-node2restart: alwaysports:- 6001:6001- 16001:16001volumes:- /home/gwms/redis/6001/data:/data- /home/gwms/redis/6001:/usr/local/etc/rediscommand:redis-server /usr/local/etc/redis/redis.confnode3:image: redis:5.0.5container_name: redis-node3restart: alwaysports:- 6002:6002- 16002:16002volumes:- /home/gwms/redis/6002/data:/data- /home/gwms/redis/6002:/usr/local/etc/rediscommand:redis-server /usr/local/etc/redis/redis.confnode4:image: redis:5.0.5container_name: redis-node4restart: alwaysports:- 6003:6003- 16003:16003volumes:- /home/gwms/redis/6003/data:/data- /home/gwms/redis/6003:/usr/local/etc/rediscommand:redis-server /usr/local/etc/redis/redis.confnode5:image: redis:5.0.5container_name: redis-node5restart: alwaysports:- 6004:6004- 16004:16004volumes:- /home/gwms/redis/6004/data:/data- /home/gwms/redis/6004:/usr/local/etc/rediscommand:redis-server /usr/local/etc/redis/redis.confnode6:image: redis:5.0.5container_name: redis-node6restart: alwaysports:- 6005:6005- 16005:16005volumes:- /home/gwms/redis/6005/data:/data- /home/gwms/redis/6005:/usr/local/etc/rediscommand:redis-server /usr/local/etc/redis/redis.conf

编写完成后,在redis目录下 执行 docker-compose up -d 启动容器。然后通过docker ps 命令查看redis进程是否正常,我在安装时候遇到一些坑,下文我会详细描述。

状态是up 就是启动正常了。

创建集群

目前只是启动了六个实例,并没有组成集群。

进入任意一个Redis节点容器,命令如下:

docker exec -it redis-node1 bash

继续执行以下命令创建集群:

redis-cli  --cluster create ip:6000 ip:6001 ip:6002 ip:6003 ip:6004 ip:6005 --cluster-replicas 1

其中ip 为服务器ip

命令执行结果如下:遇到yes 选择yes。

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.35.30.39:6375 to 10.35.30.39:6371
Adding replica 10.35.30.39:6376 to 10.35.30.39:6372
Adding replica 10.35.30.39:6374 to 10.35.30.39:6373
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: e9a35d6a9d203830556de89f06a3be2e2ab4eee1 10.35.30.39:6371slots:[0-5460] (5461 slots) master
M: 0c8755144fe6a200a46716371495b04f8ab9d4c8 10.35.30.39:6372slots:[5461-10922] (5462 slots) master
M: fcb83b0097d2a0a87a76c0d782de12147bc86291 10.35.30.39:6373slots:[10923-16383] (5461 slots) master
S: b9819797e98fcd49f263cec1f77563537709bcb8 10.35.30.39:6374replicates fcb83b0097d2a0a87a76c0d782de12147bc86291
S: f4660f264f12786d81bcf0b18bc7287947ec8a1b 10.35.30.39:6375replicates e9a35d6a9d203830556de89f06a3be2e2ab4eee1
S: d2b9f265ef7dbb4a612275def57a9cc24eb2fd5d 10.35.30.39:6376replicates 0c8755144fe6a200a46716371495b04f8ab9d4c8
Can I set the above configuration? (type 'yes' to accept): yes # 这里输入 yes 并回车 确认节点 主从身份 以及 哈希槽的分配
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 10.35.30.39:6371)
M: e9a35d6a9d203830556de89f06a3be2e2ab4eee1 10.35.30.39:6371slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 0c8755144fe6a200a46716371495b04f8ab9d4c8 10.35.30.39:6372slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: b9819797e98fcd49f263cec1f77563537709bcb8 10.35.30.39:6374slots: (0 slots) slavereplicates fcb83b0097d2a0a87a76c0d782de12147bc86291
M: fcb83b0097d2a0a87a76c0d782de12147bc86291 10.35.30.39:6373slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: f4660f264f12786d81bcf0b18bc7287947ec8a1b 10.35.30.39:6375slots: (0 slots) slavereplicates e9a35d6a9d203830556de89f06a3be2e2ab4eee1
S: d2b9f265ef7dbb4a612275def57a9cc24eb2fd5d 10.35.30.39:6376slots: (0 slots) slavereplicates 0c8755144fe6a200a46716371495b04f8ab9d4c8
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

到目前为止集群就搭建完毕了,进入任意一个容器执行如下命令,查看集群状态

1.docker exec -it redis-node1 /bin/bash

2.redis-cli -p 6000 -h 173.17.0.1 cluster info

此时集群状态是 ok ,节点数也是正常的。

遇到的坑

1.redis.conf 配置文件中 daemonize 如果为yes会和 docker-compose.yaml中restart: always配置冲突,导致 执行 docker-compose up -d 命令后通过 docker ps查看redis进程一直在restaring中。

2.redis.conf 配置文件中“cluster-config-file” 和 “logfile”,之前配置了子目录,如下:

cluster-config-file config/nodes_6000.conf
logfile "log/redis_6000.log"

这样也同样会导致,启动时候无限重启的问题,目前我不知道怎么解决,只好去除了子目录。

这个大家有啥解决方案吗,希望大佬们留言告诉我。

去除子目录后,生成的这些文件都在容器的/data目录下,由于我们在docker-compose.yaml中对磁盘做了如下映射:

volumes:- /home/gwms/redis/6000/data:/data

所以这些生成的文件,我们可以在宿主机中的redis-> 端口文件夹->data中找到。

3.cluster-announce-ip 配置

第一次该配置没有写,结果是集群创建后,节点1 使用的是机器ip,而其他节点使用的是br-2a8667af806这个网卡的ip,导致的问题是,当客户端连接reids服务后,你设置一个key,如果路由到其他节点,此时连接的ip 会变成 该网卡的ip,从而客户端无法连接上,我们期望的是,路由后的节点ip依旧是是机器ip,所以我在redis.conf中加入了该配置,代表各个节点对外的ip地址是多少,从而解决了相关问题。

spring boot 集成redis

spring boot 项目中集成redis集群配置,进行简单的测试。

额外说明

1.restart: always 表示docker重启后,容器跟着一起重启,相当于开机启动。

2.boot 项目如果我们用了连接池,并且我们设置了:“连接池中的最小空闲连接”,那么服务启动完成后短暂延迟会会和各个节点创建 我们设置数量的连接,如果节点最大连接数 小于我们配置数,那么能创建多少创建多少。

docker-compose部署Redis-Cluster集群相关推荐

  1. 使用docker compose部署MySQL主从复制集群

    使用docker compose部署MySQL主从复制集群 环境说明 宿主机:Ubuntu 14.04.6 LTS Docker Engine: 18.06.3-ce docker compose: ...

  2. 基于Redis6.2.6版本部署Redis Cluster集群

    基于Redis6.2.6版本部署Redis Cluster集群 文章目录 基于Redis6.2.6版本部署Redis Cluster集群 1.Redis6.2.6简介以及环境规划 2.二进制安装Red ...

  3. centos7 docker-compose安装_Docker Compose 搭建 Redis Cluster 集群环境

    在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...

  4. Docker搭建3主3从Redis Cluster集群

    本文使用镜像由慕课网的神思者老师提供 本文使用镜像是已经配置好了的Redis镜像, 如果需要自定义可修改配置文件或用官方Redis镜像进行部署 1. 拉取配置好的Redis镜像 docker pull ...

  5. redis cluster 集群 HA 原理和实操(史上最全、面试必备)

    文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 ...

  6. 【故障演练】 Redis Cluster集群,当master宕机,主从切换,客户端报错 timed out

    大家好,我是Tom哥 性能不够,缓存来凑 一个高并发系统肯定少不了缓存的身影,为了保证缓存服务的高可用,我们通常采用 Redis Cluster 集群模式. 描述: 集群部署采用了 3主3从 拓扑结构 ...

  7. redis映射的概念_搭建分布式Redis Cluster集群与Redis入门

    目录 Redis 集群搭建Redis 是啥集群(Cluster)Redis Cluster 说明Redis Cluster 节点Redis Cluster 集群模式不能保证一致性创建和使用 Redis ...

  8. 使用DockerCompose部署Redis分片集群——整合SpringBoot

    今天来记录一下使用DockerCompose部署Redis分片集群的过程,前面写了几篇关于redis的博客了,这里就不再过多介绍了,直接上配置就好了 version: "3.0"s ...

  9. Ubuntu 16.04下Redis Cluster集群搭建(官方原始方案)

    前提:先安装好Redis,参考:http://www.cnblogs.com/EasonJim/p/7599941.html 说明:Redis Cluster集群模式可以做到动态增加节点和下线节点,使 ...

  10. k8s redis集群_基于K8S部署redis哨兵集群

    本 文 主 要 内 容 什么是Kubernetes分布式容器管理平台 PaaS平台redis-sentinel集群架构简介 PaaS平台部署redis哨兵集群 redis-sentinel容器测试及验 ...

最新文章

  1. 用MATLAB编程求出三位数中全部的水仙花数
  2. hazelcast 使用_使用Hazelcast发布和订阅
  3. Java语言最新实用案例教程_Java 语言实用案例教程
  4. AI 智能会议系统(36)---AI 书单
  5. Hbase高级功能过滤(Filter)
  6. Tomcat下载安装以及配置(详细教程)
  7. 全面剖析《自己动手写操作系统》第五章---makefile文件
  8. SAP各模块优缺点和发展简析
  9. Excel-REPT重复处理字符
  10. 超火壁纸!隐藏 Dock 栏+AirTag 渐变
  11. 关于安装jdk后为什么要配置环境变量的那些事
  12. python字典进行大写转化_python 字符串转大写_Python字符串大写()
  13. Ubuntu 安装 NVIDIA 显卡驱动详细步骤(ERROR: The Nouveau kernel driver is currently in use by your system)
  14. SpringMVC--国际化的三种方式详解(AcceptLanguageLocaleResolver、SessionLocaleResovler、CookieLocaleResolver)
  15. 2023最新爱蜗影视优码双端影视源码+支持代理/在线支付
  16. java集成showdoc文档生成
  17. SSH整合方式1——无障碍整合
  18. 打印机技术分析:IC芯片墨盒解密(多图)
  19. java if在内存中_Java内存模型知识点小结---《深入理解Java内存模型》(程晓明)读书总结...
  20. COMSOL裂缝响应

热门文章

  1. postman的完美替代品,超好用的api测试软件
  2. 圆周角、圆心角、弦、弦心距、弧长、扇形面积
  3. Spring是什么,为什么要学Spring
  4. 网狐大联盟启用AI功能
  5. IDEA中 NOTE Picked up JDK_JAVA_OPTIONS问题求解?
  6. ssm毕设项目学生宿舍管理系统15pjb(java+VUE+Mybatis+Maven+Mysql+sprnig)
  7. linux学习笔记三: secureCRT小键盘输入数字键的时候,出现字母的解决方法:
  8. 亨利气体溶解度优化算法(Matlab代码实现)
  9. hive问题-return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  10. Android aab安装到手机