相关文章:
redis主从复制(读写分离)
redis哨兵模式
Redis配置详解

一、Redis主从搭建

本文讲解用的是Redis5.0.10搭建一主二从
Redis官方下载连接:http://download.redis.io/releases/

IP PORT 哨兵端口
Redis-master 192.168.118.130 6379 26379
Redis-slave01 192.168.118.129 6379 26379
Redis-slave02 192.168.118.130 6379 26379

江湖规矩,一般将哨兵(sentinel)端口设置为Redis端口前加2,其实没有什么要求,可以随便设置,只要不要端口冲突。

1、Linux下安装Redis

主服务器192.168.118.130

  • 下载Redis5.0.10.tar.gz,并上传只Linux服务器->解压
# 将redis解压到当前目录
tar -zxvf redis-5.0.10.tar.gz
# 将解压好的文件夹移到/usr/local下,并改名为redis
mv redis-5.0.10 /usr/local/redis
  • 编译redis
# 安装redis编译必备工具
yum install gcc-c++
# 进入redis目录下
cd /usr/local/redis
# 执行编译
make

走到下图结果,算是编译完成了

# 再执行下面语句
make install

2、Redis配置

  • 梳理文件,编写启动,停止脚本
    在配置redis.conf之前,我需要按我的习惯将各文件梳理一下
# 进入redis主目录
cd /usr/local/redis
# 创建目录bin(启动,停止命令),conf(配置文件),logs(日志),data(持久化数据)
mkdir bin
mkdir conf
mkdir logs
mkdir data
# 将redis目录下的redis.conf文件拷贝一份至conf文件夹下(redis主目录下的配置文件不动,作为备份)
cp redis.conf ./conf/
# 进入bin目录,在bin目录下写redis启动脚本,停止脚本
cd /usr/local/redis/bin
touch start.sh stop.sh
chmod 777 start.sh stop.sh

start.sh 脚本内容

#!/bin/sh#您可以在此处修改redis-server和conf的所在路径
REDIS_SERVER="/usr/local/redis/src/redis-server"
REDIS_CLI="/usr/local/redis/src/redis-cli"
REDIS_CONF="/usr/local/redis/conf/redis.conf"if [ ! -e $REDIS_SERVER ]; thenecho "$REDIS_SERVER does not exist!"exit -1
fiif [ ! -e $REDIS_CONF ]; then echo "$REDIS_CONF does not exist!"exit -1
ficmd="ps -ef | grep ${REDIS_SERVER} | grep -v grep | grep -v vim | grep -v defunct | awk '{ print \$2 }'"
#echo $cmdPID=$(eval ${cmd})
#echo $PIDif [ $PID"e" != "e" ]; thenecho "redis-server is running, can't start"exit -1
else$REDIS_SERVER $REDIS_CONF &
fistartfail=1
for i in `seq 0 180`
doPID=$(eval ${cmd})#echo $PIDif [ $PID"e" != "e" ]; then${REDIS_SERVER} --versionecho "Redis server is started..."startfail=0breakfisleep 1
doneexit $startfail

stop.sh脚本内容

#!/bin/sh#您可以在此处修改redis-server的所在路径
REDIS_SERVER="/usr/local/redis/src/redis-server"cmd="ps -ef | grep ${REDIS_SERVER} | grep -v grep | grep -v vim | grep -v defunct | awk '{ print \$2 }'"
#echo $cmdPID=$(eval ${cmd})if [ ${PID}"e" = "e" ]; thenecho "redis-server is not started"exit -1
elsekill $PID
fistopfail=1
for i in `seq 0 30`
doPID=$(eval ${cmd})#echo $PIDif [ ${PID}"e" != "e" ]; thenecho "redis-server is still running, waiting to stop[${i}]..."elseecho "redis-server is stoped"stopfail=0breakfisleep 1
done
exit $stopfail
  • 配置redis.conf
    我这边只记录我修改了的配置项
# 这里配置是本机的网卡地址,表示外部通过什么网卡来连接访问redis,
# 配置0.0.0.0或者不配置表示所有网卡都可以,具体解释请看本文开始的【Redis配置详解】
bind 0.0.0.0
# 后台进程运行
daemonize yes
# redis日志
logfile "/usr/local/redis/logs/redis.log"
# redis持久化文件目录
dir "/usr/local/redis/data"
# redis密码
requirepass "123456"
# 最大redis内存,达到这个就会触发内存淘汰机制
maxmemory 500M
# 内存淘汰策略
maxmemory-policy volatile-lru
# 开启aof
appendonly yes
# 这是作为从服务器向主服务器连接时必备的密码,为什么这台服务器作为主节点也要配置这个参数呢,
# 其实在主服务宕机后又重启时,这台机器会成为slave节点,这时候如果没有这个配置项,会连不上
masterauth '123456'
  • 配置其余两台从redis服务
    所有配置同主服务器,只需要在redis.conf中加入一条
# 指定主服务器
replicaof 192.168.118.130 6379
  • 分别启动三台redis服务器(./start.sh)
# 进入主服务器客户端
[root@localhost redis]# /usr/local/redis/src/redis-cli -h 192.168.118.130 -p 6379
# 输入密码鉴权
192.168.118.130:6379> auth 123456
# 查看redis相关信息,我们这里只关注redis的主从配置信息
192.168.118.130:6379> info


到这里Redis主从就搭建好了!!!

二、Redis哨兵模式搭建

虽然redis主从已经搭建完毕,但是当主节点宕机时,从节点并不会接手主节点的工作,只会傻傻得在那里不停地尝试连接主节点。然而这并不是我们想要的,我们希望主节点挂了后,从节点可以顶上去,让服务继续使用。

  • sentinel.conf配置,我们将redis主目录下的sentinel.conf复制一份进conf中
cd /usr/local/redis
cp sentinel.conf ./conf/
  • sentinel.conf配置详解
# 哨兵sentinel实例运行的端口
port 26379
# 守护进程模式
daemonize yes
# 开启守护进程时,哨兵进程id记录地址
pidfile /var/run/redis-sentinel.pid
# 指明日志文件名
logfile "sentinel.log"
# 进程工作目录
dir "/usr/local/redis/logs"
# 哨兵节点定期监控,master-name为自定义的主节点名称,master-ip为主节点ip,master-port为主节点端口号,
# quorum设置为2就代表至少要有两个哨兵认为主节点故障了,才算主节点客观下线了,一般设置为sentinel节点数的一半加一。
# 这里面的master-name自定义,但是需要所有sentinel配置文件中一致
sentinel monitor mymaster 192.168.118.130 6379 2
# 每个哨兵节点会定期发送ping命令来判断Redis节点和其余的哨兵节点是否是可达的,
# 如果超过了配置的times时间没有收到pong回复,就主观判断节点是不可达的,times的单位为毫秒。
sentinel down-after-milliseconds mymaster 30000
# 当哨兵节点都认为主节点故障时,哨兵投票选出的leader会进行故障转移,选出新的主节点,原来的从节点们会向新的主节点发起复制,
# 这个配置就是控制在故障转移之后,每次可以向新的主节点发起复制的节点的个数,最多为nums个,因为如果不加控制会对主节点的网络和磁盘IO资源很大的开销。
sentinel parallel-syncs mymaster 1
# 指定故障切换允许的毫秒数,超过这个时间,就认为故障切换失败,默认为3分钟
sentinel failover-timeout mymaster 180000
# redis的密码
sentinel author-pass mymaster 123456
#避免脚本重置,默认值yes,避免一个简单的安全问题(设置为yes就行,无需理会)
sentinel deny-scripts-reconfig yes
# 重命名你认为危险的命令,使之更安全
# SENTINEL rename-command mymaster CONFIG GUESSME
  • 编写哨兵启动,停止脚本
    同样在bin文件夹中
touch start-sentinel.sh stop-sentinel.sh
chmod 777 start-sentinel.sh stop-sentinel.sh

start-sentinel.sh脚本内容

#!/bin/sh#您可以在此处修改redis-server和conf的所在路径
SENTINEL_SERVER="/usr/local/redis/src/redis-sentinel"
SENTINEL_CONF="/usr/local/redis/conf/sentinel.conf"if [ ! -e $SENTINEL_SERVER ]; thenecho "$SENTINEL_SERVER does not exist!"exit -1
fiif [ ! -e $SENTINEL_CONF ]; then echo "$SENTINEL_CONF does not exist!"exit -1
ficmd="ps -ef | grep ${SENTINEL_SERVER} | grep -v grep | grep -v vim | grep -v defunct | awk '{ print \$2 }'"
#echo $cmdPID=$(eval ${cmd})
#echo $PIDif [ $PID"e" != "e" ]; thenecho "sentinel-server is running, can't start"exit -1
else$SENTINEL_SERVER $SENTINEL_CONF &
fistartfail=1
for i in `seq 0 180`
doPID=$(eval ${cmd})#echo $PIDif [ $PID"e" != "e" ]; then${SENTINEL_SERVER} --versionecho "sentinel server is stared..."startfail=0breakfisleep 1
doneexit $startfail

stop-sentinel.sh脚本内容

#!/bin/sh#您可以在此处修改redis-server的所在路径
SENTINEL_SERVER="/usr/local/redis/src/redis-sentinel"cmd="ps -ef | grep ${SENTINEL_SERVER} | grep -v grep | grep -v vim | grep -v defunct | awk '{ print \$2 }'"
#echo $cmdPID=$(eval ${cmd})if [ ${PID}"e" = "e" ]; thenecho "sentinel-server is not started"exit -1
elsekill $PID
fistopfail=1
for i in `seq 0 30`
doPID=$(eval ${cmd})#echo $PIDif [ ${PID}"e" != "e" ]; thenecho "sentinel-server is still running, waiting to stop[${i}]..."elseecho "sentinel-server is stoped"stopfail=0breakfisleep 1
doneexit $stopfail
  • 启动sentinel(哨兵)
    在启动哨兵前,确保你的redis服务是启动的,启动后可观察sentinel.conf,可以发现,sentinel会向sentinel.conf文件中拼接主从信息,哨兵节点信息。

还可以通过sentinel.log日志文件的日志信息查看哨兵的相关配置情况!!!
这时候我们可以停掉Redis主节点来验证哨兵。
通过一系列验证,你或许会发现Redis哨兵重新选举主节点后会将这个被选中的节点的redis.conf修改掉,具体的为删掉replicaof 配置项,而原来的主节点则添加replicaof 配置项,并指向新的主节点。所以旧的主节点再次启动就成从节点了。

三、springboot整合

配置:

spring.application.name=spring-boot-redis
server.port=8080
# 哨兵监听的redis server的名称
spring.redis.sentinel.master=mymaster
# 哨兵配置列表
spring.redis.sentinel.nodes=192.168.118.129:26379,192.168.118.130:26379,192.168.118.131:26379
# redis密码
spring.redis.password=123456

可无:

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();//关联template.setConnectionFactory(factory);//设置key的序列化器template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class));// hash的key也采用String的序列化方式template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(new Jackson2JsonRedisSerializer(Object.class));return template;}
}

测试:

Redis主从搭建(哨兵模式),springboot整合redis主从相关推荐

  1. Redis高可用方案-哨兵模式-SpringBoot整合

    哨兵是用来放哨的,能实时监控我们redis集群的状态,保证redis服务器不会挂掉 ​ 搭建:https://blog.csdn.net/Zer01ne/article/details/8301040 ...

  2. SpringBoot整合Redis客户端

    一.SpringBoot整合Redis的步骤 1. 导入SpringBoot整合Redis坐标,starter <dependency><groupId>org.springf ...

  3. Redis主从复制Redis哨兵机制Springboot整合哨兵

    目录 一.Redis主从复制 full resync(全量复制) partial resync(增量复制) 二.Redis主从复制配置 三.哨兵机制原理 每个 Sentinel 都需要定期执行的任务 ...

  4. springBoot整合redis单节点、redis哨兵、redis集群配置及redisClient区别

    springBoot整合redis单节点.redis哨兵.redis集群配置,redisClient jedis lettuce 区别? 1.springboot 整合redis单机模式: sprin ...

  5. 6 redis 编译失败_Centos7.8环境搭建Redis主从复制和哨兵模式

    本节我们搭建Redis主从复制和哨兵模式集群,集群的好处是把数据分散不不同的服务器上,解决网站中的很多高并发,高负载等问题,很好的提高网站的性能,也能解决mysql的数据读写问题,所以我们搭建集群非常 ...

  6. 一文读懂Redis的四种模式,单机、主从、哨兵、集群(*)

    前言: redis有多种模式:单机模式.主从模式.哨兵模式.集群模式 1.单机模式 安装一个redis,启动起来,业务调用即可. 单机在很多场景也是有使用的,例如在一个并非必须保证高可用的情况下. 优 ...

  7. SpringBoot整合redis实现发布订阅模式

    Redis的发布订阅模式 发布订阅(Pub/Sub):目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接 ...

  8. 跟着狂神学Redis(NoSql+环境配置+五大数据类型+三种特殊类型+Hyperloglog+Bitmap+事务+Jedis+SpringBoot整合+Redis持久化+...)

    跟着狂神学Redis 狂神聊Redis 学习方式:不是为了面试和工作学习!仅仅是为了兴趣!兴趣才是最好的老师! 基本的理论先学习,然后将知识融汇贯通! 狂神的Redis课程安排: nosql 讲解 阿 ...

  9. Redis学习(含 Springboot 整合 Redis)

    Redis NoSQL (not only sql) 在现代的计算系统上每天网络上都会产生庞大的数据量. 这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理. 1970年 E.F.Codd ...

  10. SpringBoot整合Redis+Redis缓存应用+Redis实现Session共享+...

    一.SpringBoot整合Redis 1.导入依赖 <!--存在Redis依赖--> <dependency><groupId>org.springframewo ...

最新文章

  1. 分水岭算法分割图像的原理概述及OpenCV代码实现
  2. 不能在 UTF8 和 UCS2 之间转换: failUTF8Conv
  3. python while函数_详解python while 函数及while和for的区别
  4. Python学习笔记:网络编程
  5. python函数参数类型及顺序_python函数参数类型及其顺序
  6. 【安卓开发 】Android初级开发(九)Android中封装View提供接口供点击事件回调的方法及使用
  7. [react] 请描述下你对react的新特性Hooks的理解?它有哪些应用场景?
  8. 二叉树的链表存储与遍历
  9. HCIE-Security Day6:5个实验深入浅出理解源NAT
  10. 7.72GB ARCGIS ERDAS ENVI干货教程网盘下载
  11. 计算机毕业设计springboot+vue餐厅点餐系统源码
  12. visio一分二连接线_Visio-换线流程(初稿)
  13. 黑苹果 U盘刻录工具Transmac与Etcher使用
  14. [linux shell] hostid使用方法以及原理
  15. java date the type is ambiguous_一个java ambiguous method 的问题
  16. 0基础前端开发,html5建站教程
  17. Like My Mother Always Said… by Erin McHugh
  18. mysql新增一个常数列_添加常数列
  19. 2022元旦首发,2021年阿里春招+秋招+社招+校招Java后端开发面试题汇总,看完轻松收下offer
  20. html 渐变透明写法,css实现透明渐变特效的示例代码

热门文章

  1. 数据挖掘与分析——回归模型
  2. Visual Studio 2008 安装出错 无法安装 问题合集
  3. 全网最细的Spring教程(一)
  4. C语言绘制象棋棋盘/残局
  5. JavaScript Errors 指南
  6. axios拦截器、ElementUI组件的使用
  7. 逻辑越权——垂直、水平越权
  8. Linux常用命令——nethogs命令
  9. 关于如何将代码上传到gitee仓库的详细步骤
  10. C语言写的一个简单的计算器