准备工作:
1、载入本地镜像:cd 镜像所在目录,docker load -i 镜像文件名
2、载入的镜像docker images发现没有REPOSITORY与TAG,
docker tag 镜像id REPOSITORY : TAG

创建六个节点,三个master+三个slave,每个master有自己的slave。
一、以redis_6381为例,conf修改:
#bind 127.0.0.1 -::1 (注释掉)
protected-mode no
port 6381
daemonize no (非守护运行,否则与docker run 冲突)
#pidfile /var/run/redis_6379.pid (注释掉,当服务器非守护运行时,不会创建pid文件)
logfile /opt/docker/redis_cluster/redis_6381/redis_6381.log(默认为"",会导致没有log文件)
dbfilename dump_6381.rdb
dir /opt/docker/redis_cluster/redis_6381/ (非常重要,rdb与log等文件挂载的目录)
masterauth 6379
requirepass 6379(masterauth与requirepass应一致,因为主从角色会切换)
<–cluster部分–>
cluster-enabled yes
cluster-announce-ip 192.168.91.131 (宿主ip)
cluster-announce-port 6381
cluster-announce-bus-port 16381 (节点之间通信的总线端口,用6381+10000得到)
cluster-config-file nodes-6381.conf

二、将redis_6381.conf与空的redis_6381.log放进 /redis/redis_6381/,与dir一致,并将redis_6381文件夹与log文件chmod 777(chmod 777 -R 可授权文件夹下文件及子文件夹)。

三、运行容器,注意映射两个端口,一个对外,一个总线端口节点之间通信:
docker run --name redis_6381 --net zoonet --ip 172.18.5.11 -p 6381:6381 -p 16381:16381 -v /opt/docker/redis_cluster/redis_6381/:/opt/docker/redis_cluster/redis_6381/ --restart always --privileged=true -d redis redis-server /opt/docker/redis_cluster/redis_6381/redis_6381.conf
(–net zoonet指定网桥,–restart alway是docker重启后容器也自动重启)

四、开放6381与16381端口:
firewall-cmd --zone=public --add-port=6381/tcp --permanent
systemctl restart firewalld.service
firewall-cmd --reload

五、创建集群:
docker run --rm=true --name cluster-create --net zoonet -it redis redis-cli --cluster-replicas 1 --cluster create 172.18.5.11:6381 172.18.5.12:6382 172.18.5.13:6383 172.18.5.14:6384 172.18.5.15:6385 172.18.5.16:6386 --pass 6379
(注意,创建集群也是个容器,需要和redis容器在同一个网桥,否则会提示Could not connect to Redis at ip:端口: Connection timed out)
(cluster-replicas 1指一个master有一个slave,172.17.0.2是容器ip,查看6381容器的ip,用docker inspect 容器id,最下面的IPAddress就是)
(redis有密码就在结尾加上–pass 密码)

JedisCluster源码解析:https://segmentfault.com/a/1190000013535955
JedisCluster的使用:
JedisPoolConfig config=new JedisPoolConfig();
Set nodes=new HashSet();
nodes.add(new HostAndPort(“192.168.91.131”, 6381));
nodes.add(new HostAndPort(“192.168.91.131”, 6382));
nodes.add(new HostAndPort(“192.168.91.131”, 6383));
nodes.add(new HostAndPort(“192.168.91.131”, 6384));
nodes.add(new HostAndPort(“192.168.91.131”, 6385));
nodes.add(new HostAndPort(“192.168.91.131”, 6386));
JedisCluster cluster=new JedisCluster(nodes, 10000, 10000, 10, password, config);
(因为redis设置了密码,构造方法需要有密码的构造方法,Set jedisClusterNode, int connectionTimeout, int soTimeout,
int maxAttempts, String password, final GenericObjectPoolConfig poolConfig,connectionTimeout是连接超时时间,soTimeout是读取数据超时时间,maxAttempts是重试次数)
cluster.set(“cluster”, “connect success”);
System.out.println(cluster.get(“cluster”));
//cluster.close();JedisCluster不需要手动close,否则会导致redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster异常

集群测试:
1、当把一对master-slave全部停掉,整个集群无法使用,必须启动这对master-slave中的master集群才能恢复正常,即使启动slave也没用。

单点redis的数据迁移到redis cluster

参考:https://blog.csdn.net/cxu123321/article/details/93922055?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163046411416780255227612%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163046411416780255227612&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-2-93922055.pc_search_result_hbase_insert&utm_term=redis+%E5%8D%95%E7%82%B9+%E8%BF%81%E7%A7%BB+%E9%9B%86%E7%BE%A4&spm=1018.2226.3001.4187

