RedisCluster搭建和扩容(伪集群:4主4从)


如图:

功能:

(1)搭建Redis集群,要求三主三从
(2)能够添加一主一从(Master4和Slaver4)
(3)能够通过JedisCluster向RedisCluster添加数据和取出数据

一、RedisCluster 搭建(伪集群)

1.1 RedisCluster 集群配置 清单

节点名称 访问地址
Master1 192.168.80.77:5555
Master2 192.168.80.77:5556
Master3 192.168.80.77:5557
Slave1 192.168.80.77:5558
Slave2 192.168.80.77:5559
Slave3 192.168.80.77:5560
Master4 192.168.80.77:5561
Slave4 192.168.80.77:5562

1.2 搭建集群

下载redis-5.0.5

 wget http://download.redis.io/releases/redis-5.0.5.tar.gz

创建redis集群目录redis-cluster,存放所有redis节点

解压缩redis安装包

 tar -zxvf redis-5.0.5.tar.gz

cd切换到redis解压目录下,执行编译

安装并指定安装目录安装redis

 make install PREFIX=/opt/redis-cluster/redisMaster1

从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录生成的bin目录中

修改 redis.conf 文件,修改如下参数

 # 1. 设置端口port 5555# 2. 将`daemonize`由`no`改为`yes`daemonize yes# 3. 默认绑定的是回环地址,默认不能被其他机器访问# bind 127.0.0.1# 4. 是否开启保护模式,由yes该为noprotected-mode no # 5. 开启集群模式cluster-enabled yes

拷贝已经安装完毕得redisMaster1,拷贝出6个redis实例(注意:端口修改)

按照master和slave进行主从节点得区分

修改端口

编写批处理脚本,启动所有的Redis实例:

 #创建start.sh,启动所有的实例vi redisStart.sh

赋写脚本得执行的权限,并执行脚本,启动三主三从redis实例

node.conf中记录了所有的节点以及槽的对应关系:目前只有当前节点得信息(实例id和实例标识等信息)

创建Redis集群(创建时Redis里不要有数据)(进入任何一个redis都可以)

 ./redis-cli --cluster create 192.168.80.77:5555 192.168.80.77:5556 192.168.80.77:5557 192.168.80.77:5558 192.168.80.77:5559 192.168.80.77:5560 --cluster-replicas 1说明:--cluster-replicas 1 : 设置一主一从,前三台为主,后三天随机和主进行配对
 [root@redisCluster bin]# ./redis-cli --cluster create 192.168.80.77:5555 192.168.80.77:5556 192.168.80.77:5557 192.168.80.77:5558 192.168.80.77:5559 192.168.80.77:5560 --cluster-replicas 1>>> Performing hash slots allocation on 6 nodes...Master[0] -> Slots 0 - 5460Master[1] -> Slots 5461 - 10922Master[2] -> Slots 10923 - 16383Adding replica 192.168.80.77:5559 to 192.168.80.77:5555Adding replica 192.168.80.77:5560 to 192.168.80.77:5556Adding replica 192.168.80.77:5558 to 192.168.80.77:5557>>> Trying to optimize slaves allocation for anti-affinity[WARNING] Some slaves are in the same host as their masterM: 97bc293359e1fbaa3d37d7fc9547f95e8168a661 192.168.80.77:5555slots:[0-5460] (5461 slots) masterM: 94a7d264c4d93642dee1079203add2c7dde51742 192.168.80.77:5556slots:[5461-10922] (5462 slots) masterM: 4ea4b4d24be612e223f0fd1e2db61bd757130f4f 192.168.80.77:5557slots:[10923-16383] (5461 slots) masterS: a56b4edece031fd70347fd8677058237659ed7ae 192.168.80.77:5558replicates 94a7d264c4d93642dee1079203add2c7dde51742S: 1d15dbd61215c9b7b29cd9917ae6c7b1cdc6684b 192.168.80.77:5559replicates 4ea4b4d24be612e223f0fd1e2db61bd757130f4fS: bc3bf4315d5628b6ab4d9431eaada3b2448a1cd3 192.168.80.77:5560replicates 97bc293359e1fbaa3d37d7fc9547f95e8168a661Can I set the above configuration? (type 'yes' to accept): yes>>> Nodes configuration updated>>> Assign a different config epoch to each node>>> Sending CLUSTER MEET messages to join the clusterWaiting for the cluster to join....>>> Performing Cluster Check (using node 192.168.80.77:5555)M: 97bc293359e1fbaa3d37d7fc9547f95e8168a661 192.168.80.77:5555slots:[0-5460] (5461 slots) master1 additional replica(s)S: 1d15dbd61215c9b7b29cd9917ae6c7b1cdc6684b 192.168.80.77:5559slots: (0 slots) slavereplicates 4ea4b4d24be612e223f0fd1e2db61bd757130f4fS: bc3bf4315d5628b6ab4d9431eaada3b2448a1cd3 192.168.80.77:5560slots: (0 slots) slavereplicates 97bc293359e1fbaa3d37d7fc9547f95e8168a661M: 4ea4b4d24be612e223f0fd1e2db61bd757130f4f 192.168.80.77:5557slots:[10923-16383] (5461 slots) master1 additional replica(s)S: a56b4edece031fd70347fd8677058237659ed7ae 192.168.80.77:5558slots: (0 slots) slavereplicates 94a7d264c4d93642dee1079203add2c7dde51742M: 94a7d264c4d93642dee1079203add2c7dde51742 192.168.80.77:5556slots:[5461-10922] (5462 slots) master1 additional replica(s)[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered.[root@redisCluster bin]#

