zoukankan      html  css  js  c++  java
  • Redis Cluster

    集群教程:http://redisdoc.com/topic/cluster-tutorial.html

    一、为什么要使用Redis集群?

    通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。Redis是一个很好的Cache工具。大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿。由于内存大小的限制,使用一台 Redis 实例显然无法满足需求,这时就需要使用 多台 Redis (集群)作为缓存数据库。才能在用户请求时快速的进行响应。

    二、Redie集群架构之Redis Cluster

    RedisCluster使用数据分片(sharding)来实现: 一个 Redis 集群包含16384个哈希槽(hash slot), 数据库中的每个键都属于这16384个哈希槽的其中一个,集群使用公式HASH_SLOT = CRC16(key) 16384来计算键key属于哪个槽。

    群中的每个节点负责处理一部分哈希槽。 举个例子, 一个集群可以有三个哈希槽, 其中:

    • 节点 A 负责处理 0 号至 5500 号哈希槽。
    • 节点 B 负责处理 5501 号至 11000 号哈希槽。
    • 节点 C 负责处理 11001 号至 16383 号哈希槽。

    三、Redis Cluster中的主从复制

    为了使得集群在一部分节点下线或者无法与集群的大多数(majority)节点进行通讯的情况下, 仍然可以正常运作, Redis 集群对节点使用了主从复制功能: 集群中的每个节点都有 1 个至 N 个复制品(replica), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave)。

    优点:

    • 无需Sentinel哨兵监控,如果Master挂了,Redis Cluster内部自动将Master对应的某一个Slave切换成Master;不过,如果有一个Master及其所有Slave都挂了的话,比如0 -5500 号哈希槽下的Master和Slave都挂了,Redis Cluster将会停止运作。
    • 可以进行水平扩容。

    缺点:

    • 资源隔离性较差,不保证数据的强一致性。
    • 批量操作没有被实现,这是一个坑。

    注意:Redis Cluster不像单机 Redis 那样支持多数据库功能(db0 ~ db15), 集群只使用默认的  0 号数据库,即 db0。

    四、Redis Cluster 搭建、开启

    4.1 搭建

    通过配置,开启redis cluster:

    bind 127.0.0.1
    port 7001
    daemonize yes
    logfile /var/redis/redis-7001.log
    dbfilename dump-7001.rdb
    dir /opt/redis/data
    # 开启集群模式
    cluster-enabled yes
    # 集群内部的配置文件
    cluster-config-file nodes-7001.conf
    # redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务,因此生产环境一般为no
    cluster-require-full-coverage no

    redis支持多实例的功能,这里是在单机演示集群搭建,需要6个实例,三个主节点,及其对应三个从节点,数量为6个节点才能保证高可用的集群。

    # 使用sed命令快速创建6个实例配置
    sed "s/7001/700x/g" redis-7001.conf > redis-700x.conf

    检查redis服务的端口、进程:

    netstat -tunlp|grep redis
    ps -ef|grep redis

    此时集群还不用:

    可以看到哈希插槽没有提供,所以接下来我们通过ruby的脚本,实现自动分配槽位。

    五、使用ruby创建开启 Redis Cluster

    5.1 准备ruby环境

    cd /opt
    wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.2.tar.gz
    tar xzvf ruby-2.6.2.tar.gz
    cd ruby-2.6.2
    ./configure --prefix=/opt/ruby
    make && make install
    ln -s /opt/ruby/bin/ruby /usr/bin/ruby
    ln -s /opt/ruby/bin/gem /usr/bin/gem

    安装Redis的Ruby客户端库:

    gem install redis

    查看gem有哪些包:

    gem list -- check redis gem

    5.2 一键开启redis-cluster集群

    # 每个主节点,有一个从节点,代表 --cluster-replicas 1
    redis-cli --cluster create 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 127.0.0.1:7006 --cluster-replicas 1

    5.3 查看集群状态

    redis-cli -p 7001 info
    redis-cli -p 7001 cluster info
     
    # 等同于查看nodes-7000.conf文件节点信息
    redis-cli -p 7001 cluster nodes  
    # 查看集群主节点状态
    redis-cli -p 7001 cluster nodes | grep master
    # 查看集群从节点状态
    redis-cli -p 7001 cluster nodes | grep slave

    5.4 测试写入集群数据

    注意:登录集群必须使用 redis-cli -c -p 7001 必须加上 -c 参数,不然会出错

    写入数据:

    读取数据:

    搞定!

  • 相关阅读:
    哇~~
    震作震作~~life is only Soso
    真j8无聊
    川行之旅
    可爱的java,我又来看你了,
    暑假周进度总结报告2
    暑假周进度总结报告1
    暑假周进度总结报告3
    2017级软工经验交流体验
    暑假周进度总结报告4
  • 原文地址:https://www.cnblogs.com/believepd/p/10617435.html
Copyright © 2011-2022 走看看