Lnmp架构之Redis服务

1、redis部署

停掉mysql服务

Lnmp架构之Redis服务_第1张图片

如果在纯净的环境下,make的时候需要安装gcc和make

Lnmp架构之Redis服务_第2张图片

Lnmp架构之Redis服务_第3张图片Lnmp架构之Redis服务_第4张图片Lnmp架构之Redis服务_第5张图片Lnmp架构之Redis服务_第6张图片

redis服务常用命令

Lnmp架构之Redis服务_第7张图片

2、redis主从同步

Lnmp架构之Redis服务_第8张图片

复制文件发送到接收主机server2,server3

Lnmp架构之Redis服务_第9张图片

server2,server3接收到文件后,和11master端一样的配置方法

Lnmp架构之Redis服务_第10张图片

3、redis主从复制

设置11为master,12,13为slave

在12上

Lnmp架构之Redis服务_第11张图片Lnmp架构之Redis服务_第12张图片

其他slave节点以此类推

此时在master端11上

Lnmp架构之Redis服务_第13张图片

slave角色只能读,并没有修改的权限

在master端

在slave端会同步内容

Lnmp架构之Redis服务_第14张图片Lnmp架构之Redis服务_第15张图片

4、Redis高可用

redis主从切换

redis 主从原理:基于rdb 快照实现。

在执行主从的时候,slave和master要先做一个认证,发起一个同步请求,master会执行一个bgsave(异步模式)/save(阻塞模式),异步模式的时候,bgsave会做一个rdb快照,然后把rdb快照发给slave,slave会做一个动作,清掉slave端所有的数据(flushall),然后slave会再次加载快照;

快照做完之后,还会有变更数据,所以放在缓存里面,然后接下来会用replicationfeedslave()增量函数 一条一条发给slave,然后再给slave端做同步,因此,redis主从是基于rdb快照格式出现的。

redis和mysql的二进制日志的差别是其数据类型不同。

Lnmp架构之Redis服务_第16张图片

redis主从基于rdb快照格式实现

一主多从的架构中,redis里自带高可用切换

Lnmp架构之Redis服务_第17张图片Lnmp架构之Redis服务_第18张图片

2表示必须要两个节点说master出故障了才能发起故障切换;

当第一个节点发现master出现故障会进入一种主观下线状态,当第二个节点发现master出现故障 会再次进入一种主观下线状态;

两次的主观下线会触发一次客观下线,这个时候master会开始真正进行主从切换,三个节点就设置为2,两个节点就设置为1

拷贝修改后的文件到其他节点

Lnmp架构之Redis服务_第19张图片

注:必须在启动前拷贝过去,启动后文件会发生改变,拷贝过去会报错

其他主机直接启动服务,无需更改配置文件(哨兵模式)

Lnmp架构之Redis服务_第20张图片

此时,再开启一个终端11并关闭master

Lnmp架构之Redis服务_第21张图片

当master出问题时,redis集群会自动切换master

当原来的master再次启动后,会以slave的身份加入集群

Lnmp架构之Redis服务_第22张图片Lnmp架构之Redis服务_第23张图片

在切换的时候可能会出现的问题:

客户端到master没什么问题,master 到slave端的网络如果出现故障,这个时候集群就会以为master出现问题,把master踢出去,选举出新的master;

当网络又恢复正常,原来的master会同步当前集群的配置,把自己变成slave,接入到新的master;

然而客户端到master是好的,这个时候,客户端会持续往master里写入数据,这些写入的数据就会因此而丢失。

Lnmp架构之Redis服务_第24张图片

解决方法:

必需保证后端有两个slave可以写;

添加 min-slave-to-write=2 到配置文件,保证在主从切换的时候 客户端不要给master里面写 ,如果master发现都连不上两个slave 就不要往里面写入数据了,避免数据丢失。

5、Redis集群

Lnmp架构之Redis服务_第25张图片Lnmp架构之Redis服务_第26张图片

无中心化设计:每个节点都可以接入集群,不管是主从都可以进行读写,在接入集群之后都可以做调度,做重定向。但是,它的整合度太高,二次开发成本太高。

自动生成集群脚本(会在当前的目录里生成对应的配置文件和数据)

Lnmp架构之Redis服务_第27张图片Lnmp架构之Redis服务_第28张图片

启动自动生成脚本

Lnmp架构之Redis服务_第29张图片Lnmp架构之Redis服务_第30张图片Lnmp架构之Redis服务_第31张图片Lnmp架构之Redis服务_第32张图片

查看帮助命令(redis-cli --help)

Lnmp架构之Redis服务_第33张图片

获取集群状态

Lnmp架构之Redis服务_第34张图片

获取集群详细信息

Lnmp架构之Redis服务_第35张图片

redis-cli --cluster作用:将16384个存储数据的哈希槽均摊到三个master上进行存储,每个节点都会分配到一定的哈希槽。

连接集群

Lnmp架构之Redis服务_第36张图片Lnmp架构之Redis服务_第37张图片Lnmp架构之Redis服务_第38张图片Lnmp架构之Redis服务_第39张图片

关闭redis,集群中对应的master和slave就会自动切换

down掉30002

Lnmp架构之Redis服务_第40张图片

此时,数据保存在30005上不会丢失

再次启动脚本,被down掉的30002会重新恢复,并且恢复后会成为slave

Lnmp架构之Redis服务_第41张图片Lnmp架构之Redis服务_第42张图片Lnmp架构之Redis服务_第43张图片

导致集群不可用的情况:

(1)16384个哈希槽不完整时,集群不可用

(2)同一个集群的半数master同时挂掉时,集群不可用

再添加两个redis实例

Lnmp架构之Redis服务_第44张图片Lnmp架构之Redis服务_第45张图片

在线添加集群节点

添加master节点

Lnmp架构之Redis服务_第46张图片

新的master节点没有hash槽

Lnmp架构之Redis服务_第47张图片

添加slave节点

Lnmp架构之Redis服务_第48张图片Lnmp架构之Redis服务_第49张图片

给新增的master节点迁移hash槽

Lnmp架构之Redis服务_第50张图片

新增节点完成

Lnmp架构之Redis服务_第51张图片

注:在删除某个master节点时,要先将该节点上的哈希槽迁移到别的maser节点,否则会导致哈希槽不完整,从而导致集群不可用。

你可能感兴趣的:(架构,redis,数据库)