查看执行日志:

 55主节点,对应59从节点56主节点,对应60从节点57主节点,对应58从节点


查看node.conf,了解所有的节点以及槽的对应关系

命令客户端连接集群,并进行set/get操作

 ./redis-cli -h 127.0.0.1 -p 5555 -c注意:-c 表示是以redis集群方式进行连接


不管存储的数据在那个槽上,最终都将定位到相应的节点上去。

查看集群状态(需要先登陆)

二、JedisCluster

JedisCluster是Jedis根据RedisCluster的特性提供的集群智能客户端

 JedisCluster为每个节点创建连接池,并跟节点建立映射关系缓存(Cluster slots)JedisCluster将每个主节点负责的槽位一一与主节点连接池建立映射缓存JedisCluster启动时,已经知道key,slot和node之间的关系,可以找到目标节点JedisCluster对目标节点发送命令,目标节点直接响应给JedisCluster

如果JedisCluster与目标节点连接出错,则JedisCluster会知道连接的节点是一个错误的节点此时节点返回moved异常给JedisCluster

JedisCluster会重新初始化slot与node节点的缓存关系,然后向新的目标节点发送命令,目标命令执行命令并向JedisCluster响应

如果命令发送次数超过5次,则抛出异常"Too many cluster redirection!"

demo下载地址: JedisCluster

三、扩容(添加主节点redisMaster4和redisSlave4到当前集群)

先创建redisMaster4节点 (无数据)

复制配置文件 redis.conf

修改 redis.conf 文件

 # 1. 设置端口port 5562# 2. 将`daemonize`由`no`改为`yes`daemonize yes# 3. 默认绑定的是回环地址,默认不能被其他机器访问# bind 127.0.0.1# 4. 是否开启保护模式,由yes该为noprotected-mode no # 5. 开启集群模式cluster-enabled yes

复制从节点redisSlave4:

启动新添加的主节点redisMaster4:

进入集群中的某一个主节点的客户端进行节点添加:添加新节点,并启动

 ./redis-cli --cluster add-node 192.168.80.77:5561  192.168.80.77:5555

查看集群结点发现7007已添加到集群中

 hash槽重新分配(数据迁移)添加完主节点需要对主节点进行hash槽分配,这样该主节才可以存储数据。查看集群中槽占用情况,redis集群有16384个槽,集群中的每个结点分配自已槽,通过查看集群结点可以看到槽占用情况。

给刚添加的7007结点分配槽

 第一步:连接上集群(连接集群中任意一个可用结点都行)./redis-cli --cluster reshard 192.168.127.128:5561第二步:输入要分配的槽数量How many slots do you want to move (from 1 to 16384)? 3000输入:3000,表示要给目标节点分配3000个槽第三步:输入接收槽的结点idWhat is the receiving node ID?输入:50b073163bc4058e89d285dc5dfc42a0d1a222f2PS:这里准备给7007分配槽,通过cluster nodes查看7007结点id为:50b073163bc4058e89d285dc5dfc42a0d1a222f2第四步:输入源结点idPlease enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.第五步:输入yes开始移动槽到目标结点id输入:yes



添加从节点,添加redisSlave4从结点,将redisSlave4作为redisMaster4的从结点

 ./redis-cli --cluster add-node 新节点的ip和端口  旧节点ip和端口 --cluster-slave --cluster-master-id 主节点id
启动新得从节点

