Linux的企业-Redis数据库、缓存和哨兵Sentinal、Redis高可用

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

一.Redis简介

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。     它支持多种类型的数据结构,如        字符串(strings),    散列(hashes),    列表(lists),    集合(sets),    有序集合(sorted sets) 与范围查询,    bitmaps,    hyperloglogs 和    地理空间(geospatial) 索引半径查询。    Redis 内置了    复制(replication),LUA脚本(Lua scripting),    LRU驱动事件(LRU eviction),事务(transactions)    和不同级别的    磁盘持久化(persistence),    并通过    Redis哨兵(Sentinel)和自动    分区(Cluster)提供高可用性(high availability)


二.安装redis

066a9c742baab6ecd8930669b51fdaf5.png

04afe8aeb24129b4a9db914167cf91c6.png


2.启动redis

1cefc06f2a794c9758673e07b78ec7c9.png



三.安装redis

bind 全网段

af39ed6923296ea51ed3853f1653a29a.png

e9b48eb65e7ebf8f3abe2ef1333f124e.png


进入redis,创建数据

数据是内存快照,保存到/var/lib/redis,格式为rdb

e76d402e664f8223a1f8f7d75d1289eb.png


四.在server2和server3安装redis测试数据同步

9afe20fb0a1a3d16c48e7d9ee98d7cd4.png

fc8a694465cb641b97828a0966c27bc3.png

7d2b3b93b71c377241e9cc3766a13b57.png


可以查看到server2和server3数据同步

760eed070aa82c4532d49cd1e36264ce.png

459fca762d7d3e87eac7693a52dbcb69.png

96a0c4671db30d9ec7b5cd6cb7c37aa3.png

ddbce8363e7052790ac21e3f10462f1b.png


五.Redis的哨兵

Redis的哨兵(sentinel)系统用于管理多个 Redis服务器,该系统执行以下三个任务:

·        监控(Monitoring):哨兵(sentinel)会不断地检查你的Master和Slave是否运作正常。

·        提醒(Notification):当被监控的某个 Redis出现问题时,哨兵(sentinel)可以通过 API 向管理员或者其他应用程序发送通知。

·        自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel)会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master,并让失效Master的其他Slave改为复制新的Master;当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。


1.在server1配置sentinel哨兵文件

4408b75cf0fafa655eed77d2b8ad3ad2.png

server1为主,server2和server3为从

55de8a236048f4c083312ade200951a8.png


2.将sentinel.conf文件传给server2和server3

3d3c5d7e453fc9c80926dfe0a3c1067b.png

990a49998a60b20d146f47cf32dc37f9.png


3.server1、server2、server3启动哨兵

876b5922b689320bc8e0eb9471a8872c.png

cad7071c51393eebee9fd8a53e0ce920.png


40f407aeed6fd357864b8fdcd26789f0.png


12b9b54c9ac52c6e886cc775c7930e60.png



4.将server1 主节点shutdown,30s后,在server3上查看master切换到server2

fbb1c8728fc8fec73a267ba8225493e1.png

af5f606bfaaedad82b8ef1a642273af3.png

20fafaa79c1bfa260377b8c8e7d945ec.png


4.重新启动,将server1的sentinel.conf文件里的主修改为server2

e02c5fb860458147d4d78cae8f1468ea.png

df3ce058825c0a1035dc52e759bb3425.png

d06ae23eb10fd17e43dc29e62cf0a8d1.png


六.Redis高可用

在server1上开多个不同端口的redis

1.安装rubygems模块,使得gem模块可以调用redis

26dbfcfb67980f1968625fcc2caab75b.png

bf6a3a41951d25f4628c70b165ba1921.png

b5c7bf12dd6d02f6e9f6c85020c8bd4b.png


2.将redis-trib.rb命令拷到/usr/local/bin下,方便使用命令

c0b464a293770a62e98ab66b641706ec.png

cd3596fa0d1fa5352bddee8f90acdc77.png

ca49dc614c8cfcf4e8fe631c83a6baee.png



3.在/usr/local/新建redis-cluster

redis-cluster下新建30001-30006

6bc23cff0bb8e8fb18f6d0c2b8ad4fe4.png


配置30001的redis文件

cc14503d889917be15df0b797b6a51b5.png


配置完成后,启动服务,在30001目录里redis-server 30001/redis.conf

e41e0a9b9aa95a3e4ff969594ce53fba.png


4.按照30001的方法配置30002-30006,修改里面的目录和端口,配置完启动

1bf5b43e631a7917b40db794cfc1f826.png

cc962c1d443177a9ea4828d3a3a3cce4.png

de5ffd9925d86693dd688f97627ba7f7.png


