实战:RedisCluster搭建和扩容(伪集群:4主4从)
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从)相关推荐
- redis伪集群安装linux,redis伪集群搭建(亲测无坑)
一.单机版安装部署,伪集群只需要操作前1-8步即可,再往下浏览找到:二.单机版-伪集群 安装部署继续搭建,如需设置密码参照第10步 1.安装基本工具 yum install -y gcc-c++ v ...
- Redis Cluster 伪集群的搭建
简介 为何要搭建Redis集群?Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB ...
- Redis伪集群搭建
什么是redis集群? redis集群是redis提供的分布式数据方案,可以在多个redis节点之间进行数据共享.它通过分片来提供一定程度的可用性,即使集群中有一部分节点失效或者无法进行通信,集群也能 ...
- ZK锦集:Zookeeper的下载和安装 | 真/伪集群的快速搭建| 总结的很详细
前言 文章力求:通俗易懂.图文并茂.系统全面,语言精练,主要介绍以下知识点: 1.zk基础知识铺路,做到屋里有粮,心中不慌 2.zk的下载.安装.核心参数配置.节点参数释义 3.zk集群快速搭建的两种 ...
- 【云原生 | Kubernetes 实战】01、K8s-v1.25集群搭建和部署基于网页的 K8s 用户界面 Dashboard
目录 一.K8s 概述 可以查看官方文档:概述 | Kubernetes 组件交互逻辑: 二.kubeadm 安装 K8s-v1.25高可用集群 k8s 环境规划: 1.初始化环境 2.安装 Dock ...
- 基于WIN10搭建ES伪集群的实践
依据ES官网介绍https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html,ES将结点分为Mas ...
- kafka伪集群搭建
1.软件环境准备 Kafka是将状态保存在zookeeper中的,所以首先要搭建zookeeper集群. 获取kafka的压缩包 wget http://mirrors.hust.edu.cn/apa ...
- solrCloud伪集群搭建
前情: 采用伪集群部署方式,在同一台服务器上部署3个zookeeper,3个solr服务.结构如下图: 1,下载压缩包,zookeeper,solr zookeeper3.4.10下载地址:https ...
- Zookeeper单例搭建与伪集群搭建
Zookeeper单例搭建与伪集群搭建 搭建方式 单机安装 伪集群搭建 搭建方式 单机模式-- 运行在一台机器上 集群模式-- 运行在多个机器上形成"集合体" 伪集群模式-- 一台 ...
最新文章
- 裸奔的支付X聊天,你还敢用吗?
- java数据结构 队列_Java数据结构与算法[原创]——队列
- 诺贝尔物理学奖得主Arthur Ashkin去世,他发明了“激光镊子”,曾抱怨被诺奖遗忘...
- MS 的SPACE很不好的说
- 快排,归并和Shell排序
- CSP认证201604-2	俄罗斯方块[C++题解]:模拟、枚举
- dw项目符号空心圆怎么设置_项目规范配置之editorconfigamp;prettier
- Eclipse新建web项目正常启动tomcat不报错,但不能访问项目的解决方法
- redhat7的wget使用
- 外卖侠使用教程【干货】
- ssh详细原理流程及配置
- 《自己动手写操作系统》之 10分钟完成最小的操作系统
- 锁定明细表格的某一行数据(不允许修改)
- 联发科处理器真有那么不堪吗?
- MT7628实现Amazon alexa语音控制
- 小米电视ec、小米电视es、小米电视ea2022款的区别
- Ubuntu系统Vscode安装以及配置C++环境(一条龙服务)
- mysql8.0 1064_MySQL 8.0.x 用户授权报错 1064 (42000)
- 局域网数据包通过外网发送到另一局域网的过程
- 更新chrome驱动