专栏首页JAVA乐园工作中常见的Redis部署模式

工作中常见的Redis部署模式

阅读文本大概需要10分钟。

0x01:单机模式

单机模式是redis部署的最常见模式,这种模式非常不安全。如果出现断电或者redis宕机的情况,大部分情况就会导致数据的丢失。不过这种模式也有他的优点:部署简单、节省资源。一般开发时和开发环境使用该模式。

0x02:主从模式

通过Redis持久化功能,保证了即使服务器宕机或者断电的情况下也不会损失(或少量损失)数据,因为持久化功能会把内存中数据间隔地保存到硬盘上,重启后会从硬盘上加载数据。

但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。为了避免出现单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。Redis 提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数据同步到其他数据库上。

在复制的概念中,数据库分为两类,一类是主库(master),另一类是从库(slave)。主库可以进行数据的读写操作,当写操作导致数据变化时会自动将数据同步给从库。而从数据库一般只有只读功能,并接受主数据库同步过来的数据。一个主库可以拥有多个从库,而一个从库只能拥有一个主库。

0x03:哨兵模式

当主库遇到异常中断服务后,开发者可以通过手动的方式选择一个从库来升格为主库,以使得系统能够继续提供服务。然而整个过程相对麻烦且需要人工介入操作,难以实现服务的自动化恢复。为此Redis 2.8中提供了哨兵工具来实现服务的自动化系统监控和故障恢复功能。哨兵的作用就是监控redis主库、从库是否正常运行,主库出现故障后自动将从库转换为主库。

例子:1主2从1哨兵

redis-server --port 6379 
redis-server --port 6380 --slaveof 192.168.0.167 6379 
redis-server --port 6381 --slaveof 192.168.0.167 6379

哨兵配置文件 sentinel.conf

sentinel monitor mymaster 192.168.0.167 6379  1

这里的1代表1个哨兵

注:配置哨兵监控一个系统时,只需要配置其监控主库即可,哨兵会自动发现所有复制该主库的从库

这样哨兵就能监控主库6379和从库6380、6381,一旦6379挂掉,哨兵就会在2个从库中选择一个作为主库。

0x04:集群模式

使用集群模式,只需要将每个数据库节点的cluster-enable配置打开即可。每个集群中至少需要三个主库才能正常运行。集群模式的最大优点就是可以7 * 24提供服务,最大的缺点就是需要大量服务器资源。

即使使用的是哨兵模式,redis每个实例的数据也是全量存储的,即就是每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。为了最大化利用内存,可以采用集群,就是分布式存储。即每台redis存储不同的内容。

集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。

哨兵模式基本已经可以实现高可用,读写分离 ;但是在这种模式下每台Redis 服务器都存储相同的数据,很浪费内存,所以在Redis 3.0上加入了cluster模式,实现的Redis的分布式存储,也就是说每台Redis节点上存储不同的内容。

每个实例的配置文件:

 cluster-enabled yes  --开启集群
 cluster-config-file nodes-6382.conf --集群配置文件名,每个实例配置的要不同,redis会根据文件名自动新建

集群的运行

# redis安装目录的src执行
./redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385

本文分享自微信公众号 - JAVA乐园(happyhuangjinjin88),作者:java乐园

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot集成tkMybatis插件

    通用 Mapper4 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example相关的单表操作。通用 Mapper 是为...

    java乐园
  • jmeter参数化csv+用户参数配合(请求加密,返回解密)

    1. 所有的接口都经过网关,意味着:入参和出参都需要加密,是所有的参数而不是单个参数的加密;

    java乐园
  • JVM各区溢出分析

    由于在Hotspot虚拟机中中不区分虚拟机栈和本地方法栈,因此通过-Xoss修改参数是无效的,可以通过修改-Xss设定。

    java乐园
  • 哨兵机制:主库挂了,如何不间断服务?

    我们都了解 Redis主从库集群模式。在这个模式下,如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,进行相关的操作,但是如果主库发生故障了,那就直接...

    极客小智
  • Nature Neuroscience:经颅交流电刺激(tACS)有助于老年人工作记忆的恢复

    来自波士顿大学的研究者Reinhart 和Nguyen最近在Nature Neuroscience的发文揭示了认知功能衰退的核心特征——工作记忆缺陷:来源于局部...

    用户1279583
  • 日志清理脚本-V0.0.3(增加多目录清理、正则表达式匹配、调试模式;部分细节优化)

    解决某些中间件或者应用日志无法自动清理的情况,比如:Nacos 的 access 日志清理,临时目录文件清理等。

    叨叨软件测试
  • Apache Solr查询语法

    表示:查询category=2002、en_US_city_i=110以及namespace=d的前六条记录,只返回productId和category字段

    九州暮云
  • c++ 网络编程(一)TCP/IP 入门级客户端与服务端交互代码

    原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html

    徐飞机
  • mbio: 随机采样过程会高估微生物群落的beta多样性

    β多样性,即两地点之间物种组成的差异,对于理解物种多样性的时空格局以及控制群落组成和结构的机制至关重要。

    生物信息知识分享
  • C语言定时关机小程序

    这个关机小程序的核心是对system函数的应用,大家可能感觉学了很久的C依然对着黑色的控制台程序,而system函数就比较意思了,其实说白了syst...

    7089bAt@PowerLi

扫码关注云+社区

领取腾讯云代金券