Sentinel

redis(一主两从三哨兵模式搭建)记录

橙三吉。 提交于 2020-12-19 06:14:35
转自: http://www.cnblogs.com/fly-piglet/p/9836314.html 目的: 让看看这篇文章的的人能够知道:软件架构、软件的安装、配置、基本运维的操作、高可用测试、也包含我自己,能够节省对应的时间。 软件架构: 生产环境使用三台服务器搭建redis哨兵集群,3个redis实例(1主2从)+ 3个哨兵实例。生产环境能够保证在哨兵存活两台的情况下,只有一台redis能够继续提供服务(一主两从三哨兵) 主虚拟机1 从虚拟机2 从虚拟机3 172.16.48.129 172.16.48.130 172.16.48.131 软件安装:分别在三台机器上通过yum进行redis的下载和安装以及开机启动 # 添加软件安装源 yum install epel-release # 安装redis yum install redis -y # 启动redis、启动redis哨兵 systemctl start redis systemctl start redis-sentinel # 允许开机启动 systemctl enable redis systemctl enable redis-sentinel # 之后进行配置修改:为哨兵集群,重启启动服务 /etc/redis.conf(主库配置) # 修改redis配置文件:/etc/redis.conf # 1.

十分钟搞懂阿里Sentinel核心源码(上)

六眼飞鱼酱① 提交于 2020-12-18 19:12:40
点击上方“ JavaEdge ”,关注公众号 设为“ 星标 ”,好文章不错过! 简介 Sentinel提供了丰富的限流、熔断功能。它支持控制台配置限流、熔断规则,支持集群限流,并可以将相应服务调用情况可视化。 本文主要分析Sentinel的限流功能源码。 Sentinel会进行流量统计,执行流量控制规则。而统计数据的展示和规则的设置在 sentinel-dashboard 项目中,这是一个 Spring MVC 应用,有后台管理界面,我们通过这个管理后台和各个应用进行交互。 当然,你不一定需要 dashboard,仅仅使用 sentinel-core,它会将统计信息写入到指定的日志文件中,通过该文件内容来了解每个接口的流量情况。这时只是使用到了 Sentinel 的流量监控功能。 dashboard 应用默认不持久化数据,它的所有数据都在内存,所以 dashboard 重启意味着所有数据都会丢失。你应按需要定制化 dashboard,如至少你应该要持久化规则设置,QPS 数据非常适合存放在时序数据库中,当然如果你的数据量不大,存 MySQL 也问题不大,定期清理一下过期数据即可,因为大部分人应该不会关心一个月以前的 QPS。 Sentinel 的核心将不同 Slot 按序串在一起(责任链模式),从而将不同功能(限流、降级、系统保护)组合在一起。核心结构: slot chain

Redis 核心技术

北慕城南 提交于 2020-12-18 17:32:13
1. Redis 核心数据结构与高性能原理 1.1 Redis 核心数据结构 1.1.1 string 1.1.2 hash 1.1.3 list 1.1.4 set 1.1.5 zset 1.1.6 bit 1.1.7 geo 1.1.8 其他高级命令 1.2 Redis 高性能核心原理 1.3 管道(pipeline) 1.4 Lua 脚本 1.5 Redis 的设计与实现 2. Redis 持久化、主从与哨兵架构 2.1 Redis 持久化 2.1.1 RDB 快照(snapshot) 2.1.2 AOF(append-only file) 2.1.3 RDB 与 AOF 的选择 2.1.4 混合持久化 2.2 Redis 主从架构 2.3 Redis 哨兵高可用架构 2.3.1 哨兵 leader 选举流程 2.3.2 哨兵架构缺点 3. Redis 集群架构 3.1 集群原理分析 3.1.1 槽位定位算法 3.1.2 跳转重定向 3.1.3 Redis 集群节点间的通信机制 3.1.4 网络抖动 3.2 集群选举原理分析 3.2.1 集群是否完整才能提供服务 4. Redis 分布式锁 4.1 分布式锁的适用场景 4.2 Redis 分布式锁的实现 4.3 Redis 实现分布式锁的问题 4.4 如何保障一致性问题 4.5 高性能的分布式锁如何实现 5. Redis

redis缓存与数据一致性

