• Linux 安装Redis<集群版>(使用Mac远程访问)


    阅读本文需要先阅读安装Redis<准备>

    一 架构细节

    所有的redis节点彼此互联(PING-PONG机制) 内部使用二进制协议优化传输速度和带宽

    节点的fail是通过集群中超过半数的节点检测失效时才生效

    客户端与redis节点直连 不需要中间代理层 客户端不需要连接集群所有节点 连接集群中任何一个可用节点即可

    redis-cluster把所有的物理节点映射到[0-16383]slot上 cluster负责维护(redis集群中内置了16384个哈希槽 当需要在redis集群中放置一个key-value时 redis先对key使用crc16算法算出一个结果 然后把结果对16384求余数 这样每个key都会对应一个编号在0-16383之间的哈希槽 redis会根据节点数量大致均等的将哈希槽映射到不同的节点)

    redis集群中至少应该有三个节点 要保证集群的高可用 需要每个节点有一个备份机

    redis集群至少需要6台服务器

    这里我准备了6台服务器

    120.79.191.xxx  39.108.121.xxx  120.77.148.xxx  39.108.162.xxx  120.79.62.xxx  112.74.54.xxx

    二 在六台服务器上分别安装运行Redis

    redis依赖

      yum install gcc-c++

    解压

      cd redis压缩包所在目录

      tar -xvf redis-4.0.10.tar.gz

    编译

      cd redis解压包内部 -> cd /hy/redis-4.0.10

      make

      make install PREFIX=/usr/local/redis

    配置文件准备

      cp /hy/redis-4.0.10/redis.conf /usr/local/redis/bin

    编辑(根据key修改value)

      vim /usr/local/redis/bin/redis.conf

    # 注释掉bind
    # bind 127.0.0.1
    # 设置后台启动
    daemonize yes
    # 设置集群密码
    masterauth redis12345
    # 设置单机密码
    requirepass redis12345
    # 开启集群
    cluster-enabled yes
    # 设置集群节点超时
    cluster-node-timeout 15000

    进入bin目录

      cd /usr/local/redis/bin

    启动

      ./redis-server redis.conf

    三 选择其中一台服务器配置集群

    ruby环境

      yum install curl

      curl -L get.rvm.io | bash -s stable

      gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

      curl -sSL https://get.rvm.io | bash -s stable

      source ~/.bashrc

      source ~/.bash_profile

      source /usr/local/rvm/scripts/rvm

      rvm list known

      rvm install 2.5.1

      rvm use 2.5.1

    安装ruby脚本库

      cd ruby脚本库压缩包所在目录

      gem install redis-4.0.1.gem

    编辑(根据key修改value)

      vim /usr/local/rvm/gems/ruby-2.5.1/gems/redis-4.0.1/lib/redis/client.rb

    :host => "0.0.0.0",
    :password => "redis12345",

    脚本文件准备

      cp /hy/redis-4.0.10/src/redis-trib.rb /usr/local/redis/bin

    执行脚本命令

      cd /usr/local/redis/bin

      ./redis-trib.rb create --replicas 1 120.79.191.xxx:6379 39.108.121.xxx:6379 120.77.148.xxx:6379 39.108.162.xxx:6379 120.79.62.xxx:6379 112.74.54.xxx:6379

    四 解决大坑

    场景: 使用./redis-cli存取数据没问题 使用JedisCluster存取数据时好时坏(部分key会导致Could not get a resource from the pool)

    原因: redis集群中某些节点IP是私有IP 所以分配到该节点上的key是访问不到的

    解决办法 -> 在六台服务器上分别修改配置

      进入bin目录

        cd /usr/local/redis/bin

      关闭

        ./redis-cli -a redis12345 shutdown

      编辑(将所有节点私有IP换成公网IP 重点关注myself,master或myself,slave 注意每份配置文件要修改的IP不一样)

        vim /usr/local/redis/bin/nodes.conf

      启动

        ./redis-server redis.conf

    希望道友早日看到 真是大坑...

  • 相关阅读:
    android:taskAffinity与android:finishOnTaskLaunch之我见
    Android 实现两屏幕互相滑动
    Android: 如何打开assets or raw文件夹下的数据库文件
    Android自定义进度条
    a标签在ie6下点了没反应
    strtotime 稍有不同
    php遍历时修改 传地址
    css3pie
    js 数据拷贝
    不重启iis的情况下切换iis的.net版本
  • 原文地址:https://www.cnblogs.com/huangyi-427/p/9291990.html
Copyright © 2020-2023  润新知