Redis集群模式搭建
1.需求分析
为了配置高可用,我对编写的springboot进行了多份虚拟机部署,使用nginx的upstream进行了ip_hash负载均衡策略,搭建了集群。在springboot程序中,有操作redis的环节,电脑显示二维码,手机扫码登录,因为使用了ip_hash模式,所以在同一个ip访问的时候,谁扫码了,那么缓存就保存在当前服务器上,同一个ip访问的时候轮询进行验证是否登录也没有问题,但是如果一个使用有线网pc端,用手机的无线扫码,就会造成扫码处理的程序和验证登录的程序提供服务的节点不在同一个服务器上,造成了即便手机扫码后写入了redis,但是轮询验证的时候,还是找不到这个redis,于是我就想到了如何进行redis的集群搭建。
redis集群的三种模式:主从复制模式Sentinel;(哨兵)模式;Cluster 模式;搭建集群,主要的就是Cluster模式,也就是说,数据分散到多态服务器上,随便连接一台服务器,都可以取到集群中的任何一个数据。
1.Redis集群的原理和搭建
2.【Redis】redis集群搭建(非常详细,适合新手) V2 (在一台虚拟机上启动了6个redis实例,然后使用官方提供的redis-trib.rb脚本,进行集群的搭建,写的挺详细的,也有配图)
3.Redisson的使用
4.SpringBoot系列教程之Redis集群环境配置
5.[Redis] 你了解 Redis 的三种集群模式吗? redis集群的三种模式:主从复制模式Sentinel;(哨兵)模式;Cluster 模式,并对各种模式搭建进行了说明。
6.Redis 创建和使用集群(yum方式安装低版本) 使用yum方式安装的redis,也可以创建集群,其实原理都差不多的,就是复制多份实例,然后复制配置文件,使用Redis 5 cli自带的./redis-cli –cluster,加上参数启动多个实例,构建成集群就可以了。
1.安装
这一步我就不详细的说明了,只需要执行yum安装就可以了。我主要搭建了三台虚拟机,内网ip分别是192.168.1.85,192.168.1.86,192.168.1.87,每台服务器上我准备启动两个redis示例,这样就构成了6个节点,就可以组成了集群。
2.配置文件
1 | ## 端口号 |
1.搭建redis集群发现对Redis的bind的误区 关于为什么绑定0.0.0.0无法启动redis的问题探索,说明了这个bind操作的用途
3.复制文件
根据我的集群配置,我85,86,87这三台服务器上,都使用6380和6381这两个端口,
1 | ## 创建文件夹 |
4.启动
1 | ## 在每台服务器上6380和6381端口上启动实例 |
输入一个yes之后,最后成功启动了redis集群
1.Redis之——Redis 集群的安装(Redis+CentOS) 这里还有使用ruby和geom的方式启动集群的,我这里不需要
2.深入理解Redis Cluster 这里还有很多的参数,还有Failover的流程、客户端ASK重定向流程
3.Redis 集群教程 –cluster-replicas 参数的解释
4.Redis集群增加节点和删除节点 这个有点老了,使用的是redis-trib.rb脚本
5.redis 5.0中使用 redis-cli 添加cluster node 并 reshard 这是5.x版本的增加和收缩节点,感觉很复杂
6.Redis Cluster日常操作命令梳理 下线,上线,基本的命令等
5.关闭
逐个关闭redis实例进程即可
1 | ## 查看进程id |
6.测试集群
在任意一台服务器上,启动客户端,使用set命令设置值,然后在另一台服务器上,登录,使用get命令查看这个值
1 | ## 集群启动客户端 |
1.Redis集群性能测试工具redis-benchmark Redis-benchmark官方提供的工具,进行性能测试
2.redis及集群性能测试
3.看完还不会搭建高性能的Redis集群,小丑就是我! 文章没有具体的操作,但是对于相关的概念,都进行了形象生动的描述,也提供了思维导图进行数模,比如:数据快照,数据持久化以及,主从复制:多副本,哨兵:故障自动切换,分片集群:横向扩展。
4.redis集群节点宕机
7.问题
(1) (error) MOVED 原因和解决方案
1 | ## 启动集群时需要加入-c参数 |
1.(error) MOVED 原因和解决方案
(2) ‘always-show-logo yes’ Bad directive or wrong number of arguments
注释掉这一行
(3) ‘replica-serve-stale-data yes’ Bad directive or wrong number of arguments
这个问题和上一个问题是一样的,其实都是redis版本问题。在服务器里安装了两个版本的redis,/usr/bin/redis-server的版本非常的低,/usr/local/redis里面的版本比较高,选择正确的版本启动就可以了。
1 | ## 查看版本 |
1.Redis启动报错: Bad directive or wrong number of arguments 这里指出了是版本问题,使用正确的版本可以避免问题
8.springboot配置
我使用的springboot版本是2.3.1.RELEASE,使用的Redis版本是5.0.3,使用了RedisTemplate进行操作,配置文件如下:
1 | spring: |
RedisUtil内容如下,也挺简单,和单机的时候一样操作,集群会自动处理的,到底存储到哪里。
1 | package com.bibichuan.phemsjava.utils; |
1.SpringBoot整合Redis集群 使用SpringBoot 1.5.8.RELEASE版本整合Redis 4.0.11,实现Redis Pool操作Redis集群,版本太老了。
2.SpringBoot 2.1.x整合Redis Cluster集群配置相关示例