Redis的集群安装以及rehash重新迁移教程指南
1. Redis的cluster集群
在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子。最核心的目标有三个:
- 性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P而非Proxy方式、异步复制、客户端重定向等设计,而牺牲了部分的一致性、使用性。
- 可用性:在Cluster推出之前,可用性要靠Sentinel保证。有了集群之后也自动具有了Sentinel的监控和自动Failover能力。
- 水平扩展:集群的最重要能力当然是扩展,文档中称可以线性扩展到1000结点。
redis Cluster集群功能推出已经有一段时间了。在单机版的Redis中,每个Master之间是没有任何通信的,所以我们一般在Jedis客户端或者Codis这样的代理中做Pre-sharding。按照CAP理论来说,单机版的Redis属于保证CP(Consistency & Partition-Tolerancy)而牺牲A(Availability),也就说Redis能够保证所有用户看到相同的数据(一致性,因为Redis不自动冗余数据)和网络通信出问题时,暂时隔离开的子系统能继续运行(分区容忍性,因为Master之间没有直接关系,不需要通信),但是不保证某些结点故障时,所有请求都能被响应(可用性,某个Master结点挂了的话,那么它上面分片的数据就无法访问了)。
有了Cluster功能后,Redis从一个单纯的NoSQL内存数据库变成了分布式NoSQL数据库,CAP模型也从CP变成了AP。也就是说,通过自动分片和冗余数据,Redis具有了真正的分布式能力,某个结点挂了的话,因为数据在其他结点上有备份,所以其他结点顶上来就可以继续提供服务,保证了Availability。然而,也正因为这一点,Redis无法保证曾经的强一致性了。这也是CAP理论要求的,三者只能取其二。
2. 配置选项以及启动
设置3个节点,将enable-cluster 设置为yes, 修改cluster-config-file nodes-6379.conf,将其设置为不同的文件即可,无需此nodes文件存在。
修改redis.conf配置文件的内容:
cluster-enabled yes
cluster-config-file nodes-6379.conf
其中node-6739.conf并不要求真实存在,只要不同的redis实例不相同即可。
然后分别启动各个redis的实例,然后查看进程:
从图中可以发现,其中的进程后面都带有cluster的字样,标示其为cluster集群状态。
这里启动了3个实例: 6379, 6380, 6381.
3. 设置集群节点
这里一般需要基于redis-cli进入命令行参数,然后输入cluster meet的命令,进行cluster的注册:
这里我们从6379这个实例登陆,分别注册6380, 6381两个节点。注册完成后,然后查看集群信息,可以发现其整个集群的信息为3个节点。
4. 创建shell脚本,初始化slots
创建初始化slot的脚本:
>
#!/bin/bash
for i in {1..16383}; do ./src/redis-cli cluster addslots $i; done
在脚本里面总共添加16383个slot。
修改该脚本的执行权限,执行之,即可获取相应的结果信息。
5. 查看slots的内容
cluster slots : 查看slots信息
cluster nodes: 查看节点信息
从上面可以整个集群的基本状况。
6. 基于普通模式操作集群/集群模式
基于命令行来查看信息的设置:
redis-cli -p 6739
redis-cli -c -p 6739
从这里可以看懂,在cluster模式下与普通模式下的不同,集群模式下客户端可以自动的切换到其他节点。
正常情况下的客户端执行逻辑如下:
7. 安装ruby以及gem的redis组件
各个操作系统的不同,安装方案各有差异,这里以ubuntu的方式来进行。
8. 进行集群的reshard
src/redis-trib.rb reshard 127.0.0.1:6739
从源节点移动到目标节点
• ./redis-trib.rb reshard 127.0.0.1:6379
• How many slots do you want to move (from 1 to 16384)? 4000 //输入被迁移的solt的数量
• What is the receiving node ID? //输入目的地节点的id,执行第一行命
• Please enter all the source node IDs.//输入被迁移的槽
• Do you want to proceed with the proposed reshard plan (yes/no)? Yes //迁移计划确认
如何来确认reshard来进行呢?查看命令的日志即可得知:
9. 总结
redis提供了完整的一套如何进行集群处理的机制,并利用一致性hash来更好的处理redis的动态调整。
Redis的集群安装以及rehash重新迁移教程指南的更多相关文章
- Redis Sentinel 集群安装 step by step
一. 准备材料 服务器 IP address 操作系统 位数 Redis 版本 CNT06CAH05 192.168.3.47 CentOS 6.5 x64 Redis-3.2.6 sentine ...
- Redis真集群安装
Redis真集群安装 命令文档:http://redisdoc.com/index.html 下载:https://code.google.com/archive/p/redis/downloads ...
- redis cluster 集群 安装 配置 详解
redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...
- redis分片集群安装部署
redis分片集群安装与部署 分片集群的优势 高可用.且方便扩展. 数据分片,多节点提供服务,提高性能,数据提供冗余备份. 分片集群部署 只需更改配置文件 部署架构:6个节点,3主3从.数据集分为3片 ...
- redis离线集群安装
用一个叫redis-trib.rb的ruby脚本.redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下(redis-xxx/src/).是基于r ...
- redis的集群安装
1.创建安装目录 在master ,node1 ,node2中分别创建 mkdir /usr/local/soft/redis-cluster 2.将redis 复制到redis-cluster 目录 ...
- centos7 redis伪集群安装
安装gcc: yum install gcc -y 上传redis软件包到 /home下 解压: tar xf redis-3.2.11.tar.gz 进入 redis 目录 : cd r ...
- 深入分析redis cluster 集群
深入分析redis cluster 集群安装配置详解 下面小编来为各位介绍一篇深入分析redis cluster 集群安装配置详解,如果你希望做数据库集群就可以来看看此文章的哦. http://rub ...
- CentOS下redis集群安装
环境: 一台CentOS虚拟机上部署六个节点,创建3个master,3个slave节点 1.下载并解压 cd /root wget http://download.redis.io/releases/ ...
随机推荐
- 20145310《Java程序设计》第5次实验报告
20145310<Java程序设计>第5次实验报告 实验要求 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验内容 根据所学内容,编写代码实现服务器与客户端 掌 ...
- 在Linux终端管理文件你要知道的11个命令
LS - 列表文件 ls命令列出目录中的文件. 默认情况下,使用ls列出当前目录下的文件. 2 你也可以列出文件递归-也就是说,列出所有文件在当前目录中的目录-使用ls -R.LS还可以列出在其他目录 ...
- 树梅派配置ad-hoc网络
树梅派配置ad-hoc网络 更新与安装 1.更改源/etc/apt/source.list: http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian ...
- BootStrap实现图片轮播
<div class="container"> <div data-ride="carousel" id="carou ...
- Java 面试题基础概念收集
问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地 ...
- Nodejs Q promise设计思路
Nodejs Q promise库 前言 Q库为nodejs提供了一个基于promise的编程方式,从此避免了一层又一层的callback调用.不过Q的灵活性也给我造成了很大困扰,我可以用promis ...
- TP5接受Vue跨域请求
<?php /** * Created by PhpStorm. * User: qianglong * Date: 2018/1/15 * Time: 17:56 */ namespace a ...
- c# 调用webapi 传参 特殊字符的问题
最近在做对接数据接口,遇到一些问题,在C#后台写请求webapi的接口,但是传递过程中参数如果有特殊字符,传入过去之后又问题. 需要转换一下,通过System.Web.HttpUtility.UrlE ...
- 【cs231n】反向传播笔记
前言 首先声明,以下内容绝大部分转自知乎智能单元,他们将官方学习笔记进行了很专业的翻译,在此我会直接copy他们翻译的笔记,有些地方会用红字写自己的笔记,本文只是作为自己的学习笔记.本文内容官网链接: ...
- webservice的SOAP代理设置
我们的服务器是可以访问的 设置的代理同样也可以访问 接下来设置代理 接着打开TCP窗口 最后来看数据