查看进程和端口

dcb1cd38231d644c7366877714cff5ca.png

2dbe5ac422b029b159cc6f1d1641ff8f.png


5.创建集群

选择yes

三个mastar,三个slave

master有槽位,一共16383,id一样的为一组主从,一对主从不能同时坏掉,一但一对主从都坏掉,集群失效

0d13bd00f079777060c649f7535ce119.png


6.查看集群信息,从30001接口进入,接口30001-30006都可以

214d61c2ba9668ed3910378c34448b5c.png

测试:

25cd8d6720cf39967180f9583b197973.png

f42618ff59797f3966143273cf6312b6.png


7.检测集群状态

f09819534ddba202df76b43a986ba581.png


8.从30002接口进入,关闭2节点,从从30003接口登陆,数据没有丢失,从 从机30005上将数据取出

041db786d26c940d93b700773a9cee4a.png


恢复节点2,集群正常

47a7dfe970b5e71ecd7ce51eea5639da.png


但30005变为master,30002变为slave

73cda8a35628bac72f0e39a76cbb31c5.png


9.添加新节点

新建30007和30008

6e311e271bfcbfc328ac7e7e6ab18553.png

717721edd018b2e57c30865ff9621ddf.png



(1)将30007添加为master

b81caee21ffb4e0e8e7798ea2ebd6d75.png

827c5a21df6fac5204ccec5c07f26550.png


查看集群状态,30007没有槽位

82272cfd9d920ebb5b6acad0067b64b3.png


平均master槽位

1a2e82ede4cffefaaab74915e43c7df3.png

3b50e324899e8d51990edc7c559aa408.png


(2)将30008添加为slave

c72f16469b12f3430b8b0f2ad6df2a47.png

1942e747398f8df11aa9412f1f14b781.png


0f3f3cc072bd86345789d3b590de810d.png


10.登陆测试取值,发现原来name的槽位平均到master30007上

30ba6efd9decad0ff586559e3aef37f8.png



03996adc6098e71d8bca21ce3c167316.png

0aea9466a541f7af246df9cb7a3ff99c.png





      本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1974247,如需转载请自行联系原作者






相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
10天前
|
NoSQL Linux Redis
linux 下和win下安装redis 并添加开机自启 图文详解
linux 下和win下安装redis 并添加开机自启 图文详解
15 0
|
1月前
|
存储 缓存 Linux
如何在Linux环境下对pip的缓存地址进行修改
如何在Linux环境下对pip的缓存地址进行修改
|
1月前
|
缓存 NoSQL 安全
【Redis】缓存穿透
【Redis】缓存穿透
30 0
|
1月前
|
NoSQL Linux Redis
Linux系统中安装redis+redis后台启动+常见相关配置
Linux系统中安装redis+redis后台启动+常见相关配置
|
3天前
|
缓存 NoSQL Java
使用Redis进行Java缓存策略设计
【4月更文挑战第16天】在高并发Java应用中,Redis作为缓存中间件提升性能。本文探讨如何使用Redis设计缓存策略。Redis是开源内存数据结构存储系统,支持多种数据结构。Java中常用Redis客户端有Jedis和Lettuce。缓存设计遵循一致性、失效、雪崩、穿透和预热原则。常见缓存模式包括Cache-Aside、Read-Through、Write-Through和Write-Behind。示例展示了使用Jedis实现Cache-Aside模式。优化策略包括分布式锁、缓存预热、随机过期时间、限流和降级,以应对缓存挑战。
|
10天前
|
NoSQL Linux PHP
php添加redis扩展 linux和windos图文详解 l
php添加redis扩展 linux和windos图文详解 l
3 0
|
12天前
|
存储 缓存 NoSQL
Java手撸一个缓存类似Redis
`LocalExpiringCache`是Java实现的一个本地缓存类,使用ConcurrentHashMap存储键值对,并通过ScheduledExecutorService定时清理过期的缓存项。类中包含`put`、`get`、`remove`等方法操作缓存,并有`clearCache`方法来清除过期的缓存条目。初始化时,会注册一个定时任务,每500毫秒检查并清理一次过期缓存。单例模式确保了类的唯一实例。
11 0
|
18天前
|
NoSQL Linux Redis
Linux安装Redis
Linux安装Redis
26 0
|
1月前
|
缓存 NoSQL Java
spring cache整合redis实现springboot项目中的缓存功能
spring cache整合redis实现springboot项目中的缓存功能
45 1
|
1月前
|
缓存 NoSQL 数据库
[Redis]——数据一致性,先操作数据库,还是先更新缓存?
[Redis]——数据一致性,先操作数据库,还是先更新缓存?

热门文章

最新文章