NoSQL之Redis(四)--- RedisCluster概念以及搭建

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 之前已经在博文中介绍了redis以及redis的简单实用,但是在实际的项目中用单机版redis还是很少的基本上都是实用redis集群。

之前已经在博文中介绍了redis以及redis的简单实用,但是在实际的项目中用单机版redis还是很少的基本上都是实用redis集群。

 

         RedisCluster概念


         RedisCluster架构

         架构细节:

         (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

         (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

         (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

         (4) Redis Cluster  是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写。集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的Slot的请求时,会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求重新发往这个地址,对外部透明。一个Key到底属于哪个Slot由crc16(key) % 16384 决定。

 

         例如下图

         Key:a

         计算a的hash值,例如值为100,100这个slot在server1上,所以a应该放到server1.

         Key:hello

         Hash值:10032,此slot在server3上。Hell可以应该存在server3.

 

         redis-cluster投票:容错

 

         (1)领着投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

         (2):什么时候整个集群不可用(cluster_state:fail)? 

             a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

             b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

           ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

 

         RedisCluster安装


         安装redis


         版本说明

         本教程使用redis3.0版本。3.0版本主要增加了redis集群功能。同时由于笔者实用的是一台虚拟机所以只是伪集群模式,但是和真集群的安装方法本质上还是类似的。

         安装的前提条件:

         需要安装gcc:yum install gcc-c++

 

         下载redis的源码包,把源码包上传到linux服务器

         解压源码包

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. tar -zxvf redis-3.0.0.tar.gz  
  2. Make  
  3. Make install  
  4. make installPREFIX=/usr/local/redis-cluster/redis01  

         ps:PREFIX必须大写表示redis的安装路径,执行上面几步之后单机版的redis已经安装成功。

 

         集群环境安装


         搭建集群需要使用到官方提供的ruby脚本,需要安装ruby的环境。       

         安装ruby

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. yum install ruby  
  2. yum install rubygems  

         redis集群管理工具redis-trib.rb输入如下依次命令可以找到

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. cd redis-3.0.0/src  
  2. ll*.rb  

         脚本需要的ruby包:

         下载地址:http://download.csdn.net/detail/senior_lee/9502524

         上传到Linux,并安装ruby包

         geminstall redis-3.0.0.gem

 

         集群搭建


         第一步:创建6另外5个redis实例,在/usr/local/redis-cluster/文件夹下,复制redis01即可,分别命名为redis02~redis06。

         注意:需要分别删除每个redis安装目录里面的dum.rdb文件。

         第二步:修改redis配置文件

         1将port分别改成7001~7006

         2打开cluster-enable前面的注释

         3把创建集群的ruby脚本复制到redis-cluster目录下。

         4启动6个redis实例

    

         5创建集群

 ./redis-trib.rb create --replicas 1 192.168.21.225:7001192.168.21.225:7002 192.168.21.225:7003 192.168.21.225:7004 192.168.21.225:7005192.168.21.225:7006

         ps:创建了三个节点主节点,三个从节点。其中—replicas1 表示每个主节点下面有1个从节点,从节点可以是任意多个。

窗口输出结果入下:

>>> Creating cluster

Connecting to node 192.168.21.225:7001: OK

Connecting to node 192.168.21.225:7002: OK

Connecting to node 192.168.21.225:7003: OK

Connecting to node 192.168.21.225:7004: OK

Connecting to node 192.168.21.225:7005: OK

Connecting to node 192.168.21.225:7006: OK

>>> Performing hash slotsallocation on 6 nodes...

Using 3 masters:

192.168.21.225:7001

192.168.21.225:7002

192.168.21.225:7003

Adding replica 192.168.21.225:7004 to 192.168.21.225:7001

Adding replica 192.168.21.225:7005 to 192.168.21.225:7002

Adding replica 192.168.21.225:7006 to 192.168.21.225:7003

M: 5a8523db7e12ca600dc82901ced06741b3010076192.168.21.225:7001

  slots:0-5460 (5461 slots) master

M: bf6f0929044db485dea9b565bb51e0c917d20a53192.168.21.225:7002

  slots:5461-10922 (5462 slots) master

M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca192.168.21.225:7003

  slots:10923-16383 (5461 slots) master

S: 2a61b87b49e5b1c84092918fa2467dd70fec115f192.168.21.225:7004

  replicates 5a8523db7e12ca600dc82901ced06741b3010076

S: 14848b8c813766387cfd77229bd2d1ffd6ac8d65192.168.21.225:7005

  replicates bf6f0929044db485dea9b565bb51e0c917d20a53

S: 3192cbe437fe67bbde9062f59d5a77dabcd0d632192.168.21.225:7006

  replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca

Can I set the above configuration? (type'yes' to accept): yes

>>> Nodes configuration updated

>>> Assign a different configepoch to each node

>>> Sending CLUSTER MEET messagesto join the cluster

Waiting for the cluster to join.....

>>> Performing Cluster Check(using node 192.168.21.225:7001)

M: 5a8523db7e12ca600dc82901ced06741b3010076192.168.21.225:7001

  slots:0-5460 (5461 slots) master

M: bf6f0929044db485dea9b565bb51e0c917d20a53192.168.21.225:7002

  slots:5461-10922 (5462 slots) master

M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca192.168.21.225:7003

  slots:10923-16383 (5461 slots) master

M: 2a61b87b49e5b1c84092918fa2467dd70fec115f192.168.21.225:7004

  slots: (0 slots) master

  replicates 5a8523db7e12ca600dc82901ced06741b3010076

M: 14848b8c813766387cfd77229bd2d1ffd6ac8d65192.168.21.225:7005

  slots: (0 slots) master

  replicates bf6f0929044db485dea9b565bb51e0c917d20a53

M: 3192cbe437fe67bbde9062f59d5a77dabcd0d632192.168.21.225:7006

  slots: (0 slots) master

  replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca

[OK] All nodes agree about slotsconfiguration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

 

         测试集群


         依次输入如下命令

cd/usr/local/redis-cluster/

redis01/bin/redis-cli-h 192.168.21.225 -p 7002 c

         ps:-c表示连接集群

 

集群就这样愉快的搭建完了,接下的文章里面会依次介绍如何使用jedis操作单机和集群版redis,jedis如何同spring集成以及如何编写jedis的工具类。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
存储 NoSQL 关系型数据库
什么是NoSQL?什么是redis?redis是做什么的?
什么是NoSQL?什么是redis?redis是做什么的?
99 1
|
2月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
41 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
2月前
|
缓存 分布式计算 NoSQL
大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念
大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念
68 2
|
4月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
2月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
143 0
|
6月前
|
存储 NoSQL 算法
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
|
7月前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
489 9
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
7月前
|
存储 缓存 NoSQL
由菜鸟到大神,谈谈redis的概念、实战、原理、高级使用方法
【5月更文挑战第18天】Redis是一个开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等。
113 10
|
6月前
|
NoSQL Java 关系型数据库
非关系型数据库NoSQL数据层解决方案 之 redis springboot整合与读写操作 2024详解以及window版redis5.0.14下载
非关系型数据库NoSQL数据层解决方案 之 redis springboot整合与读写操作 2024详解以及window版redis5.0.14下载
51 0
|
6月前
|
数据采集 NoSQL Redis
scrapy_redis概念作用和流程
scrapy_redis概念作用和流程
下一篇
无影云桌面