百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

阿里消防员的Redis集群搭建(阿里云消防)

mhr18 2024-11-04 12:46 33 浏览 0 评论

1.Redis简介

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

2.Redis集群介绍

Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。

Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.

Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:

1 自动分割数据到不同的节点上。

2 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

3.Redis主从复制

3.1. 主从复制的简单流程介绍:

1.Master可以拥有多个slave

2.多个slave可以连接同一个Master外,还可以连接到其他的slave

3.主从复制不会阻塞Master在主从复制时,Master可以处理client请求。

4.提供系统的伸缩性。

3.2. 主从复制简单原理的过程

1.slave与Master建立连接,发送sync同步命令。

也就是说当用户在Master写入一条命令后,他们之间会通过一些算法把数据同步到每一个slave上。

2.Msater会开启一个后台进程,将数据库快照保存到文件中。同时Master主进程会开始收集新的写命令并缓存。

3.后台完成保存后,就将文件发送给slave

4.slave将此文件保存在硬盘上。

4.Redis Sentinel(哨兵)模式

4.1. Sentinel工作方式:

1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令

2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。

3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。

4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线

5):在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令

6):当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次

7):若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。

若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

5.搭建redis主从环境

5.1. 下载和解包

cd /usr/local/

wget http://download.redis.io/releases/redis-3.2.1.tar.gz

tar -zxvf /redis-3.2.1.tar.gz

5.2.  编译安装

cd redis-3.2.1

make && make install

5.3. 创建redis节点

为了演示方便,方便大家在自己的机器上搭建环境来测试,我特意把所有客户端都安装到了同一台机器上,操作步骤如下:

1 在/usr/local/ 下新建一个目录redis-sentinel,然后在此目录下新建7501/ 7502/ 7503/ 7504/ 7505/ 7506/ 六个目录。

2.将redis安装目录下的reids.conf,拷贝到前4个目录下,分别命名为:

Redis-7501.conf redis-7502.conf redis-7503.conf redis-7504.conf

3 修改配置文件内容(以redis-7501.conf为例):

daemonize yes

Port 7501

Bind 192.168.12.90

logfile “./redis-7501.log”

4 将redis安装目录下的sentinel.conf拷贝到7505/和7506/目录下分别命名:

Sentinel-7505.conf sentinel-7506.conf

修改配置文件(以sentinel-7505.conf为例):

port 7505

sentinel monitor mymaster 127.0.0.1 7501 2

注:我们稍后要启动四个redis实例,其中端口为7501的redis设为master,其他三个设为slave 。所以my mymaster 后跟的是master的ip和端口,最后一个’2’代表我要启动只要有

2个sentinel认为master下线,就认为该master客观下线,启动failover并选举产生新的master。通常最后一个参数不能多于启动的sentinel实例数。

5、启动redis

分别启动4个redis实例:

目录切换到redis-3.2.1下的 src目录下

redis-server ../../redis-sentinel/7501/redis-7501.conf

然后分别登陆7502 7503 7504三个实例,动态改变主从关系,成为7501的slave:

redis-cli -h 127.0.0.1 -p 7502

192.168.12.90:7502> SLAVEOF 127.0.0.1 7501

从这个操作界面可以看到,我们实现了在主redis上设置的数据信息,同步到了备redis上了,真正实现了主从同步功能。

6.搭建redis-sentinel 集群环境

以后台启动模式启动两个sentinel(哨兵):

redis-sentinel ../../redis-sentinel/7505/sentinel-7505.conf &

同样的方法,切换到7506的目录下,启动7506的哨兵模式。

先来对sentinel一些命令介绍 :

要使用sentinel的命令,我们需要用redis-cli命令进入到sentinel,比如进入7505:

redis-cli -h 127.0.0.1 -p 7505

① INFO

sentinel的基本状态信息

②SENTINEL masters

列出所有被监视的主服务器,以及这些主服务器的当前状态

③ SENTINEL slaves

列出给定主服务器的所有从服务器,以及这些从服务器的当前状态

④SENTINEL get-master-addr-by-name

返回给定名字的主服务器的 IP 地址和端口号

⑤SENTINEL reset

重置所有名字和给定模式 pattern 相匹配的主服务器。重置操作清除主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。

⑥SENTINEL failover

当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移,但是它会给其他sentinel发送一个最新的配置,其他sentinel会根据这个配置进行更新


接下来我们进行测试操作:

(1)登陆到 master:

redis-cli -h 192.168.12.90 -p 7501

192.168.12.90:7501> set name “zhangsan”

[root@localhost redis-sentinel]# redis-cli -h 127.0.0.1 -p 7502

192.168.12.90:7502> get name

“zhangsan”

192.168.12.90:7502> set age 24

(error) READONLY You can’t write against a read only slave.

可以看到:我们的主从模式中,slave默认是只读。

(2)目前7501是master, 我们强制kill掉 7501 的进程以后,可以看到sentinel打出的信息:

Kill -9 38905

下面就会输出sentinel的输出信息,里面进行决策选出新的master。

可以看到,sentinel已经将7504这个redis instance提升为新的master,稍后将7501这个实例启动,动态作为7504的slave,这样就手动恢复了redis 集群。

7.**强调文字**Redis优缺点

优点:

1 读写性能优异

2 支持数据持久化,支持AOF和RDB两种持久化方式

3 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

缺点:

1 Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

2 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。

3 Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

  1. Redis应用场景,它能做什么

    众多语言都支持Redis,因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。

    拿大型网站来举个例子,比如a网站首页一天有100万人访问,其中有一个板块为推荐新闻。要是直接从数据库查询,那么一天就要多消耗100万次数据库请求。上面已经说过,Redis支持丰富的数据类型,所以这完全可以用Redis来完成,将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。

在这里我们对redis的集群搭建就全部结束了,谢谢大家共同学习进步,欢迎大家指导!

相关推荐

【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...

Pure Storage推出统一数据管理云平台及新闪存阵列

PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...

对Java学习的10条建议(对java课程的建议)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!

官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...

JDK21有没有什么稳定、简单又强势的特性?

佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...

「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了

在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...

Java面试题及答案最全总结(2025版)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...

数据库日常运维工作内容(数据库日常运维 工作内容)

#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...

分布式之系统底层原理(上)(底层分布式技术)

作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...

oracle 死锁了怎么办?kill 进程 直接上干货

1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

取消回复欢迎 发表评论: