1.前言Redis在我们企业级开发中很常见,但是单机redis不能保证我们的稳定使用,所以我们准备搭建一个集群。Redis有两种高可用方案:HighavailabilitywithRedisSentinelScalingwithRedisCluster第一个就是我们这次要搭建的,就是高可用sentinel。如果主redis挂了,sentinel会投票进行failover!第二个是分片集群。Sentinel的缺点之一就是只能有一个master节点,写入效率太低。分片集群是为了解决sentry的问题,可以水平扩展,提高redis的性能!最少的哨兵匹配是三个哨兵,以奇数增加。分片集群的最低配置是三主三从。这次我是用虚拟机搭建的。小编也搭建了一个星期。master和slave没有问题,但是failover不行。根本原因是docker网络的问题。Redis和Sentinel不在同一个网段。很多教学用host,不知道现在不能启动成功,所以还是要在网络中!2、docker和dockercompose安装3、启动redismaster-slave1、创建redis-sentinel-test文件夹mkdirredis-sentinel-test2。创建两个文件夹cdredis-sentinel-test/mkdirredismkdirsentinel3。在redis创建的compose文件必须命名为docker-compose.yml。在本次测试中,redis不会将目录挂载到宿主机上。如果需要,您可以使用卷挂载到主机!vimdocker-compose.yml4.编辑compose文件这里为了测试方便,没有设置密码!protected-modeno:关闭它,可以连接到其他地方。slave-announce-ip:使用主机的ipversion:"4.1"services:master:image:redis:7.0.4container_name:redis-mastercommand:bash-c"redis-server--protected-modeno--slave-announce-ip192.168.84.143--slave-announce-port6379"端口:-6379:6379slave1:图像:redis:7.0.4container_name:redis-slave-1端口:-6380:6379命令:bash-c"redis-server--protected-modeno--slaveofredis-master6379--slave-announce-ip192.168.84.143--slave-announce-port6380"slave2:image:redis:7.0.4container_name:redis-slave-2ports:-6381:6379命令:bash-c"redis-server--protected-modeno--slaveofredis-master6379--slave-announce-ip192.168.84.143--slave-announce-port6381"5.启动redis主从compose更新,从原来的-开始到一个空间dockercomposeup-d6。提醒我们,启动后dockercompose会自动创建一个网络,就是以文件夹的名字+_default命名!我们在写sentinel的compose文件的时候,需要使用这个默认网络,否则不在同一个网段,无法切换failover!!码头网络ls7。查看主从状态输入masterredis:e77iscontaineriddockerexec-ite77/bin/bashredis-cli查看状态信息:info8。测试主从4.启动三个sentinel1.切换到sentinel文件夹cd。.cd哨兵/2。创建sentinel.conf文件。我们去官网找一个最低配置的文件:因为这是两个实例,我们只需要一个,只需要前四行:protected-modenosentinelmonitormymaster192.168。84.14363792sentineldown-after-millisecondsmymaster60000sentinelfailover-timeoutmymaster180000sentinelparallel-syncsmymaster1第一行:Redis监控一个名为mymaster的redis集群,我们可以随意写;后者是ip,我们宿主机的ip,port是redis的主端口;2是哨兵投出的票数。当主redis宕机时,三个哨兵必须投票让两个哨兵的redis成为主!!第二行:Sentinel主观判断实例下线所需时间,单位毫秒第三行:如果failover故障转移未能在指定时间内完成,则任务故障转移失败。第四行:限制故障转移后同时向新主节点发起复制操作的节点数量,效率越大越慢。新建一个sentinel1.conf文件,粘贴上面四行!vimsentinel1.conf复制两份,不作任何修改:cpsentinel1.confsentinel2.confcpsentinel1.confsentinel3.conf3.写入conpose文件version:"4.2"services:sentinel1:image:redis:7.0.4container_name:redis-sentinel-1ports:-26379:26379command:redis-sentinel/usr/local/etc/redis/sentinel.confvolumes:-/mydata/redis-sentinel-test/sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.confsentinel2:image:redis:7.0.4container_name:redis-sentinel-2ports:-26380:26379命令:redis-sentinel/usr/local/etc/redis/sentinel.confvolumes:-/mydata/redis-sentinel-test/sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.confsentinel3:image:redis:7.0.4container_name:redis-sentinel-3ports:-26381:26379命令:redis-sentinel/usr/local/etc/redis/sentinel.confvolumes:-/mydata/redis-sentinel-test/sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.confnetworks:default:name:redis_defaultexternal:truenetworks:yes上面提到的sentinel要和redis在同一个网络,这样才能完成failover!4、查看文件树tree如果没有可以安装:yum-yinstalltr??ee5.启动Sentineldockercomposeup-d6.查看Sentinel信息进入Sentinel容器:dockerexec-itc8/bin/bash连接Sentinel:redis-cli-p26379info1个master,2个slave,3个sentinel完成7.故障转移测试我们停止了master:dockerstope778.故障转移日志dockercomposelogs-f9.查看哨兵状态此时master节点已经自动切换到6381端口10、重启6379服务dockerrestarte77我们发现新添加的6379会作为从节点加入主节点!!五、集成SpringBoot1、导入小编依赖的springboot版本:2.3.7.RELEASEorg.springframework.bootspring-boot-starter-data-redisorg.springframework.bootspring-boot-starter-web前>2。yml配置server:port:8084spring:redis:sentinel:#sentinel.conf中的集群名称master:mymaster#我们只需要连接到Sentinel,Sentinel会在内部帮我们找到redis节点:-192.168.84.143:26379-192.168.84.143:26380-192.168.84.143:263813.JSON序列化配置/**@authorwangzhenjun@date2022/8/1816:37*/@Configuration公共类RedisConfig{@Bean@SuppressWarnings(value={"unchecked","rawtypes"})publicRedisTemplate