核能气质少年 提交于 2020-12-14 22:38:12
[TOC] 缓存 redis除了可以作为db存储用,还有一些场景是做二级缓存(比如mysql+redis或者mysql+memcached),所以这里总结下作为缓存时需要考虑的一些问题及解决方案 缓存穿透 名词解释:即黑客故意去请求缓存中不存在的数据,导致所有的请求都怼到数据库上,从而数据库连接异常。 解决方案: (一)利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试 (二)采用异步更新策略,无论key是否取到值,都直接返回。value值中维护一个缓存失效时间,缓存如果过期,异步起一个线程去读数据库,更新缓存。需要做缓存预热(项目启动前,先加载缓存)操作。 (三)提供一个能迅速判断请求是否有效的拦截机制,比如,利用布隆过滤器,内部维护一系列合法有效的key。迅速判断出,请求所携带的Key是否合法有效。如果不合法,则直接返回。 缓存雪崩(缓存失效) 名词解释:即缓存同一时间大面积的失效,这个时候又来了一波请求,结果请求都怼到数据库上,从而导致数据库连接异常。 解决方案: (一)给缓存的失效时间,加上一个随机值,避免集体失效。 (二)使用互斥锁,但是该方案吞吐量明显下降了。 (三)双缓存。我们有两个缓存,缓存A和缓存B。缓存A的失效时间为20分钟,缓存B不设失效时间。自己做缓存预热操作。然后细分以下几个小点 ● I 先从缓存A读数据

迅为IMX6ULL开发板Linux RS232/485驱动实验(上)

