Redis集群水平扩展、集群中添加以及删除节点的操作

Redis集群搭建中,我们搭建了下图所示的Redis集群,接下来我们就来看看如何为我们的Redis集群进行水平扩容。

[root@localhost redis-5.0.3]# src/redis-server redis-cluster/8001/redis.conf
[root@localhost redis-5.0.3]# src/redis-server redis-cluster/8004/redis.conf
[root@localhost redis-5.0.3]# src/redis-server redis-cluster/8002/redis.conf
[root@localhost redis-5.0.3]# src/redis-server redis-cluster/8005/redis.conf
[root@localhost redis-5.0.3]# src/redis-server redis-cluster/8003/redis.conf
[root@localhost redis-5.0.3]# src/redis-server redis-cluster/8006/redis.conf 

首先,先启动我们的集群(在上一篇博客中,我们已经将集群环境搭好了,只需要重启启动redis服务即可)

查看集群中的信息:

为集群水平扩容

接下来,我们将在集群得基础上再添加一主一从,增加后集群如下图所示:

1. 增加8007和8008俩个redis实例

在/usr/local/software/redis-5.0.3/redis-cluster下创建8007和8008文件夹,并拷贝8001文件夹下的redis.conf文件到8007和8008这两个文件夹下,进行修改

mkdir 8007 8008
cd 8001
cp redis.conf /usr/local/software/redis-5.0.3/redis-cluster/8007/
cp redis.conf /usr/local/software/redis-5.0.3/redis-cluster/8008/

# 修改8007文件夹下的redis.conf配置文件
vim /usr/local/software/redis-5.0.3/redis-cluster/8007/redis.conf
# 修改如下内容:
port 8007
dir /usr/local/software/redis-5.0.3/redis-cluster/8007
cluster-config-file nodes-8007.conf

# 修改8008文件夹下的redis.conf配置文件
vim /usr/local/software/redis-5.0.3/redis-cluster/8008/redis.conf
修改内容如下:
port 8008
dir /usr/local/software/redis-5.0.3/redis-cluster/8008
cluster-config-file nodes-8008.conf

# 启动8007和8008俩个服务并查看服务状态
src/redis-server /usr/local/software/redis-5.0.3/redis-cluster/8007/redis.conf
src/redis-server /usr/local/software/redis-5.0.3/redis-cluster/8008/redis.conf
ps -el | grep redis

2. 将8007和8008加入集群中

查看redis集群得帮助命令:

1.create:创建一个集群环境host1:port1 … hostN:portN

2.call:可以执行redis命令

3.add-node:将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port

4.del-node:移除一个节点

5.reshard:重新分片

6.check:检查集群状态

添加8007和8008节点到集群中

[root@localhost redis-5.0.3]# src/redis-cli --cluster add-node 192.168.243.133:8007 192.168.243.133:8001
[root@localhost redis-5.0.3]# src/redis-cli --cluster add-node 192.168.243.133:8008 192.168.243.133:8001

3. 查看集群状态

我们发现对于新加入的节点默认都是master节点,最重要的是,他们都没有分配slots槽位,所以根据Redis集群分片的原理,这些刚加入集群的节点实际上是不能读写数据的。

4. 为新加入的节点分配槽位

使用集群中的任意一个主节点,对其进行重新分片工作

[root@localhost redis-5.0.3]# src/redis-cli --cluster reshard 192.168.243.133:8001

输入命令后,会进入一个交互式的操作:

1. How many slots do you want to move (from 1 to 16384)? 600

你想移动多少个槽位? 这里移动600个

2. What is the receiving node ID? 7cbcddaea49560b2847327b1465e8db7082655d2

要将槽位分配给拿给节点? 指定节点的ID

3. Please 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.
Source node #1: all

要从哪几个节点抽取槽位,all:从所有的节点中,各自抽取一部分槽位给8007。输入all后会有一个抽取槽位的计划

