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会根据节点数量大致均等的将哈希槽映射到不同的节点)

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

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

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

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

安装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

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

上一篇:Codeforces-20152016-northwestern-european-regional-contest-nwerc-A题


下一篇:PHP开发过程中数组汇总 [ 持续更新系列 ]