一,为什么要用redis-cluster

1.并发问题

redis官方生成可以达到 10万/每秒,每秒执行10万条命令
假如业务需要每秒100万的命令执行呢?

2.数据量太大

一台服务器内存正常是16~256G,假如你的业务需要500G内存,你怎么办?解决方案如下

  1. 配置一个超级牛逼的计算机,超大内存,超强cpu,但是问题是。。。。

2.正确的应该是考虑分布式,加机器,把数据分到不同的位置,分摊集中式的压力

二,客户端分片

redis实例集群主要思想是将redis数据的key进行散列,通过hash函数特定的key会映射到指定的redis节点上

数据分布

顺序分区

哈希分区(redis-cluster用的是哈希分区)

节点取余

例如按照节点取余的方式,分三个节点

1~100的数据对3取余,可以分为三类

  • 余数为0
  • 余数为1
  • 余数为2

那么同样的分4个节点就是hash(key)%4

节点取余的优点是简单,客户端分片直接是哈希+取余

一致性哈希

客户端进行分片,哈希+顺时针取余

虚拟槽分区

每一个数据的键被哈希函数映射到一个槽位,redis-cluster规定一共有16384个槽位

三,搭建集群

单机模式

分布式架构

分布式架构
多个服务端,负责读写,彼此通信,redis指定了16384个槽,ruby的脚本自动就把分配槽位这事做了

安装方式

官方提供通过ruby语言的脚本一键安装

1.环境准备

通过配置,开启redis-cluster

port 7000
daemonize yes
dir "/opt/redis/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-require-full-coverage no

创建文件存放目录

mkdir -p /opt/redis/data

快捷创建多个文件:

sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf

陆续创建5个

redis支持多实例的功能,我们在单机演示集群搭建,需要6个实例,三个是主节点,三个是从节点,

[root@yugo /opt/redis/config 17:12:30]#ls
redis-7000.conf redis-7002.conf redis-7004.conf
redis-7001.conf redis-7003.conf redis-7005.conf #确保每个配置文件中的端口修改!!

1.运行redis实例

创建6个节点的redis实例

 1855  2018-10-24 15:46:01 redis-server redis-7000.conf
1856 2018-10-24 15:46:13 redis-server redis-7001.conf
1857 2018-10-24 15:46:16 redis-server redis-7002.conf
1858 2018-10-24 15:46:18 redis-server redis-7003.conf
1859 2018-10-24 15:46:20 redis-server redis-7004.conf
1860 2018-10-24 15:46:23 redis-server redis-7005.conf

此时集群还不可用,可以通过登录redis查看

redis-cli -p 7000
set hello world (error)CLUSTERDOWN The cluster is down

3.创建集群

准备ruby环境

  1. 下载、编译、安装Ruby
  2. 安装rubygem redis
  3. 安装redis-trib.rb命令

第一步,安装ruby(这些命令可以放入一个sh脚本文件里)

#下载ruby
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz #安装ruby
tar -xvf ruby-2.3.1.tar.gz
./configure --prefix=/opt/ruby/
make && make install #拷贝ruby命令到path下/usr/local/ruby
cp /opt/ruby/bin/ruby /usr/local/
cp bin/gem /usr/local/bin

安装ruby gem 包管理工具

wget http://rubygems.org/downloads/redis-3.3.0.gem

gem install -l redis-3.3.0.gem

#查看gem有哪些包
gem list -- check redis gem

通过ruby的包管理工具去安装redis包,安装后会生成一个redis-trib.rb这个命令,然后找到这个文件所在的绝对路径

find -name redis-trib.rb

一键开启redis-cluster集群

opt/redis-4.0.10/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
[root@yugo /opt/redis/src 18:42:14]#redis-cli -p 7000 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:10468
cluster_stats_messages_pong_sent:10558
cluster_stats_messages_sent:21026
cluster_stats_messages_ping_received:10553
cluster_stats_messages_pong_received:10468
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:21026

测试写入集群数据,登录集群必须使用redis-cli -c -p 7000必须加上-c参数

127.0.0.1:7000> set name chao
-> Redirected to slot [5798] located at 127.0.0.1:7001
OK
127.0.0.1:7001> exit
[root@yugo /opt/redis/src 18:46:07]#redis-cli -c -p 7000
127.0.0.1:7000> ping
PONG
127.0.0.1:7000> keys *
(empty list or set)
127.0.0.1:7000> get name
-> Redirected to slot [5798] located at 127.0.0.1:7001
"chao"

