什么是集群

Redis 集群实现了对 Redi s的水平扩容,即启动 N 个 Redis 节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。
Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求

Redis集群手把手教程_redis

主从复制的目的是为了减轻 Redis 服务器的 CPU 压力, 可以保证数据同步, 为了可以保证 Redis 的高可用, 容灾能力, 一般在每个节点使用主从 + 哨兵

Redis 集群提供了以下好处
  • 实现扩容
  • 分摊压力
  • 无中心配置相对简单
Redis 集群的不足
  • 多键操作是不被支持的
  • 多键的Redis事务是不被支持的。lua脚本不被支持。
  • 由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。

如果缓存数据量大, 也会有内存的压力, 这里使用的Redis4.0版本, 其它版本可能会有差异

安装ruby环境
  • 安装方式一 : 在线安装[ 并不推荐,因为有可能存在下载失败的情况 ]

yum install rubyyum install rubygems

  1. 将下载好的文件解压完后都拷贝包到虚拟机opt目录下
  2. 这里需要注意的是, 在安装 Ruby 之前必须装 C、C++ 语言的编译环境, Ruby是使用 C语言 编写的
  3. 安装教程 : 链接地址
  4. 开始安装ruby环境
  5. 按照依赖安装各个rpm包14个 , 安装命令

rpm -Uvh *.rpm --nodeps --force

  1. 如图 :
  2. 到 opt目录下在安装 redis-3.2.0.gem

gem install --local redis-3.2.0.gem

  1. 如图

    以上操作, 搭建集群的环境基本就准备好了
    删除之前的redis的数据[ 如果不删集群一定失败 rdb 和 aof ] [ 如果没有则可以不删]
开始集群的搭建
  1. 准备 6 个 redis 实例的配置文件

vim redis-6379.conf

include /myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump-6379.rdb
appendonly no
logfile ""
#打开集群
cluster-enabled yes
#设定节点配置文件
cluster-config-file nodes-6379.conf
#设置节点失联时间,超过该时间[毫秒]集群自动进行主从更换
cluster-node-timeout 15000

Redis集群手把手教程_数据库_02


2. 复制生成其他节点的配置文件:6380/6381/6389/6390/6391

[root@centos myredis]# cp redis-6379.conf redis-6380.conf [root@centos myredis]# cp redis-6379.conf redis-6381.conf [root@centos myredis]# cp redis-6379.conf redis-6390.conf [root@centos myredis]# cp redis-6379.conf redis-6391.conf [root@centos myredis]# cp redis-6379.conf redis-6389.conf [root@centos myredis]#

  1. 修改所有的配置文件中的端口号和文件名端口号一致,

:%s/6379/6380/g

  1. 启动6个redis 服务
将六个节点合成一个集群
  1. 组合之前,请确保所有redis实例启动后,nodes-xxxx.conf文件都生成正常。
  2. 切换到redis解压的目录src下,redis-trib.rb 可以对集群节点进行合并

cd /opt/redis-4.0.0/src

./redis-trib.rb create --replicas 1 192.168.230.200:6379 192.168.230.200:6380 192.168.230.200:6381 192.168.230.200:6389 192.168.230.200:6390 192.168.230.200:6391

  1. 如图
  2. 显示分配的槽个数

    显示以上内容基本Redis集群环境就构建成功了!
连接集群
  1. 使用 -c 采用集群策略连接,设置数据会自动切换到相应的写主机

redis-cli -c -p 6379

  1. 一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个
  2. 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
  3. 当设置值后,对自动分配对应的槽 , 如图

集群中录入值

  • 不在一个slot下的键值,默认是不支持多键操作, 是不能使用 mget , mset 等多键操作, 否则会出错。
  • 如下图
  • 可以通过{} 来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去。
  • 如下图

查询集群中的值

  • 计算键 key 应该被放置在哪个槽上。

CLUSTER KEYSLOT key

  • 如图
  • 返回槽 slot 目前包含的键值对数量。

CLUSTER COUNTKEYSINSLOT <slot>

  • 如图
  • 查看集群或节点的状态

cluster info/nodes

  • 如图
  • 主从的自动切换,必须保证节点中已经保存数据了
故障恢复
  1. 当主机宕机,从机会自动上位
  2. 主机回来后会作为上位的从机的slave
  3. 如果一个节点上的主从全部宕机,整个集群环境不可用,当节点主从重启后集群环境扔可以使用
  • 如果某一段插槽的主从都挂掉,而cluster-require-full-coverage 为yes ,那么 ,整个集群都挂掉
  • 如果某一段插槽的主从都挂掉,而cluster-require-full-coverage 为no ,那么,该插槽数据全都不能使用,也无法存储。

感谢阅读, 以上就是对 Redis 集群的搭建过程了, 如有什么更好的建议或方法 ,可以留言交流.