关于redis集群:Redis-Cluster-集群解决方案

3次阅读

共计 2849 个字符,预计需要花费 8 分钟才能阅读完成。

Redis Cluster 集群解决方案

  • 多个 Redis 实例协同进行
  • 采纳 slot(槽)宰割数据,是 CRC16 与 16384 取模后扩散
  • 主从构造和选举算法,保障每个节点的可靠性
  • 客户端能够连贯任意一个 node 进行操作

  • 所有的 redis 节点彼此互联(PING-PONG 机制),外部应用二进制协定优化传输速度和带宽。
  • 节点的 fail 是通过集群中超过半数的节点检测生效时才失效。
  • 客户端与 redis 节点直连,不须要两头 proxy 层,客户端不须要连贯集群所有节点,连贯集群中任何一个可用节点即可。
  • redis-cluster 把所有的物理节点映射到 [0-16383] slot 上,cluster 负责保护 node <-> slot <-> value

Redis Cluster 注意事项

  • 不齐全反对批量操作:mset、mget
  • 事务不能跨节点反对
  • 不反对多实例
  • key 是最小粒度
  • 起码 6 个能力保障组成残缺高可用的集群
  • 连贯的时候只须要连贯 1 台服务器即可。
  • 如果 1 个主从连贯宕机的话,那么集群就宕机了。

Redis Cluster 配置步骤

(倡议应用官网安装包的形式装置 redis,不要应用 apt-get install 或者 yum 间接装置)

  1. 别离装置 6 台 服务器,三个主节点,三个从节点

我这里采纳的是虚拟机,相应的 ip 地址别离为:

  • 192.168.174.128(28 号服务器)
  • 192.168.174.129(29 号服务器)
  • 192.168.174.130(30 号服务器)
  • 192.168.174.131(31 号服务器)
  • 192.168.174.132(32 号服务器)
  • 192.168.174.133(33 号服务器)
  1. 配置 redis.conf 配置文件 (在所有的服务器上操作)

vim /etc/redis/redis.conf

  • 第一步:

# 默认为本地 ip 地址,须要改成以后服务器的 ip 地址,以便其余服务器能够失常拜访
  69 bind 127.0.0.1 ::1
  
# 比方 28 号服务器更改为以下 ip 地址
bind 192.168.174.128
  • 第二步:

# 这个参数的含意是指:禁止公网连贯 redis 缓存,这样能够增强 redis 安全性。如果是在线上环境的话,咱们不须要更改此参数值,而后须要进行设置账号密码,进行 auth 认证。这里为了测试不便,咱们间接改成 no
  89 protected-mode yes
  
# 须要更改为以下
protected-mode no
  • 第三步:开启集群相干参数

# 默认集群是敞开的
 815 # cluster-enabled yes

# 须要更改为以下(去除掉 # 号正文即可)815 cluster-enabled yes
  • 第四步:开启集群配置文件
# 默认集群配置文件是敞开的
 823 # cluster-config-file nodes-6379.conf
 
# 须要更改为以下(去除掉 # 号正文即可)823 cluster-config-file nodes-6379.conf 
 
  • 第五步:开启集群超时工夫
# 当一个节点呈现问题的时候,最大超时连接时间为 15s,当超过 15s 还没有连贯的时候,就会认为该节点呈现故障了,就会通过选举算法,将从服务器晋升为主服务器。该参数默认是敞开的。829 # cluster-node-timeout 15000
 
# 须要更改为以下(去除掉 # 号正文即可)829 cluster-node-timeout 15000
 
  1. 装置 ruby 组件。如果不装置这个软件,集群的时候,会报组件谬误。你须要在那台服务器下面做集群,你就须要在哪台服务器上安装这个组件,并不是每台服务器下面都装置。这里采纳第一台服务器做集群,因而在第一台服务器上安装 ruby 组件。(在 28 号服务器上操作)
sudo apt install ruby
  1. 装置其余组件 (在 28 号服务器上操作)
sudo gem install redis
  1. 配置集群 (在 28 号服务器上操作)

因为我是间接采纳的 apt-get install 的形式装置的 redis 因而,服务器下面的 redis 工具 redis-trib.rb/usr/share/doc/redis-tools/examples 目录下。如果你是通过安装包装置的 redis 那么请间接到 redis 解压目录中执行命令,如:~/redis-4.0.9/src/redis-trib.rb

/usr/share/doc/redis-tools/examples/redis-trib.rb create --replicas 1 192.168.174.128:6379 192.168.174.129:6379 192.168.174.130:6379 192.168.174.131:6379 192.168.174.132:6379 192.168.174.133:6379

如果呈现如下报错时

问题起因:
slot 插槽被占用了(这是搭建集群前时,以前 redis 的旧数据和配置信息没有清理洁净。)
解决方案如下:
用 redis-cli 登录到每个节点执行 flushall 和 cluster reset 就能够了

  1. 连贯集群 (在任意一台服务器上操作)

这里我筛选的是 ip 地址为:192.168.174.131 的服务器,特地阐明下,当执行 keys 命令的时候,只针对于以后服务器

# 带 -c 参数示意连贯集群
redis-cli -h 192.168.174.131 -c
  1. 测试
alex@alex-virtual-machine:~$ redis-cli -h 192.168.174.131 -c    # 连贯的 31 号服务器
192.168.174.131:6379> keys *  # 这里的 keys 也只能查看所有在 31 号服务器下面的 keys
(empty list or set)
192.168.174.131:6379> set aa 111  # 轻易设置一个 key
-> Redirected to slot [1180] located at 192.168.174.128:6379  # 数据却在 28 号服务器上被保留
OK
192.168.174.128:6379>   # 并且此时的状态间接跳到了 28 号服务器下面

alex@alex-virtual-machine:~$ redis-cli -h 192.168.174.129 -c  # 通过 29 号服务器连贯集群
192.168.174.129:6379> get aa  # 从 29 号服务器中去取值
-> Redirected to slot [1180] located at 192.168.174.128:6379  # 会间接从 28 号服务器中返回值
"111"
192.168.174.128:6379>   # 并且此时的状态间接跳到了 28 号服务器下面

alex@alex-virtual-machine:~$ redis-cli -h 192.168.174.130 -c  # 通过 30 号服务器连贯集群
192.168.174.130:6379> keys *  # 30 号服务器中并没有设置过 key,如果 30 号服务器能够取出值,证实能够跨服务器取出 keys,然而并没有数据,证实 keys 只能取出以后服务器中的 keys
(empty list or set)
192.168.174.130:6379> 

原文链接地址

正文完
 0