集群ok

查看集群状态的命令

redis-cli -p 7000 cluster info  

redis-cli -p 7000 cluster nodes  #等同于查看nodes-7000.conf文件节点信息

Linux之redis-cluster的更多相关文章

  1. redis集群之REDIS CLUSTER

    redis集群之REDIS CLUSTER 时间 2016-04-11 17:05:00  NoSQL_博客园 原文  http://www.cnblogs.com/zhanchenjin/p/537 ...

  2. 全面剖析Redis Cluster原理和应用 (转)

    1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生 ...

  3. Redis Cluster集群搭建与应用

    1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...

  4. Redis Cluster的搭建与部署,实现redis的分布式方案

    前言 上篇Redis Sentinel安装与部署,实现redis的高可用实现了redis的高可用,针对的主要是master宕机的情况,我们发现所有节点的数据都是一样的,那么一旦数据量过大,redi也会 ...

  5. Redis Cluster 4.0 on CentOS 6.9 搭建

    集群简介 Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需 ...

  6. CentOS7 安装Redis Cluster集群

    上一篇中已经讲到了如何安装单击版Redis,这一篇我们来说下如何安装Cluster,关于哨兵模式这里我就不写文章安装了,有兴趣的同学可以自己去研究,哨兵模式可以在主从模式下在创建三台机器的哨兵集群监控 ...

  7. Redis Cluster搭建高可用Redis服务器集群

    一.Redis Cluster集群简介 Redis Cluster是Redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了Redis分布式的需求,当一个节点挂了可以快速的切换到另一个节 ...

  8. Redis Cluster集群架构实现(四)--技术流ken

    Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)--技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)--技术流ken>,< ...

  9. Linux下redis 的部署、主从与集群

    老男孩Python全栈6期——redis--------------------------Linux 操作系统 默认的内存管理机制RSS:page cache:anno page:Linux操作系统 ...

  10. linux --mariadb/redis数据库篇

    mariadb ---磁盘型数据库 基础安装 配置好yum源后,软件就可以通过配置的yum源进行安装,按理来讲安装mysql直接通过   yum install mariadb  -y  便可安装,但 ...

随机推荐

  1. Redis和Memcached的异同

    Memcached 可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS: 只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型. 无法进行持久化,数据不能备份,只能用于缓 ...

  2. python中的一些算法

    两个基础知识点:递归和时间复杂度 递归 递归函数的特点:自己调用自己,有结束条件,看下面例子: def fun1(x): """无结束条件,报错""& ...

  3. [LeetCode] 71. Simplify Path 简化路径

    Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...

  4. [LeetCode] 714. Best Time to Buy and Sell Stock with Transaction Fee 买卖股票的最佳时间有交易费

    Your are given an array of integers prices, for which the i-th element is the price of a given stock ...

  5. 利用function和bind实现回调功能

    介绍一种利用function和bind来实现回调的功能. C++参考手册中对function的介绍: std::function的实例能存储.复制及调用任何可调用的目标,包括:函数.lambda表达式 ...

  6. 创建 django 项目命令

    创建Django项目 django-admin startproject HelloWorld Django创建app cd HelloWorld python manage.py startapp ...

  7. pycharm爬取网页数据

    1 python环境的配置 1.1 安装python文件包,放到可以找到的位置 1.2 右键计算机->属性->高级环境设置->系统变量->Path->编辑->复制p ...

  8. linux 下用C实现 ATM 自动取款机功能 (进程间通信)

    直接先上图: 项目需求: 主要分为两人大模块: 客户端 .进入时的功能开户.销户.登录.解锁 开户:输入姓名.身份证号.设置密码,如果开户成功,则服务器上保存一个账号信号(一个账号存一个文件,文件名建 ...

  9. Scala 函数入门之默认参数和带名参数

    Scala 默认参数 在Scala中,有时我们调用某些函数时,不希望给出参数的具体值,而希望使用参数自身默认的值,此时就定义在定义函数时使用默认参数. def sayHello(firstName: ...

  10. uni-app项目导入第三方组件库muse-ui

    你说uni-app是什么 我说,uni-app是一套基于vue.js开发跨平台应用的前端框架,可编译多个平台,比如:Android.IOS.H5.微信小程序.支付宝小程序.头条小程序.百度小程序 懂行 ...