添加redisSlave4从结点,将redisSlave4作为redisMaster4的从结点
 ./redis-cli --cluster add-node 192.168.80.77:5562 192.168.80.77:5561 --cluster-slave --cluster-master-id a42ac5608328fd997732dd577029c9f91c844512

查看:

搭建完毕,后续会更新关于redis更细致得内容

实战:RedisCluster搭建和扩容(伪集群:4主4从)相关推荐

  1. redis伪集群安装linux,redis伪集群搭建(亲测无坑)

    一.单机版安装部署,伪集群只需要操作前1-8步即可,再往下浏览找到:二.单机版-伪集群  安装部署继续搭建,如需设置密码参照第10步 1.安装基本工具 yum install -y gcc-c++ v ...

  2. Redis Cluster 伪集群的搭建

    简介 为何要搭建Redis集群?Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB ...

  3. Redis伪集群搭建

    什么是redis集群? redis集群是redis提供的分布式数据方案,可以在多个redis节点之间进行数据共享.它通过分片来提供一定程度的可用性,即使集群中有一部分节点失效或者无法进行通信,集群也能 ...

  4. ZK锦集:Zookeeper的下载和安装 | 真/伪集群的快速搭建| 总结的很详细

    前言 文章力求:通俗易懂.图文并茂.系统全面,语言精练,主要介绍以下知识点: 1.zk基础知识铺路,做到屋里有粮,心中不慌 2.zk的下载.安装.核心参数配置.节点参数释义 3.zk集群快速搭建的两种 ...

  5. 【云原生 | Kubernetes 实战】01、K8s-v1.25集群搭建和部署基于网页的 K8s 用户界面 Dashboard

    目录 一.K8s 概述 可以查看官方文档:概述 | Kubernetes 组件交互逻辑: 二.kubeadm 安装 K8s-v1.25高可用集群 k8s 环境规划: 1.初始化环境 2.安装 Dock ...

  6. 基于WIN10搭建ES伪集群的实践

    依据ES官网介绍https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html,ES将结点分为Mas ...

  7. kafka伪集群搭建

    1.软件环境准备 Kafka是将状态保存在zookeeper中的,所以首先要搭建zookeeper集群. 获取kafka的压缩包 wget http://mirrors.hust.edu.cn/apa ...

  8. solrCloud伪集群搭建

    前情: 采用伪集群部署方式,在同一台服务器上部署3个zookeeper,3个solr服务.结构如下图: 1,下载压缩包,zookeeper,solr zookeeper3.4.10下载地址:https ...

  9. Zookeeper单例搭建与伪集群搭建

    Zookeeper单例搭建与伪集群搭建 搭建方式 单机安装 伪集群搭建 搭建方式 单机模式-- 运行在一台机器上 集群模式-- 运行在多个机器上形成"集合体" 伪集群模式-- 一台 ...

最新文章

  1. 裸奔的支付X聊天,你还敢用吗?
  2. java数据结构 队列_Java数据结构与算法[原创]——队列
  3. 诺贝尔物理学奖得主Arthur Ashkin去世,他发明了“激光镊子”,曾抱怨被诺奖遗忘...
  4. MS 的SPACE很不好的说
  5. 快排,归并和Shell排序
  6. CSP认证201604-2 俄罗斯方块[C++题解]:模拟、枚举
  7. dw项目符号空心圆怎么设置_项目规范配置之editorconfigamp;prettier
  8. Eclipse新建web项目正常启动tomcat不报错,但不能访问项目的解决方法
  9. redhat7的wget使用
  10. 外卖侠使用教程【干货】
  11. ssh详细原理流程及配置
  12. 《自己动手写操作系统》之 10分钟完成最小的操作系统
  13. 锁定明细表格的某一行数据(不允许修改)
  14. 联发科处理器真有那么不堪吗?
  15. MT7628实现Amazon alexa语音控制
  16. 小米电视ec、小米电视es、小米电视ea2022款的区别
  17. Ubuntu系统Vscode安装以及配置C++环境(一条龙服务)
  18. mysql8.0 1064_MySQL 8.0.x 用户授权报错 1064 (42000)
  19. 局域网数据包通过外网发送到另一局域网的过程
  20. 更新chrome驱动

热门文章

  1. py3下怎么用StringIO
  2. Windows 下安装 MongoDB
  3. servlet--百度百科
  4. Android版添加phonegap---为APP添加CNZZ统计插件教程
  5. PHP extension mcrypt must be loaded.
  6. PowerShell 扩展工具第四波!
  7. Android 解析JSON
  8. 在WORD中删除中文或英文
  9. 模拟退火算法从原理到实战【基础篇】
  10. JavaScript机器学习之KNN算法