Lnmp架构-Redis

网站:www.redis.cn

redis 部署

make的时候需要gcc和make 如果在纯净的环境下需要执行此命令

root@server3 redis-6.2.4\]# yum install make gcc -y ![](https://file.jishuzhan.net/article/1698373830260559874/b957f5a252774d78957277ef59c6b571.png)![](https://file.jishuzhan.net/article/1698373830260559874/49cffa2ddf374d0c84852e529b7879bf.png)注释一下这几行 ![](https://file.jishuzhan.net/article/1698373830260559874/c58c052d93aa43efbbe1ff7f840f367e.png)![](https://file.jishuzhan.net/article/1698373830260559874/0afdd46bda974960ae3fccdcc114de0a.png)![](https://file.jishuzhan.net/article/1698373830260559874/3af5dbbdaf314cf0a0a12662a9a66edd.png) vim /etc/redis/6739.conf ![](https://file.jishuzhan.net/article/1698373830260559874/71e86980eecb4b9aa5bc8370b3db5a21.png) ![](https://file.jishuzhan.net/article/1698373830260559874/73e0838b439940849625c2101799fbb9.png) ![](https://file.jishuzhan.net/article/1698373830260559874/e1b3ceace64a43bba15c13ce42062b47.png) 2.Redis主从复制 设置 11 是master 12 13 是slave 在12 上 ![](https://file.jishuzhan.net/article/1698373830260559874/0ab043247d5b4594ba7dfe2f818fb55b.png) ![](https://file.jishuzhan.net/article/1698373830260559874/2771e77df69d469393af3c2cd29b930f.png) 其他节点以此内推 此时在 11 master 上 ![](https://file.jishuzhan.net/article/1698373830260559874/2b426ff0e7aa45678982ad92358cc1f5.png) ![](https://file.jishuzhan.net/article/1698373830260559874/e9bd99f5edd24898a615d20ff0281f45.png)slave 角色只能读 没有修改的权限 当在master上 ![](https://file.jishuzhan.net/article/1698373830260559874/a60b3278d609489eb97aa40f3dacd2cf.png) 在slave会实现同步 ![](https://file.jishuzhan.net/article/1698373830260559874/55e6a33c10a4498f944b5fff5d452412.png)![](https://file.jishuzhan.net/article/1698373830260559874/9f871f11f857408ea438e401332f6dc1.png) ## **redis高可用** redis 主从切换 redis 主从原理:基于rdb 快照实现 它和MySQL的二进制日志的差别(数据类型不同) 在执行主从的时候:slave和master要先做一个认证 发起一个同步请求,master会执行一个bgsave(异步模式)/save(阻塞模式),异步模式的时候,bgsave会做一个rdb快照,然后把rdb快照发给slave,slave会做一个动作,清掉slave端所有的数据(flushall),然后slave会再次加载快照, 快照做完之后,还会有变更数据,所以放在缓存里面,然后接下来会用replicationfeedslave()增量函数 一条一条发给slave,然后再给slave端做同步 redis主从基于rdb快照格式出现 ![](https://file.jishuzhan.net/article/1698373830260559874/3aa004271b5a49bcadba0ccf726cb0f4.png) redis 主从基于快照rdb快照格式实现 ![](https://file.jishuzhan.net/article/1698373830260559874/38f8eccd021d42809363922fcc7a9ff0.png) 一主多从的架构中 做高可用切换 redis 里自带 ![](https://file.jishuzhan.net/article/1698373830260559874/8483df50e4e04854bb63a8d93ae4bce8.png) 2 表示的意思:怎么判断master出故障呢,必须要两个节点说master出故障了 才能发起故障切换 当第一个节点发现master出现故障 会进入一种主观下线状态 当第二个节点发现master出现故障 会再次进入一种主观下线状态 两次的主观下线会触发一次客观下线,这个时候master会开始真正进行主从切换 三个节点就设置为2 两个节点就设置为1 ![](https://file.jishuzhan.net/article/1698373830260559874/775a3c2e085a422fa02eac1a97e2fc41.png)![](https://file.jishuzhan.net/article/1698373830260559874/87abad7d43b34bb990911b124aa77b4d.png) 拷贝文件的动作 一定要在启动之前 ![](https://file.jishuzhan.net/article/1698373830260559874/0edbdf97207a416e95f03cfc0bb9fd08.png)![](https://file.jishuzhan.net/article/1698373830260559874/68a3ab96d47c4bcdbf80ef75f0f18744.png) 其它主机直接启动服务,无需更改配置文件 ![](https://file.jishuzhan.net/article/1698373830260559874/588457da852f4fae81c62ab844dc950b.png)![](https://file.jishuzhan.net/article/1698373830260559874/3b5c5613fae046809cb30b06ccac59b6.png)![](https://file.jishuzhan.net/article/1698373830260559874/ee51ac47fea74f4095af2817104edcb0.png) ![](https://file.jishuzhan.net/article/1698373830260559874/8b1d40ae23c142ea8d31e49d60cac22c.png) 这就是哨兵模式 此时 在开一个终端11 11 此时是master ![](https://file.jishuzhan.net/article/1698373830260559874/9e1978ad9ce14de8bf27bc00eaebef43.png) 关闭master ![](https://file.jishuzhan.net/article/1698373830260559874/5980f2ff7d3541dc809bae0ef5a1b047.png) ![](https://file.jishuzhan.net/article/1698373830260559874/840268f8ce244511bc29c2b007c74abe.png) redis集群 会自动切换master 当原来的master再次启动后,会以slave身份加入集群 ![](https://file.jishuzhan.net/article/1698373830260559874/3082b8c8f00f491397543abbb1cbd022.png) ![](https://file.jishuzhan.net/article/1698373830260559874/d352b878c9654983a9005e22fde7a4c5.png) ![](https://file.jishuzhan.net/article/1698373830260559874/898040eeec0b4344b378137389a30ac6.png)![](https://file.jishuzhan.net/article/1698373830260559874/96c2318687c5486eb3c86db09124601e.png) 在切换的时候可能会出现的问题 客户端到master没什么问题,master 到slave端的网络如果出现故障 这个时候就会把master踢出去 选举出新的master slave接上去 当网络又正常 原来的master 会同步当前集群的配置 把自己变成slave 接入到新的master 这样的话 原来的master上所有数据都会丢失 但是 客户端到master是好的 这个时候 客户端会持续往master里写数据 客户一直在写 但是master到slave出现故障 master就会变为slave 数据就会被清掉 ![](https://file.jishuzhan.net/article/1698373830260559874/8aa38e47736a4613b82a4924e00e01a3.png) 怎么解决呢 必需保证后端有两个slave可以写 添加 min-slave-to-write=2 到配置文件 保证在主从切换的时候 客户端不要给master里面写 如果master发现都连不上两个slave 就不要往里面写入数据了 避免数据丢失 **Redis集群** ![](https://file.jishuzhan.net/article/1698373830260559874/cce8a631082b4037886a639814a5e048.png)![](https://file.jishuzhan.net/article/1698373830260559874/64828ef2e8e94b169b7894d6aeaa7ad3.png) 无中心化设计 每个节点都可以接入集群 不管是主从 都可以进行读写 在接入集群之后都可以做调度 做重定向 但是 它的整合度太高了 二次开发成本太高 ![](https://file.jishuzhan.net/article/1698373830260559874/4e66ff4bd5bd4e80a795ea5b61f4f6d3.png) ![](https://file.jishuzhan.net/article/1698373830260559874/18982aea28624f86a7107bf7fa288b33.png)![](https://file.jishuzhan.net/article/1698373830260559874/0936d493034b4163981f247977afdd3f.png)![](https://file.jishuzhan.net/article/1698373830260559874/f92b2f3635464ec4b2618badea003589.png)会在当前的目录里 生成对应的配置文件和数据 ![](https://file.jishuzhan.net/article/1698373830260559874/d00cdeb085b940ec820ef6d7de296152.png)![](https://file.jishuzhan.net/article/1698373830260559874/aaf1a8fd7a4e4ad79440444efe98e4c9.png) ![](https://file.jishuzhan.net/article/1698373830260559874/14272ab5e6164fd0bc4a841595ada1c6.png) 这样就创建好了一个集群 查看命令帮助 redis-cli --help ![](https://file.jishuzhan.net/article/1698373830260559874/c50eb745b98a41389240279378ee1501.png) 获取集群状态 ![](https://file.jishuzhan.net/article/1698373830260559874/116d44f96a694bd7bfd1ca8d84b51191.png) 主从关系的详细信息 ![](https://file.jishuzhan.net/article/1698373830260559874/03e5ab0773d34ed9912da9c4092ba3c7.png) redis-cli --cluster 实际就是把总共16384个哈希槽 ,均摊到这三个master 进行存储 每个节点都会分得一定比例的哈希槽,哈希槽就是存数据用的 连接集群 ![](https://file.jishuzhan.net/article/1698373830260559874/e49f61f1600e436f90c33b1db1380f06.png) ![](https://file.jishuzhan.net/article/1698373830260559874/4b4c30a5238048dd8c68f4434c9bcc90.png)![](https://file.jishuzhan.net/article/1698373830260559874/8242a7c2004c4a0aa96822b7aded626c.png)![](https://file.jishuzhan.net/article/1698373830260559874/f478fbfda9c04491a8b0f35c6f5b120e.png)![](https://file.jishuzhan.net/article/1698373830260559874/1c51e081394d41598b34792af535c8d8.png) 关闭redis实例,集群自动切换 30002的 master 关闭 30005之前是slave 就会接管变成master ![](https://file.jishuzhan.net/article/1698373830260559874/b60162aaaa4a4604a0b0af0cc6c6363d.png) 此时 数据就会在30005上 数据不会丢失 ![](https://file.jishuzhan.net/article/1698373830260559874/aa209ffe3d3643b89b792c92855ec21a.png) 以上就是 redis 内置的高可用切换 如果再把脚本启动起来 这时候 刚才关闭的30002 就会被再次拉起来 ![](https://file.jishuzhan.net/article/1698373830260559874/e9f6d4ea3b2444f8839d84f97b1b3ac8.png) ![](https://file.jishuzhan.net/article/1698373830260559874/6167ab1a79ad4803837ddaae037bd377.png) 拉起来之后 30002 就是slave ![](https://file.jishuzhan.net/article/1698373830260559874/8d2363a7c69d4e1193db7a36e93b411d.png)![](https://file.jishuzhan.net/article/1698373830260559874/187006f8b250428d825028441d48c096.png) 此时 互换了角色 设么么时候会导致这个进群节点不可用 1 这16384这些哈希槽如果不完整集群不可用 2.同一这个集群的半数master同时挂掉 再启动两个redis实例 ![](https://file.jishuzhan.net/article/1698373830260559874/12188da4112941c981f7f5186542dda9.png) ![](https://file.jishuzhan.net/article/1698373830260559874/e5b0c348851845a098317de4b3bd58ba.png)![](https://file.jishuzhan.net/article/1698373830260559874/93983d5e72fc4e6fa0b562757c99ffbb.png)ps ax ![](https://file.jishuzhan.net/article/1698373830260559874/afb481ea1f734526aebbf262b7b5a342.png) 在线添加集群节点 ![](https://file.jishuzhan.net/article/1698373830260559874/b55cb53a5add4cbc9fb1949ac1332082.png) 新添加的节点没有hash槽,角色时是master ![](https://file.jishuzhan.net/article/1698373830260559874/33eb42ebcb164ecba6d5558fee4de806.png) 添加slave节点 ![](https://file.jishuzhan.net/article/1698373830260559874/7b8e3f806fc24b7c836b7ea75f6f860f.png)![](https://file.jishuzhan.net/article/1698373830260559874/76586180eab84cdd865dcd79e719a25a.png)![](https://file.jishuzhan.net/article/1698373830260559874/abb937fcc383497499a1d7ad49c23c7b.png) 重新迁移hash槽 ![](https://file.jishuzhan.net/article/1698373830260559874/ebd1d48fc8b8433880809aa2a62080f9.png)![](https://file.jishuzhan.net/article/1698373830260559874/4e1f74fb667443eda6da3ec85ed964b0.png)![](https://file.jishuzhan.net/article/1698373830260559874/60b362574fa24b95abd13c7906481948.png)![](https://file.jishuzhan.net/article/1698373830260559874/d81838810e1044a8898dc89723f7d4b7.png) 删除哪个节点的时候 就得把这个节点上的哈希槽迁徙到别的机器上 要不然就会造成哈希槽不完整 集群就会shutdown

相关推荐
懵逼的小黑子几秒前
解释两个 Django 命令 makemigrations和migrate
数据库·django
Lxinccode2 小时前
Java查询数据库表信息导出Word-获取数据库实现[1]:KingbaseES
java·数据库·word·获取数据库信息·获取kingbasees信息
豆沙沙包?3 小时前
5.学习笔记-SpringMVC(P61-P70)
数据库·笔记·学习
朴拙数科5 小时前
MongoDB Atlas与MongoDB连接MCP服务器的区别解析
服务器·数据库·mongodb
柏油5 小时前
MySQL InnoDB 行锁
数据库·后端·mysql
A-Kamen5 小时前
MySQL 存储引擎对比:InnoDB vs MyISAM vs Memory
数据库·mysql·spark
极限实验室6 小时前
【Workshop 第一期 - 北京站】搜索服务统一治理(跨引擎多个集群监控管理、流量管控、服务编排)
数据库
鹏翼丶6 小时前
搭建动态SQL取数
数据库·sql·动态sql
辰哥单片机设计6 小时前
PH传感器详解(STM32)
数据库·mongodb
JavaAlpha6 小时前
面试题:Redis 一次性获取大量Key的风险及优化方案
数据库·redis·bootstrap