4.Do you want to proceed with the proposed reshard plan (yes/no)? yes开始执行

是否执行该reshard计划。

查看集群的最新状态:

我们可以看到8007已经有hash槽位了,此时我们就能往8007进行读写操作了

5. 将8008配置为8007的从节点

我们可以通过replicate命令指定当前节点成为哪一个节点的从节点。

192.168.243.133:8008> cluster replicate 7cbcddaea49560b2847327b1465e8db7082655d2
OK

查看集群的状态:

发现8008已经成为8007的从节点了,至此,Redis水平扩容成功。

删除集群中的节点

删除8008从节点

用del-node删除从节点8008,指定删除节点ip和端口,以及节点id

[root@localhost redis-5.0.3]# src/redis-cli --cluster del-node 192.168.243.133:8008 840340ce7a2dabdfc6ad40fde17e9e0c803b386c

发现8008已经被移除了。

删除8007主节点

删除8007节点比删除8008节点麻烦一点,因为8007节点管理一部分slots,在删除它之前,需要将slots分配给其他可用的master节点上,否则就会出现数据丢失问题。

1、重新分配8007上的slots

[root@localhost redis-5.0.3]# src/redis-cli --cluster reshard 192.168.243.133:8007

交互流程:

1. How many slots do you want to move (from 1 to 16384)? 600

2. What is the receiving node ID? ec0001bd4282f790017d1e68259c67f2d7037a3c

接收slots的节点ID(这里是8001的主节点ID)

3. Please 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.
Source node #1: 7cbcddaea49560b2847327b1465e8db7082655d2
Source node #2: done

数据源ID,这里输入8007节点的ID,表示600个slots都由8007提供(8007总共就600个slots)

4. Do you want to proceed with the proposed reshard plan (yes/no)? yes

查看集群节点状态:

2、使用del-node命令删除8007节点

[root@localhost redis-5.0.3]# src/redis-cli --cluster del-node 192.168.243.133:8007 7cbcddaea49560b2847327b1465e8db7082655d2

再次查看集群状态:

