zoukankan      html  css  js  c++  java
  • redis-cluster配置

    一、redis使用中遇到的瓶颈

      我们日常在对于redis的使用中,经常会遇到一些问题

      1、高可用问题,如何保证redis的持续高可用性。

      2、容量问题,单实例redis内存无法无限扩充,达到32G后就进入了64位世界,性能下降。

      3、并发性能问题,redis号称单实例10万并发,但也是有尽头的。

    二、redis-cluster的优势  

      1、官方推荐,毋庸置疑。

      2、去中心化,集群最大可增加1000个节点,性能随节点增加而线性扩展。

      3、管理方便,后续可自行增加或摘除节点,移动分槽等等。

      4、简单,易上手。

    三、redis-cluster名词介绍

      1、master  主节点、

      2、slave   从节点

      3、slot    槽,一共有16384数据分槽,分布在集群的所有主节点中。

    四、redis-cluster简介

    redis-cluster

    图中描述的是六个redis实例构成的集群

    6379端口为客户端通讯端口

    16379端口为集群总线端口

    集群内部划分为16384(0-16383)个数据分槽,分布在三个主redis中。

    从redis中没有分槽,不会参与集群投票,也不会帮忙加快读取数据,仅仅作为主机的备份。

    三个主节点中平均分布着16384数据分槽的三分之一,每个节点中不会存有有重复数据,仅仅有自己的从机帮忙冗余。

    问题:在什么情况下考虑使用Redis Cluster

    答:Redis ClusterRedis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。

    五、Redis数据分区

    Redis Cluster采用虚拟槽分区,所有的键根据哈希函数映射到0 ~ 16383,计算公式:slot = CRC16(key)&16383。每一个节点负责维护一部分槽以及槽所映射的键值数据。

    下图展现一个五个节点构成的集群,每个节点平均大约负责3276个槽,以及通过计算公式映射到对应节点的对应槽的过程。

     

    Redis虚拟槽分区的特性:

    解耦数据和节点之间的关系,简化了节点扩容和收缩难度。
    节点自身维护槽的映射关系,不需要客户端或者代理服务维护槽分区元数据。
    支持节点、槽、键之间的映射查询,用于数据路由、在线伸缩等场景。

    六、搭建Redis Cluster

    (一)准备6个redis数据库实例,准备6个配置文件redis-{7000....7005}配置文件

    -rw-r--r-- 1 root root 151 Jan  2 19:26 redis-7000.conf
    -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7001.conf
    -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7002.conf
    -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7003.conf
    -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7004.conf
    -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7005.conf

    redis-7000.conf配置如下

    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  #redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no

    redis支持多实例的功能,我们在单机演示集群搭建,需要6个实例,三个是主节点,三个是从节点,数量为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

    #确保每个配置文件中的端口修改!!

    (二)启动6个数据库实例

    [root@localhost s15rediscluster]# redis-server redis-7000.conf 
    [root@localhost s15rediscluster]# redis-server redis-7001.conf 
    [root@localhost s15rediscluster]# redis-server redis-7002.conf 
    [root@localhost s15rediscluster]# redis-server redis-7003.conf 
    [root@localhost s15rediscluster]# redis-server redis-7004.conf 
    [root@localhost s15rediscluster]# redis-server redis-7005.conf 

    检查日志文件

    cat 7000.log

    检查redis服务的端口、进程

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

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

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

    (三)配置ruby语言环境,脚本一键启动redis-cluster 

    1、下载ruby语言的源码包,编译安装

    wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

    2、解压缩

    tar -xvf ruby-2.3.1.tar.gz
    
    cd ruby-2.3.1
    
    ./configure --prefix=/opt/ruby/
    
    make && make install

    3、配置ruby的环境变量

    echo $PATH
        
    vim /etc/profile
    #写入最底行
    PATH=$PATH:/opt/ruby/bin/
    #读取文件
    source /etc/profile 

    4、下载安装ruby操作redis的模块包

    wget http://rubygems.org/downloads/redis-3.3.0.gem
    
    gem install -l redis-3.3.0.gem
    
    #查看gem有哪些包
    gem list -- check redis gem

    5、安装redis-trib.rb命令

    cp /opt/redis/src/redis-trib.rb /usr/local/bin/

    6、一键开启redis-cluster集群

    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
    
    #集群自动分配主从关系  7000、7001、7002为 7003、7004、7005 主动关系

    7、查看集群状态

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

    安装完毕后,检查集群状态

    [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

    8、测试写入集群数据,登录集群必须使用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

  • 相关阅读:
    USACO 3.3 A Game
    USACO 3.3 Camelot
    USACO 3.3 Shopping Offers
    USACO 3.3 TEXT Eulerian Tour中的Cows on Parade一点理解
    USACO 3.3 Riding the Fences
    USACO 3.2 Magic Squares
    USACO 3.2 Stringsobits
    USACO 3.2 Factorials
    USACO 3.2 Contact
    USACO 3.1 Humble Numbers
  • 原文地址:https://www.cnblogs.com/fengchong/p/10218706.html
Copyright © 2011-2022 走看看