当前位置: 首页 > news >正文

redis集群介绍与搭建

目录

1.主从模式(master-slave)

1.1 搭建方式

1.2 测试主从模式

1.3 其他配置

1.4 主从模式的缺点

2. sentinel (哨兵)模式

2.1 搭建方式

2.2 测试sentinel模式

2.3 Redis Sentinel 的主要功能

2.4 Redis Sentinel 的工作流程


1.主从模式(master-slave)

1.1 搭建方式

主从模式的搭建和配置,以下面搭建一个 master 与两个 slave 为例
创建一个 master-slave 文件夹 

mkdir master-slave

进入 master-slave 

cd master-slave

创建三个文件夹 redis11, redis12, redis13。其中 redis11 为 master 文件,
redis12/redis13 为 slave 文件夹。准备需要的 redis 执行文件 

mkdir redis11 redis12 redis13

复制 redis-server 到每一个文件夹。 

root@ubuntu:/home/xiaoluo/soft# cp redis-6.0.8/src/redis-server master-slave/redis11
root@ubuntu:/home/xiaoluo/soft# cp redis-6.0.8/src/redis-server master-slave/redis12
root@ubuntu:/home/xiaoluo/soft# cp redis-6.0.8/src/redis-server master-slave/redis13

复制 redis-cli 到 master-slave 文件夹 

root@ubuntu:/home/xiaoluo/soft# cp redis-6.0.8/src/redis-cli master-slave/

在 master 的 redis11 里面添加配置文件redis.conf 

bind 0.0.0.0

port 8001

logfile "8001.log"

dbfilename "dump-8001.rdb"

daemonize yes

rdbcompression yes

在 slave 的 redis12 里面添加配置文件redis.conf

bind 0.0.0.0

port 8002

logfile "8002.log"

dbfilename "dump-8002.rdb"

daemonize yes

rdbcompression yes

slaveof 192.168.74.133 8001   #主机ip 和master端口

在 slave 的 redis12 里面添加配置文件redis.conf

bind 0.0.0.0

port 8003

logfile "8003.log"

dbfilename "dump-8003.rdb"

daemonize yes

rdbcompression yes

slaveof 192.168.74.133 8001   #主机ip 和master端口

创建 start-all.sh 的 shell 脚本文件 

 
#!/bin/bash

cd redis11
./redis-server redis.conf &

cd ..

cd redis12
./redis-server redis.conf &

cd ..

cd redis13
./redis-server redis.conf &

cd ..

执行start-all.sh,查看 redis 启动情况

 

1.2 测试主从模式

1.3 其他配置

在 redis.conf 中,还有一些关于主从的其他配置,按需配置即可。
首先谈谈我对主从模式的必要性:
主从模式的一个作用是备份数据,这样当一个节点损坏(指不可恢复的硬件损坏)时,数据因为有备份,可以方便恢复。
另一个作用是负载均衡,所有客户端都访问一个节点肯定会影响 Redis 工作效率,有了主从以后,查询操作就可以通过查询从节点来完成。
对主从模式必须的理解(结论已经验证过,可以自行验证):
一个 Master 可以有多个 Slaves
默认配置下,master 节点可以进行读和写,slave 节点只能进行读操作,写操作被禁止
不要修改配置让 slave 节点支持写操作,没有意义,原因一,写入的数据不会被同步到其他节点;原因二,当 master 节点修改同一条数据后,slave 节点的数据会被覆盖掉
slave 节点挂了不影响其他 slave 节点的读和 master 节点的读和写,重新启动后会将数据从 master 节点同步过来
master 节点挂了以后,不影响 slave 节点的读,Redis 将不再提供写服务,master 节点
启动后 Redis 将重新对外提供写服务。
master 节点挂了以后,slave节点不会重新选一个 master 

1.4 主从模式的缺点

master 节点挂了以后,redis 就不能对外提供写服务了,因为剩下的 slave 不能成为master
这个缺点影响是很大的,尤其是对生产环境来说,是一刻都不能停止服务的,所以一般的生产坏境是不会单单只有主从模式的。所以有了下面的 sentinel 模式。 

2. sentinel (哨兵)模式

2.1 搭建方式

在主从模式的基础上面,将端口从 8001 改为 9001,8002 改为 9002,8003 改为 9003 

root@ubuntu:/home/xiaoluo/soft# mkdir sentinel
root@ubuntu:/home/xiaoluo/soft# cd master-slave/
root@ubuntu:/home/xiaoluo/soft/master-slave# cp -r ./* ../sentinel/
root@ubuntu:/home/xiaoluo/soft/master-slave# cd ../sentinel/
root@ubuntu:/home/xiaoluo/soft/sentinel# mv redis11 redis21
root@ubuntu:/home/xiaoluo/soft/sentinel# mv redis12 redis22
root@ubuntu:/home/xiaoluo/soft/sentinel# mv redis13 redis23

复制 redis-sentinel 到 redis21/redis22/redis23 的文件夹中

复制 sentinel.conf 到 redis21/redis22/redis23

