redis-cluster 集群
Redis的集群模式
主从
-
通过持久化,在即使数据库重启的情况下,也不会丢失数据,这一台服务器即使出了故障,也不用担心数据丢失
-
出现了复制功能,所以的一主二从的模式,多数据库可以进行读写,一般从数据库用于读和同步从数据库的内容
-
一个主数据库可以有多个从数据库,一个从数据库只能有一个主数据库
哨兵模式
简单的主从模式,当主数据库宕机的时候,需要手动的把一台从数据库切换为主数据库,这个过程需要手动的干预,费时费力。
redis的 哨兵
,通过发送命令,等待redis的响应,从而监视运行的多个redis实例。
cluster
-
redis的哨兵模式,基本上都实现了高可用,读写分离,但是这种情况下,每台
redis
服务器都存储着相同的数据,浪费空间 -
redis3.0
以后,推荐使用cluster
集群模式,实现redis
的分布式存储。也就是说每个redis
上存储不同的内容
Redis Cluster(集群)
-
redis cluster
完全去中心化,不存在中心节点和代理节点 -
redis
集群没有统一的入口,客户端可以连接到集群的任意节点上,redis 内部的节点是可以相互通信的。
如何判断一个节点是否挂掉?
为了实现集群的高可用,判断节点是否健康,
redis-cluster
会有这么一个投票机制,如果超过半数的节点认为这个节点挂了,那么这个节点才算挂了。
如何判断一个集群是否挂掉?
如何任意一个节点挂了,而这个节点又没有从节点,那么这个集群就挂了。
为什么一个任意一个节点(没有从节点)挂了,整个集群就挂了呢?
这是因为 redis
集群内置了 16384 个slot
卡槽,并且把所有的物理节点都映射到这个卡槽上。或者说把这些个卡槽平均分配给各个节点。
redis为了保证高可用,redis官方建议使用至少使用3个主节点,最多一千个节点
redis集群搭建
redis至少需要三个节点
-
因为要超过半数的几点认为某个几点挂了,才能把这个节点挂了,所以单个的节点无法构成集群
-
最好是奇数个节点
redis集群至少需要六台服务器
-
因为redis为了保证高可用,所以他的每个节点,都会有两个从节点
-
本地使用伪分布式,即一个
redis
可以启用多个端口。这个过程其实和生产环境是一样的
redis在搭建集群之前,最好先还原最原始的环境。
CAP
C
一致性
A
高可用
P
分区容错性:当网络分区发生故障的时候,仍旧可以对外提供一致性和可用性服务。 所以P是必须存在的
可用性和一致性是一对冤家,他们是一对冤家,同一时间只能满足一个
举个例子
如上图,主从数据库之间某个网络连接断了。那么此时主数据库往从数据库上同步数据失败,此时就可以有两种情况选择。
-
让从数据库不再对外提供服务,直到主从之间的连接再次连通为止。这样就保证了,只要客户能访问到的数据,肯定是实时准确的,所以有一致性,但是没有了高可用
-
选择2就是,让
redis
继续对外提供服务,这样可以满足高可用,但是就不满足了一致性了。
启动配置过程
启动 6 个redis
本人使用docker ,启动 6个 redis服务。redis 的配置文件需要下载的。
docker run -v /home/peng/dockervfiles/redis:/usr/local/etc/redis --name tc06 -d -p 7006:6379 aa