zoukankan      html  css  js  c++  java
  • 《Redis内存数据库》Redis集群

    前言

    随着业务并发量的不断扩张,redis内存数据库也会有处理不过来的情况,故redis也考虑集群来缓解并发的压力。

    原理

    Redis 集群原理图

    1. Redis集群中总共了16384个Slot 用于存放redis的键值对。这个Slot会平均分配给每一组集群(图中3组就分配成5461,5461,5462)。

    2. 键值对的键值 经过crc16哈希处理后再除以16384 取余数,然后放入对应编号的Slot中。

    3. 应用程序连接任何一个主节点都能获取到键值对信息,并且如果写入操作,会自动告知应用你重连对应的节点去写入信息。

    搭建

    1. 环境准备linux, 安装ruby。

    yum install ruby rubygems -y

    设置:ali镜像

    gem sources -a http://mirrors.aliyun.com/rubygems/    -- 加入ali源
    gem sources --remove https://rubygems.org/ -- 删除国外源

    查看源为ali源。

    gem install redis -v 3.3.3    -- 安装ruby驱动

    创建redis实例的目录

    mkdir -p /home/redis/master-replica/700{0..5}/data
    mkdir -p /home/redis/master-replica/700{0..5}/log

    设置6个实例的配置文件

    cat > /home/redis/master-replica/7000/redis.conf <<EOF
    protected-mode no
    port 7000
    daemonize yes
    pidfile /var/run/redis_7000.pid
    loglevel notice
    logfile "/home/redis/master-replica/7000/log/redis.log"
    databases 16
    dbfilename dump.rdb
    dir /home/redis/master-replica/7000/data
    cluster-enabled yes          -- 开启集群
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes    
    EOF
    
    cat > /home/redis/master-replica/7001/redis.conf <<EOF
    protected-mode no
    port 7001
    daemonize yes
    pidfile /var/run/redis_7001.pid
    loglevel notice
    logfile "/home/redis/master-replica/7001/log/redis.log"
    databases 16
    dbfilename dump.rdb
    dir /home/redis/master-replica/7001/data
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    EOF
    
    cat > /home/redis/master-replica/7002/redis.conf <<EOF
    protected-mode no
    port 7002
    daemonize yes
    pidfile /var/run/redis_7002.pid
    loglevel notice
    logfile "/home/redis/master-replica/7002/log/redis.log"
    databases 16
    dbfilename dump.rdb
    dir /home/redis/master-replica/7002/data
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    EOF
    
    cat > /home/redis/master-replica/7003/redis.conf <<EOF
    protected-mode no
    port 7003
    daemonize yes
    pidfile /var/run/redis_7003.pid
    loglevel notice
    logfile "/home/redis/master-replica/7003/log/redis.log"
    databases 16
    dbfilename dump.rdb
    dir /home/redis/master-replica/7003/data
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    EOF
    
    cat > /home/redis/master-replica/7004/redis.conf <<EOF
    protected-mode no
    port 7004
    daemonize yes
    pidfile /var/run/redis_7004.pid
    loglevel notice
    logfile "/home/redis/master-replica/7004/log/redis.log"
    databases 16
    dbfilename dump.rdb
    dir /home/redis/master-replica/7004/data
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    EOF
    
    cat > /home/redis/master-replica/7005/redis.conf <<EOF
    protected-mode no
    port 7005
    daemonize yes
    pidfile /var/run/redis_7005.pid
    loglevel notice
    logfile "/home/redis/master-replica/7005/log/redis.log"
    databases 16
    dbfilename dump.rdb
    dir /home/redis/master-replica/7005/data
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    EOF

    启动六个实例

    redis-server /home/redis/master-replica/7000/redis.conf
    redis-server /home/redis/master-replica/7001/redis.conf
    redis-server /home/redis/master-replica/7002/redis.conf
    redis-server /home/redis/master-replica/7003/redis.conf
    redis-server /home/redis/master-replica/7004/redis.conf
    redis-server /home/redis/master-replica/7005/redis.conf

    查看六个实例是否启动

    ps -ef | grep redis

    最后构建集群

    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

    -- replicas 1 表示几个从库。 第一个节点会自动成为管理节点

    查看集群情况

    redis-cli -p 7000 cluster nodes | grep master    -- 查看主节点
    redis-cli -p 7000 cluster nodes | grep slave       -- 查看从节点

    管理

    增加集群节点

    新增两个实例(看上面实例新建方式),并且启动。

    redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000    -- 添加7006节点到7000集群中。

    重新分配Slot

    redis-trib.rb reshard 127.0.0.1:7000

    重新查询Slot分配情况:

    重节点加入集群 

    redis-trib.rb add-node --slave --master-id bcf4285a50d51929c21340bc25a05b9e77db4f74 127.0.0.1:7007 127.0.0.1:7000

    bcf4285a50d51929c21340bc25a05b9e77db4f74   是该从节点对应的主节点node_id。 查看从节点情况:

    删除集群节点

    第一步重新分配Slot节点(平均分配给剩余节点)

    redis-trib.rb reshard 127.0.0.1:7000

    按照平均分成3份分配回去

    done 表结束。 重复三次以上操作。

    删除集群节点

    redis-trib.rb del-node 127.0.0.1:7006 bcf4285a50d51929c21340bc25a05b9e77db4f74
    redis-trib.rb del-node 127.0.0.1:7007 19b771f682865b62c25818092fe82b4488dc26c5

    ok 删除集群节点完成。  被删除的节点不能直接再加回去。

    特别注意点:redis集群如果(redis.conf)设置上密码:

    requirepass 123456
    masterauth 123456

    则需要修改如下配置才能构建集群:

    vi /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb

    总结

    Redis 集群操作简单,可靠,故障恢复也是非常智能,推荐。

  • 相关阅读:
    在VisualStudio2013,2015中如何安装自定义项目模板
    获取assemblies信息in .net core
    Entity Framework Code Migration 新建、更新数据库
    TFS命令tf:undo(强制签入签出文件)
    教你在Android手机上使用全局代理
    双因素认证(2FA)教程
    ubuntu 禁用 guest 账户
    ffmpeg综合应用示例(三)——安卓手机摄像头编码
    linux 查看cpu的使用百分比
    加密货币 (Cryptocurrency) 市值 (market capitalization) 列表
  • 原文地址:https://www.cnblogs.com/jssj/p/13681986.html
Copyright © 2011-2022 走看看