root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/src/redis-sentinel ./redis21
root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/src/redis-sentinel ./redis22
root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/src/redis-sentinel ./redis23
root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/sentinel.conf ./redis21
root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/sentinel.conf ./redis22
root@ubuntu:/home/xiaoluo/soft/sentinel# cp ../redis-6.0.8/sentinel.conf ./redis23

修改 sentinel.conf 文件 

三个sentinel.conf都需要修改为监控master节点

修改start-all.sh,除了运行master和slave节点还需要运行三个sentinel,运行start-all.s

#!/bin/bash

cd redis21
./redis-server redis.conf &

cd ..
cd redis22
./redis-server redis.conf &

cd ..
cd redis23
./redis-server redis.conf &

cd ..
cd redis21

./redis-sentinel sentinel.conf &

cd ..
cd redis22

./redis-sentinel sentinel.conf &

cd ..
cd redis23

./redis-sentinel sentinel.conf &

2.2 测试sentinel模式

第一次运行,9001是master节点,我们kill掉9001端口的服务 

 

 可以看到,此时master节点已经切换到9002端口 。

2.3 Redis Sentinel 的主要功能

Sentinel 的主要功能包括主节点存活检测、主从运行情况检测、自动故障转移(failover)、主 从切换。Redis 的 Sentinel 最小配置是一主一从。 Redis 的 Sentinel 系统可以用来管理多个 Redis 服务器,该系统可以执行以下四个任务:

监控
Sentinel 会不断的检查主服务器和从服务器是否正常运行。
通知
当被监控的某个 Redis 服务器出现问题,Sentinel 通过 API 脚本向管理员或者其他的应用程序发送通知。
自动故障转移
当主节点不能正常工作时,Sentinel 会开始一次自动的故障转移操作,它会将与失效主节点 是主从关系的其中一个从节点升级为新的主节点, 并且将其他的从节点指向新的主节点。
配置提供者
在 Redis Sentinel 模式下,客户端应用在初始化时连接的是 Sentinel 节点集合,从中获取主节点的信息。

2.4 Redis Sentinel 的工作流程

 Sentinel 负责监控集群中的所有主、从 Redis,当发现主故障时,Sentinel 会在所有的从中选 一个成为新的主。并且会把其余的从变为新主的从。同时那台有问题的旧主也会变为新主的 从,也就是说当旧的主即使恢复时,并不会恢复原来的主身份,而是作为新主的一个从。
在 Redis 高可用架构中,Sentinel 往往不是只有一个,而是有 3 个或者以上。目的是为了让 其更加可靠,毕竟主和从切换角色这个过程还是蛮复杂的。
sentinel 模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一 台服务器存放不下的情况时,主从模式或 sentinel 模式就不能满足需求了,这个时候需要 对存储的数据进行分片,将数据存储到多个 Redis 实例中,就是下面要讲的。

 

相关文章:

  • Linux系统命令与网络、磁盘参数和日志监控命令
  • mysql 8.0版本修改密码
  • 解决Navicat 连接mysql报错:Can‘t connect to MYSQL server on “ip address“(10061)
  • jsoncons使用之: 构造json
  • 使用reserve来避免不必要的内存重新分配
  • redis 编译报错 zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: 没有那个文件或目录
  • linux下hiredis安装、C接口编程
  • redis源码学习之数据结构---双向链表
  • redis源码分析--事件驱动模型
  • ubuntu下zmq编译安装及请求-应答模式测试
  • c++输出:怎么解决数字过大时默认使用科学计数法输出的问题?
  • c++11实现一个自动注册的工厂模式
  • zmq发布-订阅模式c++实现
  • linux报错:bash: syntax error near unexpected token `(‘ --路径中有括号怎么处理?
  • golang学习总结--函数
  • 【391天】每日项目总结系列128(2018.03.03)
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • canvas 高仿 Apple Watch 表盘
  • es6(二):字符串的扩展
  • HTML中设置input等文本框为不可操作
  • Java IO学习笔记一
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript设计模式之工厂模式
  • Java反射-动态类加载和重新加载
  • java中的hashCode
  • Mybatis初体验
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • opencv python Meanshift 和 Camshift
  • Vue 2.3、2.4 知识点小结
  • Web设计流程优化:网页效果图设计新思路
  • Yeoman_Bower_Grunt
  • 浮动相关
  • 将 Measurements 和 Units 应用到物理学
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 微服务核心架构梳理
  • 微信小程序开发问题汇总
  • 一个JAVA程序员成长之路分享
  • 异常机制详解
  • 赢得Docker挑战最佳实践
  • 浅谈sql中的in与not in,exists与not exists的区别
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (ZT)出版业改革:该死的死,该生的生
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (三)uboot源码分析
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (译)计算距离、方位和更多经纬度之间的点
  • (正则)提取页面里的img标签
  • (转)人的集合论——移山之道
  • *Django中的Ajax 纯js的书写样式1
  • .java 9 找不到符号_java找不到符号
  • .NET文档生成工具ADB使用图文教程