zoukankan      html  css  js  c++  java
  • Redis集群

    redis最开始使用主从模式做集群,若master宕机需要手动配置slave转为master;后来为了高可用提出来哨兵模式,该模式下有一个哨兵监视master和slave,若master宕机可自动将slave转为master,但它也有一个问题,就是不能动态扩充;所以在3.x提出cluster集群模式。

    集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果

    集群作用

    • 分散单台服务器的访问压力,实现负载均衡
    • 分散单台服务器的存储压力,实现可扩展性
    • 降低单台服务器宕机带来的业务灾难

    Redis集群结构设计

    数据存储设计

    Redis集群预分好16384个槽,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个槽中。

    key => CRC16(key) => 92083…9412 => %16384 => key应该保存的位置

    集群内部通讯设计

    • 各个Redis存储空间保存各个存储空间中槽的编号数据(保证最多两次查找数据)

    Cluster集群结构搭建

    配置Cluster(redis.conf)

    cluster-enabled yes #开启Cluster集群
    cluster-config-file nodes-6379.conf #cluster配置文件名
    cluster-node-timeout 10000 #节点服务响应超时时间,10秒无响应判定该节点下线或切换为从节点

    redis配置文件整体内容

    port 6384
    daemonize no
    #logfile "log_6384.log"
    dir ./data
    save 60 2
    stop-writes-on-bgsave-error yes
    # rdb
    rdbcompression yes
    rdbchecksum yes
    dbfilename "dump-6384.rdb"
    
    #aof 
    appendonly yes
    appendfsync always
    appendfilename "appendonly-6384.aof"
    bind 127.0.0.1
    
    #集群
    cluster-enabled yes
    cluster-config-file nodes-6384.conf
    cluster-node-timeout 10000

    配置服务器(3主3从)

    [root@localhost redis-config]# sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf
    [root@localhost redis-config]# sed "s/6379/6381/g" redis-6379.conf > redis-6381.conf
    [root@localhost redis-config]# sed "s/6379/6382/g" redis-6379.conf > redis-6382.conf
    [root@localhost redis-config]# sed "s/6379/6383/g" redis-6379.conf > redis-6383.conf
    [root@localhost redis-config]# sed "s/6379/6384/g" redis-6379.conf > redis-6384.conf
    [root@localhost redis-config]# sed "s/6379/6385/g" redis-6379.conf > redis-6385.conf

    启动Redis服务

    redis-server redis-config/redis-6379.conf
    redis-server redis-config/redis-6380.conf
    redis-server redis-config/redis-6381.conf
    redis-server redis-config/redis-6382.conf
    redis-server redis-config/redis-6383.conf
    redis-server redis-config/redis-6384.conf

    启动Cluster

    redis.3以下,需要安装ruby。任选一台机器安装ruby即可

    # yum -y groupinstall "Development Tools"
    
    # yum install -y gdbm-devel libdb4-devel libffi-devel libyaml libyaml-devel ncurses-devel openssl-devel readline-devel tcl-devel
    
    # mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
    
    # wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz -P ~/rpmbuild/SOURCES
    
    # wget http://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec -P ~/rpmbuild/SPECS
    
    # rpmbuild -bb ~/rpmbuild/SPECS/ruby22x.spec
    
    # rpm -ivh ~/rpmbuild/RPMS/x86_64/ruby-2.2.3-1.el7.x86_64.rpm
    
    # gem install redis                 #目的是安装这个,用于配置集群
    # cp /usr/local/redis/src/redis-trib.rb /usr/bin/
    
    # redis-trib.rb create --replicas 1(从一) host(服务器地址):port(端口号)

    redis.3以上,不需要安装ruby,直接创建集群即可

    redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 
    --cluster-replicas 1 # 1:主一从一,2:主一从二

    主从自动分配先分配主服务,根据--cluster-replicas n 规则分配从服务

    写入数据

    [root@localhost bin]# redis-cli -p 6379
    127.0.0.1:6379> set name zhangsan
    (error) MOVED 5798 127.0.0.1:6380

    出现错误,原因6379的redis存储空间中没有5798号槽

    [root@localhost bin]# redis-cli -p 6379 -c
    127.0.0.1:6379> set name zhangsan
    -> Redirected to slot [5798] located at 127.0.0.1:6380
    OK
    127.0.0.1:6380> 

    查看cluster-config-file

    [root@localhost data]# cat nodes-6379.conf 
    #主机标识 #服务器地址和端口 主从标识                  分配槽编号 0e1db5fad61023c7f7207149125effba769263ec
    127.0.0.1:6381@16381 master - 0 1632633779000 3 connected 10923-16383 968b06c67a59dd3d858938e542bb915a1f883238 127.0.0.1:6383@16383 slave cba2c2226c2dc719110e30c03298f979528bf8bb 0 1632633778000 2 connected ef86d2bd93340bae5285945ae9a7fd45f17e8eeb 127.0.0.1:6379@16379 myself,master - 0 1632633778000 1 connected 0-5460 dd3593980e1315cb81213eb6e24d052a69dcaae6 127.0.0.1:6382@16382 slave ef86d2bd93340bae5285945ae9a7fd45f17e8eeb 0 1632633779000 1 connected 27988f069c06302feaaa0f4cae4a07e1f6380533 127.0.0.1:6384@16384 slave 0e1db5fad61023c7f7207149125effba769263ec 0 1632633780377 3 connected cba2c2226c2dc719110e30c03298f979528bf8bb 127.0.0.1:6380@16380 master - 0 1632633780000 2 connected 5461-10922 vars currentEpoch 6 lastVoteEpoch 0
  • 相关阅读:
    年年岁岁花相似,岁岁年年竟相同
    两情相悦,亦或情投意合
    FreeBSD学习笔记1
    MySQL学习笔记2
    门户网站镜像站以及CDN技术
    候车
    MySQL学习笔记1
    JDBC | 第一章: 快速开始使用JDBC连接Mysql数据库之简单CRUD
    JDBC | 第零章: 什么是JDBC?
    JDBC | 第二章: JDBC之批量更新,添加,和删除操作
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15337824.html
Copyright © 2011-2022 走看看