09 Redis的集群:主从复制、CAP、PAXOS、cluster分片集群01

Redis的集群:主从复制、CAP、PAXOS、cluster分片集群01

理论部分:

redis单机有哪些问题?单点故障、容量有限、压力。

AKF

x、y、z轴分别解决单点故障、容量有限、压力问题。
x轴,一台单点故障,那就部署多台,做主备。主备是全量镜像,并不能解决压力问题。
y轴,按照业务功能,拆分为多台。
z轴,一个业务功能,按照优先级、逻辑再拆分。
在这里插入图片描述

一致性

通过AFK,单节点变多点,会引出数据一致性问题。

  • 强一致性
    同步方式,所有节点阻塞,直到数据全部一致。阻塞,代表服务不可用。使用强一致性,会破坏可用性。
    为什么一变多?是为了解决可用性。
    在这里插入图片描述

  • 弱一致性
    异步方式,容忍数据丢失一部分

在这里插入图片描述

  • 最终一致性
    同步访问一个可靠集群,响应速度足够快,只要从多节点取出数据最终一致即可
    在这里插入图片描述
    最终一致性,有可能客户端取到不一致数据,在没有处理完的时候会取到不一致数据,处理完后,最终是可以取到一致的数据的。

主备、主从

主备,客户端只能访问主机,不会访问备机。当主机挂掉后,由备机顶替主机提供服务。
主从,客户端可以访问主机,也可以访问从机。主从复制,主机提供增、删、改,同步数据给从机,从机提供查询服务。
主备、主从,主还是一个单点。主挂掉了,服务又不可用了,所以一般对主机做高可用。可以由人来手动做,但是人是最不可靠的,最好有一个监控程序来对主机进行实时监控,当主机挂掉,自动处理,实现自动的故障转移。
是程序,就可能出问题。所以,监控程序也要是一个集群。
在这里插入图片描述

监控集群

监控集群,如果有一些监控可用,另一些监控不可用,那么这个服务到底是可用还是不可用?

  • 势力范围
    如果3个监控节点,其中2台监控到可用,1台监控到不可用。那么势力范围分别是2、1。势力范围大的说的算,势力范围小的,说的不算。所以,势力范围2的说的算,服务可用。
  • 脑裂
    如果4个监控节点,其中3台建东到可用,1台监控到不可用,那么势力范围是3、1,势力范围大的3说的算;还是4个节点,如果其中2台监控到可用,2台监控到不可用,那么势力范围分别是2、2。势力范围一样大,脑裂了,区分不出来了。
  • 集群数量
    4个节点,可能出现2-2的势力范围,出现脑裂,解决方法,用3个节点;
    6个节点,可能出现3-3的势力范围,出现脑裂,解决方法,用5个节点。
    解决脑裂问题,集群数量:过半,n / 2 + 1,奇数台。

CAP原则

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

  • 一致性(C)
    在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • 可用性(A)
    保证每个请求不管成功或者失败都有响应。
  • 分区容忍性(P)
    系统中任意信息的丢失或失败不会影响系统的继续运作。

CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。

因此在进行分布式架构设计时,必须做出取舍。当前一般是通过分布式缓存中各节点的最终一致性来提高系统的性能,通过使用多节点之间的数据异步复制技术来实现集群化的数据一致性。

CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地。


实操部分:

主从复制

准备3个服务器3个客户端

准备3个配置文件,分别配置端口为6379、6380、6381。修改着3个配置文件,启动模式改成前台运行,关闭AOF和日志,然后启动3台redis-server。
在这里插入图片描述
修改配置文件

daemonize no
appendonly no
logfile ""

开3个窗口,分别启动3台服务器

redis-server ./6379.conf
redis-server ./6380.conf
redis-server ./6381.conf

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再开3个窗口,作为3个客户端,分别连接服务器6379、6380、6381
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用命令指定主从

执行命令REPLICAOF,使6380从属于6379

REPLICAOF 127.0.0.1 6379	# 从属于6379

在这里插入图片描述
在这里插入图片描述
验证主从复制,在主机6389中添加一些数据,在从机了取数据
在这里插入图片描述

在这里插入图片描述
验证从机,不能写入数据
在这里插入图片描述
配置6381从属于6379,配置后原来6379中的数据就没有了,数据与主机6379一致
在这里插入图片描述

模拟主机挂了手动处理

ctrl+c,停掉6379,模拟主机挂了
在这里插入图片描述
从机6380、6381找不到主机了
在这里插入图片描述
在这里插入图片描述
现在我们把6380升级成主机

REPLICAOF no one # 首先把3780从属与6379取消掉

在这里插入图片描述
在这里插入图片描述
配置6381从属于6380

REPLICAOF 127.0.0.1 6380	# 从属于6380

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试处理后的主从
在这里插入图片描述
在这里插入图片描述

使用配置文件指定主从
replicaof <masterip> <masterport>	# 配置从属于谁
masterauth <master-password>	# 主机密码
replica-read-only yes			# 从机只读
replica-serve-stale-data yes	# 从机启动后从属于主机,主机在同步数据给从机的过程中,从机是否要对外提供历史数据的查询
repl-diskless-sync no	# yes使用网络,no使用磁盘IO
repl-backlog-size 1mb	# 增量复制,队列大小
min-replicas-to-write 3		# 
min-replicas-max-lag 10		# 

在这里插入图片描述

哨兵Sentinel

准备配置文件
# 哨兵26379
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2

# 哨兵26380
port 26380
sentinel monitor mymaster 127.0.0.1 6379 2

# 哨兵26381
port 26381
sentinel monitor mymaster 127.0.0.1 6379 2

在这里插入图片描述

启动redis服务器
# 启动6379
redis-server 6379.conf

# 启动6380,并从属于6379
redis-server 6380.conf --replicaof 127.0.0.1 6379

# 启动6381,并从属于6379
redis-server 6381.conf --replicaof 127.0.0.1 6379
启动哨兵
# 启动26379
redis-server 26379.conf --sentinel

# 启动26380
redis-server 26380.conf --sentinel

# 启动26381
redis-server 26381.conf --sentinel

在这里插入图片描述

自动故障转移

我们把redis主6379停掉,模拟主机出故障。查看6380、6381日志,与主机失去连接了。
在这里插入图片描述
在这里插入图片描述
查看哨兵日志,过一会,哨兵监控到6379挂了,开启新纪元,投票选举出6380作为新的主机,替换原来的主机6379,6381从属于6380,完成自动故障转移。
在这里插入图片描述

总结

哨兵只配置了主,怎么知道从的?
配置主从的时候,从机接入后,观察主机日志,会发现主机中可以打印出从机的信息。也就是说,主机是知道从机ip、端口号等信息的。
哨兵监控主机,就可以知道从机的信息。
哨兵是通过发布 / 订阅 发现其它哨兵的。
在这里插入图片描述


上一篇《08 Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用》
下一篇《10 Redis的集群:主从复制、CAP、PAXOS、cluster分片集群02》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值