1、将cluster的所有slots迁移到一个master节点
以将6383的slots迁移到6381为例:
docker exec -it 容器id redis-cli --pass 容器密码 --cluster reshard 172.18.5.13:6383
How many slots do you want to move (from 1 to 16384)? 5361(想迁走的slot数量)
What is the receiving node ID? 6381的集群id
Source node #1: 6383的集群id
Source node #2: done
Do you want to proceed with the proposed reshard plan (yes/no)? yes
2、将redis所有节点停掉,把6381的rdb文件换成想要迁移的,然后重启所有节点
3、将集中到6381的slot再次均分:docker exec -it 容器id redis-cli --pass 6379 --cluster rebalance --cluster-use-empty-masters 172.18.5.11:6381
注意:集群之前的数据不会丢失,会和迁来的数据汇合在一起

集群运维操作

清空数据:需要docker exec各个master,执行FLUSHALL

linux平台使用docker搭建redis-cluster集群,并用JedisCluster连接集群相关推荐

  1. 史上最详细Docker搭建Redis Cluster集群环境 值得收藏 每步都有图,不用担心学不会

    之前无论学什么东西,总感觉只要会写小Demo就完事了.但随着学习的深入,(内卷)接触的越来越多,集群.JVM.数据结构.算法.底层.Liunx 系统,任重而道远啊. 分享一句很喜欢的话:"八 ...

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

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

  3. Docker下Redis Cluster分片集群的搭建、基本操作、集群扩容和集群故障转移(非关系型数据库技术课程 第九周)

    文章目录 Docker 下Redis Cluster 分片集群搭建 1. Cluster 分片集群 1.1 Cluster 集群的结构和作用 1.2 Cluster 分片集群 的作用 1.3哈希槽(h ...

  4. docker搭建redis高可用集群

    目标:docker搭建redis高可用集群 1.架构:六个redis容器,三主三从,主从复制,主机宕机从机自动替代 2.网络架构设计:设计一个专属redis的docker网络 docker netwo ...

  5. 使用docker搭建redis集群

    使用docker搭建redis集群有两种,一种是单机多个docker容器,一种是多个机器的集群 基础知识 每个Redis集群中的节点都需要打开两个TCP连接.一个连接用于正常的给Client提供服务, ...

  6. windows平台使用Docker搭建分布式Spark 与 hadoop集群

    若不关心具体搭建过程,只想运行分布式集群,请直接前往3.2开始 (本人已上传镜像至服务器) 续前节 windows平台使用Docker搭建分布式hadoop集群 安装分布式Spark篇 1. 运行wi ...

  7. redis实战第七篇 使用redis工具(redis-cli)搭建redis cluster

    上一篇有介绍手动安装redis cluster传送门,很明显,手动创建redis cluster的过程比较繁杂,容易出错,因此redis官方开发了一个工具,可以快速搭建redis cluster.在5 ...

  8. Docker搭建Redis主从模式

    文章目录 Docker搭建Redis主从模式 Docker安装Redis 主从模式(简易模式) 特点 工作机制 搭建 redis-master节点 redis-slave-1节点 redis-slav ...

  9. Docker搭建Redis主从同步详细教程

    文章目录 介绍: redis主从同步概念 redis主从同步原理 redis主从同步流程图 搭建redis主从详细步骤: 拉取redis镜像 创建所需文件夹,用于映射容器相应文件路径 运行容器指定挂载 ...

最新文章

  1. as3绘制抛物线(二)
  2. python3: 博客园列表爬取;
  3. 搞定高并发,岂能不懂Synchronized底层原理?
  4. JavaWeb学习总结(一):JavaWeb开发入门
  5. 经典的K-means聚类算法
  6. 【C/C++】值传递和址传递区别解析
  7. 力扣116. 填充每个节点的下一个右侧节点指针(JavaScript)
  8. 服务器修改开机启动项,启动项设置_服务器开机启动项
  9. 深入浅出MySql索引
  10. Java设计模式学习记录-模板方法模式
  11. c语言质因数分解算法蓝桥杯,【算法】 蓝桥杯 基础练习 分解质因数
  12. KK集团招股书失效,首次冲刺港交所上市失利,尚未实现盈利
  13. Hulu 2020年校招-算法题《Hulu杀》Python
  14. GDB 用法之查看内存
  15. NX二次开发-重命名装配组件
  16. ASP数组Ubound与Lbound
  17. abb机器人控制箱按键的作用_ABB机器人控制柜各个部件及作用介绍
  18. jenkins教程(jenkins教程入门到精通)
  19. 大数据学习路线,芜湖 起飞~
  20. SpringCloud Gateway架构流程 和 内置的路由断言介绍

热门文章

  1. 电子钱包、电子现金与qPBOC
  2. 每日英语!(2021-3-1)
  3. web图书销售管理系统_开源ASP.NET MVC+Bootstrap的仓库管理系统
  4. Tensorflow的负采样函数Sampled softmax loss学习笔记
  5. 这个岗位国内人才缺口超30万,突破职场瓶颈,薪资飙升。
  6. 多项logistic回归系数解释_多元回归系数:我们都解释错了?
  7. 回归系数只能取正值_NCL回归-回归系数为正值的大值区域基本不通过95%显著性检验...
  8. 蓝桥杯算法训练sticks
  9. Archlinux系统屏幕花屏
  10. linux下分析cel文件,CEL 文件扩展名: 它是什么以及如何打开它?