汕头企业做网站,沈阳的网站建设,wordpress查看浏览量,电视剧在线观看完整版免费网站基于Redis集群解决单机Redis存在的问题#xff0c;在之前学Redis一直都是单节点部署
单机或单节点Redis存在的四大问题#xff1a; 数据丢失问题#xff1a;Redis是内存存储#xff0c;服务重启可能会丢失数据 利用Redis数据持久化的功能将数据写入磁盘并发能力问题…基于Redis集群解决单机Redis存在的问题在之前学Redis一直都是单节点部署
单机或单节点Redis存在的四大问题 数据丢失问题Redis是内存存储服务重启可能会丢失数据 利用Redis数据持久化的功能将数据写入磁盘并发能力问题单节点Redis并发能力虽然不错但也无法满足如618这样的高并发场景 搭建一主多从集群实现读写分离单点故障 - 故障恢复问题如果Redis宕机则服务不可用需要一种自动的故障恢复手段 利用Redis哨兵实现健康检测和自动故障恢复存储能力问题Redis基于内存存储单节点能存储的数据量难以满足海量数据要求 搭建分片集群利用插槽机制实现动态扩容从理论上来讲它的存储能力是没有上限的
1. Redis主从
搭建主从架构主从数据同步原理
单节点Redis的并发能力是有上限的要进一步提高Redis的并发能力就需要搭建主从集群实现读写分离。
1.1.主从集群结构
Redis的集群往往都是主从集群它往往会有一个Master主节点多个Slave / Replica从节点。
下图就是一个简单的Redis主从集群结构 如图所示集群中有一个Master主节点、两个Slave从节点现在叫Replica 起码要包含三个节点要有三个Redis实例一主两从。
在Redis 5.0以前从节点是叫Slave的后来改名叫Replica 都是代表从节点
当我们通过Redis的Java客户端访问主从集群时应该做好路由 如果是写操作应该访问Master主节点Master主节点会自动将数据同步给两个Slave从节点 如果是读操作建议访问各个Slave从节点从而分担并发压力
Master主节点可以执行set命令写操作Replica从节点只能执行get命令读操作 。
为什么Redis要做成这种主从的集群而不是传统的负载均衡集群呢 这是因为Redis应用当中大多数都是读多写少的场景也就是查询比较多而增删改比较少既然如此我们更多要应对的是读的压力那我做了主从以后我们还可以去做读写分离 也就是说我在执行写操作时我让它去访问Master主节点但如果执行的是读操作那我就把你的请求分发到各个Slave或Replica从节点这样我们一主多从多个从节点共同承担读的请求我们的读并发能力就可以得到一个比较大的提升所以这就是为什么要搭建主从集群的一个原因了。但是做主从集群必须保证一点就是客户端在读取的时候不管访问到哪个Slave从节点都必须要保证拿到相同的结果 如何保证 需要让Master主节点把它上面的数据同步给每一个Slave从节点这就是Redis主从架构的一个基本模式了 1.2 搭建主从集群
1. 准备实例和配置
我们会在同一台虚拟机中开启3个Redis实例模拟主从集群。 我们会在同一个虚拟机中利用3个Docker容器来搭建主从集群。 要在同一台虚拟机开启3个实例必须准备三份不同的配置文件和目录配置文件所在目录也就是工作目录。 在同一个机器下还要修改每个实例的端口
2. 启动 开启主从关系
分别启动多个Redis实例虽然我们启动了3个Redis实例但是它们并没有形成主从关系我们需要通过命令来配置主从关系
# Redis5.0以前
slaveof masterip masterport
# Redis5.0以后
replicaof masterip masterport
有临时和永久两种模式 永久生效在redis.conf文件中利用slaveof命令指定Master主节点的IP和端口 临时生效直接利用redis-cli控制台输入slaveof命令指定Master主节点的IP和端口
INFO replication查看集群的状态信息
这样就可以实现读写分离了如果在Slave从节点上执行set写操作会报错 假设有A、B两个Redis实例如何让B作为A的Slave从节点
在B节点执行命令slaveof A的IP A的Port端口
1.3 数据同步原理