zoukankan      html  css  js  c++  java
  • Linux之redis-cluster

     一,为什么要用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文件节点信息

     

  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/qq631243523/p/10210642.html
Copyright © 2011-2022 走看看