本秂侑毒 提交于 2020-12-14 11:31:36
在 arm 设备中串口是很常用的一个外设,不仅可以用来打印信息,还可以用于外接设备和其他 传感器 通信。根据不同的电平,串口分为 TTL 和 RS232,但是在 Linux 内核中的驱动程序是一样的,在串口上外接RS485 类似的芯片就可以把 RS232 信号转换为 RS485 信号,非常方便。在 i.MX6UL 终结者开发板上,RS232、 RS485 和 GPS 模块都接到了 UART3 接口上,内核驱动都是一样的。在本章来学习一下串口驱动。 53.1 Linux 下的 UART 驱动框架 53.1.1 uart_driver 结构体 在 Linux 中 uart 和 I2C、SPI 一样,提供了串口驱动框架,只需要按照提供的串口框架函数编译驱动即可。一般来说串口驱动都已经实现好了,我们需要做的就是在设备树文件中,添加相应的设备节点。当设备和驱动匹配成功后,串口就能够正常工作。 在 Linux 中,用 uart_driver 结构体来描述串口,uart_driver 定义在 include/linux/serial_core.h 文件中,内容如下: 295 struct uart_driver { 296 struct module *owner; /* 模块所属者 */ 297 const char *driver_name; /* 驱动名字 */ 298 const

Sentinel 集群限流设计原理

时光毁灭记忆、已成空白 提交于 2020-12-13 16:34:54
点击上方 “中间件兴趣圈” , 选择 “设为星标” 做积极的人,越努力越幸运! 1、集群限流使用场景 首先一个服务有三个服务提供者,但这三台集群的硬件配置不一样,如图所示: 在这里插入图片描述 为了充分利用硬件的资源,诸如 Dubbo 都提供了基于权重的负载均衡机制,例如可以将8C16G的机器设置的权重是4C8G的两倍,这样充分利用硬件资源,假如现在需要引入 Sentinel 的限流机制,例如为一个 Dubbo 服务设置限流规则,这样由于三台集群分担的流量不均匀,会导致无法重复利用高配机器的资源。 假设经过压测,机器配置为C48G最高能承受的TPS为 1500,而机器配置为8C16G能承受的TPS为2800,那如果采取单机限流,其阔值只能设置为1500,因为如果超过1500,会将4C8G的机器压垮。 解决这种办法的方式就是针对整个集群进行限流,即为整个集群设置一个阔值,例如设置限流TPS为6000。 2、集群限流与单机限流的异同思考 限流的一个基本作用就是按照限流规则生成访问许可(Token),然后根据当前实时的调用信息进行判断是否可以获得许可而决定是否放行。 集群与单机限流在实时调用信息收集方面应该差别不大,都可以基于滑动窗口进行统计信息的收集。 集群与单机限流的最主要区别在与许可的生成,单机模式的许可直接在本地生成,但集群限流必须有一个统一的 Token 发放机制

Redis 高可用分布式集群

南楼画角 提交于 2020-12-12 09:41:30
一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响。 停止服务的原因可能由于网卡、路由器、机房、CPU负载过高、内存溢出、自然灾害等不可预期的原因导致,在很多时候也称单点问题。 (1)解决单点问题主要有2种方式: 主备方式 这种通常是一台主机、一台或多台备机,在正常情况下主机对外提供服务,并把数据同步到备机,当主机宕机后,备机立刻开始服务。 Redis HA中使用比较多的是keepalived,它使主机备机对外提供同一个虚拟IP,客户端通过虚拟IP进行数据操作,正常期间主机一直对外提供服务,宕机后VIP自动漂移到备机上。 优点是对客户端毫无影响,仍然通过VIP操作。 缺点也很明显,在绝大多数时间内备机是一直没使用,被浪费着的。 主从方式 这种采取一主多从的办法,主从之间进行数据同步。 当Master宕机后,通过选举算法(Paxos、Raft)从slave中选举出新Master继续对外提供服务,主机恢复后以slave的身份重新加入。 主从另一个目的是进行读写分离,这是当单机读写压力过高的一种通用型解决方案。 其主机的角色只提供写操作或少量的读,把多余读请求通过负载均衡算法分流到单个或多个slave服务器上。 缺点是主机宕机后,Slave虽然被选举成新Master了,但对外提供的IP服务地址却发生变化了,意味着会影响到客户端。

硬核干货!Redis 分布式集群部署实战

僤鯓⒐⒋嵵緔 提交于 2020-12-12 07:51:31
原理: Redis集群采用一致性哈希槽的方式将集群中每个主节点都分配一定的哈希槽,对写入的数据进行哈希后分配到某个主节点进行存储。 集群使用公式(CRC16 key)& 16384计算键key数据那个槽。 16384个slot均匀分布在各个节点上。 集群中每个主节点将承担一部分槽点的维护,而槽点中存储着数据,每个主节点都有至少一个从节点用于高可用。 节点通信方式: 开启一个端口 设置的端口号+10000,用于集群之间节点通信交换信息。 每个节点默认每秒10次选择随机5个节点发送ping消息,将自身信息和知道的集群信息传递,收到ping消息后返回pong消息做回复,最后通过这种随机的消息交换,最终每个节点将获得所有信息。 当某个主节点挂掉,所有节点将会发现主节点挂掉了,作为主节点的从节点,就会接替主节点的工作,然后告诉所有其它节点,他成为了主。这样其它存活节点,就将它们维护的信息表更新从节点将接任做主,如果都挂掉集群将报错。当从一个节点操作,根据一致性哈希计算后将存储在其中一个主节点中,从节点将同步主的数据。 redis cluster是去中心化的,集群中的每个节点都是平等的关系,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃。 搭建集群时,会为每一个分片的主节点,对应一个从节点。实现slaveof功能,同时当主节点down

Spring Cloud for Alibaba 发布

夙愿已清 提交于 2020-12-12 03:24:09
十月三十号, Spring Cloud 公布了令人非常兴奋的消息,那就是 Alibaba Dubbo 、 Alibaba Nacos 、 Alibaba Sentinel 相关组件集成到 Spring Cloud 大家庭了…. Spring Cloud Alibaba spring-cloud-alibaba 项目由阿里的开源组件及部分阿里云产品组成,基于 Spring Framework 框架扩展和封装,同时将 Spring Boot 和 Spring Cloud 的优势带给使用阿里巴巴产品的Java开发人员。不过这里需要注意的是,除了 Dubbo ,剩下的几个项目都还不够成熟,上生产的话存在一定风险…. 版本 0.2.0.RELEASE 与 Spring Boot 2.0.x 系列兼容。版本 0.1.0.RELEASE 与 Spring Boot 1.x 系列兼容。 相关服务 Nacos: 是阿里巴巴的新开源项目,其核心定位是 一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台 。 Dubbo: Apache Dubbo (incubating) 一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:`面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现`。 Sentinel:以流量为切入点,从`流量控制、熔断降级、系统负载保护`

微服务三大利器之限流

∥☆過路亽.° 提交于 2020-12-11 05:47:03
背景 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。缓存、降级和限流是保护微服务系统运行稳定性的三大利器。 缓存:提升系统访问速度和增大系统能处理的容量 降级:当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉 限流:解决服务雪崩,级联服务发生阻塞时,及时熔断,防止请求堆积消耗占用系统的线程、IO等资源,造成其他级联服务所在服务器的崩溃 这里我们主要说一下限流,限流的目的应当是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率就可以拒绝服务、等待、降级。 首先,我们需要去了解最基本的两种限流算法。 限流算法 漏桶算法 令牌桶算法 计算器算法 这里主要是提一下,详细了解限流算法请参考下面链接 https://www.cnblogs.com/hopeiscoming/p/12297528.html 限流框架 下面说一下现有流行的限流工具 guava Google的Guava工具包中就提供了一个限流工具类——RateLimiter。RateLimiter是基于“令牌通算法”来实现限流的。 hystrix hystrix主要是通过资源池以及信号量来限流,暂时能支持简单的限流 sentinel 限流比较主流的三种算法:漏桶,令牌桶,滑动窗口。而Sentinel采用的是最后一种,滑动窗口来实现限流的。当然sentinel不仅仅局限于限流