8007已经被移除

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Redis源码解析:集群手动故障转移、从节点迁移详解

    一:手动故障转移 Redis集群支持手动故障转移.也就是向从节点发送"CLUSTER  FAILOVER"命令,使其在主节点未下线的情况下,发起故障转移流程,升级为新的主节点,而原来的主节点降级为从节点. 为了不丢失数据,向从节点发送"CLUSTER  FAILOVER"命令后,流程如下: a:从节点收到命令后,向主节点发送CLUSTERMSG_TYPE_MFSTART包:          b:主节点收到该包后,会将其所有客户端置于阻塞状态,也就是在10s的时间内

  • Redis集群增加节点与删除节点的方法详解

    前言 本文主要是承接上一篇文章Redis集群的离线安装成功以后,我们如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容),也就是集群的伸缩,集群伸缩的原理是控制虚拟槽和数据在节点之间进行移动,通过实际操作来整理一下集群的伸缩. 上篇文章中搭建好的集群为三主三从,端口号为7000.7001.7002.7003.7004.7005. 查看集群启动情况:ps -ef | grep redis 查看集群的slots分配情况以及节点之间的主从关系: 首先登陆节点7000:redi

  • redis集群搭建_动力节点Java学院整理

    现在项目上用redis的话,很少说不用集群的情况,毕竟如果生产上只有一台redis会有极大的风险,比如机器挂掉,或者内存爆掉,就比如我们生产环境曾今也遭遇到这种情况,导致redis内存不够挂掉的情况,当然这些都是我们及其不能容忍的,第一个必须要做到高可靠,其次才是高性能,好了,下面我来逐一搭建一下. 一:Redis集群搭建 1. 下载 首先去官网下载较新的3.2.0版本,下载方式还是非常简单的,比如官网介绍的这样. $ wget http://download.redis.io/releases

  • Redis集群水平扩展、集群中添加以及删除节点的操作

    在Redis集群搭建中,我们搭建了下图所示的Redis集群,接下来我们就来看看如何为我们的Redis集群进行水平扩容. [root@localhost redis-5.0.3]# src/redis-server redis-cluster/8001/redis.conf [root@localhost redis-5.0.3]# src/redis-server redis-cluster/8004/redis.conf [root@localhost redis-5.0.3]# src/re

  • 在idea 中添加和删除模块Module操作

    1.添加模块 2.删除模块 补充知识:IDEA添加子Module的正确姿势 因需求要增加一个新的测试模块,于是要在一堆Module中再添加一个Module,单纯的我没有丝毫杂念的开始进行添加了. 1. 要在哪个目录下添加Module, 就对着该目录右击 -> new -> Module (该目录下必须有pom.xml文件, 否则是没有Module这个选项的) 2. 按提示操作输入必须填写的信息, 最后一个界面如下图: (注意:case_ignite_cache就是被右击的目录, 要在这个目录下

  • Redis Cluster添加、删除的完整操作步骤

    前言 最近学习了Redis,发现Redis还是挺好玩的,今天测试了集群的添加.删除节点.重分配slot等.更深入的理解redis的游戏规则.步骤繁多,但是详细,话不多说了,来一起看看详细的介绍吧. 环境解释: 我是在一台Centos 6.9上测试的,各个redis节点以端口号区分.文中针对各个redis,我只是以端口号代表. ~~~~Master Node~~~~~ 172.16.32.116:7000 172.16.32.116:7001 172.16.32.116:7002 ~~~~Slav

  • JavaScript实现向select下拉框中添加和删除元素的方法

    本文实例讲述了JavaScript实现向select下拉框中添加和删除元素的方法.分享给大家供大家参考,具体如下: 1.说明 a. 利用append()方法向下拉框中添加元素 b. 利用remove()方法移除下拉框中最后一个元素 2.实例源码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transition

  • Android实现EditText中添加和删除bitmap的方法

    本文实例讲述了Android实现EditText中添加和删除bitmap的方法.分享给大家供大家参考,具体如下: SpannableString mSpan1 = new SpannableString("1"); /* * this is add bitmap on edit text */ private void displayBitmapOnText(Bitmap thumbnailBitmap) { if(thumbnailBitmap == null) return; in

  • vue中添加与删除关键字搜索功能

    具体代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible

  • BootStrap Validator 根据条件在JS中添加或移除校验操作

    这是开始的校验代码 function initValidate() { <span style="white-space:pre"> </span>$('#detailform').bootstrapValidator({ <span style="white-space:pre"> </span>feedbackIcons : { <span style="white-space:pre"&

  • Centos7中添加、删除Swap交换分区的方法

    Swap介绍: Linux 将物理内存分为内存段,叫做页面.交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放对于页面的内存.物理内存和交换空间的总大小是可用的虚拟内存的总量. Swap即:交换分区,类似于Windows的虚拟内存,但物理内存不足时,把部分硬盘空间当成虚拟内存使用,从而解决了物理内存容量不足. 优点:节省成本. 缺点:性能不足. 此方法不局限于Centos 7,Linux系统均可使用. 操作用户:root. 1.添加swap交换分区空间 使用dd命令创

  • 工作中Java集合的规范使用操作详解

    目录 一.前言 二.规范使用Java集合 一.前言 现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量.比如:五花八门的错误码会人为地增加排查问题的难度:数据库的表结构和索引设计缺陷带来的系统架构缺陷或性能风险:工程结构混乱导致后续项目维护艰难:没有鉴权的漏洞代码容易被黑客攻击等.依据约束力强弱及故障敏感性,规约依次分为[强制].[推荐].[参考]三大类.在延伸的信息中,“说明”对规约做了适当扩展和解释:“正例”提倡什么样的编

随机推荐