阅读量:0
点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
- Hadoop(已更完)
- HDFS(已更完)
- MapReduce(已更完)
- Hive(已更完)
- Flume(已更完)
- Sqoop(已更完)
- Zookeeper(已更完)
- HBase(已更完)
- Redis (正在更新…)
章节内容
上节我们完成了:
- Redis分布式锁
- Redis SETNX
- Redis Redisson
- 分布式锁对比
- Java的部分实现
高可用介绍
高可用(High Availability)通常用来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
CAP中的AP模型。
主从复制
Redis支持主从复制功能,可以通过 slaveof(Redis5以后修改为replicaof)或者在配置文件中设置来开启该功能。
一主一从
一主多从
传递复制
主从配置
主Redis
无需特殊的配置
从Redis
我们需要修改 redis.conf 文件,来实现。
比如我的主Redis是h121机器,当前我当前在h122上,计划变为h121的从服务器,那你需要如下的配置:
replicaof h121.wzk.icu 6379
主从作用
- 读写分离:一主多从,主从同步,主写从读。
- 数据容灾:从是主的备份。
同步模式
全量同步
- 同步快照阶段:Master创建并发送RDB给Slave,Slave载入并解析快照,Master同时将此阶段所产生的新的写命令存储到缓冲区。
- 同步写缓冲阶段:Master向Slave同步存储在缓冲区的写操作命令
- 同步增量阶段:Master向Slave同步写操作命令。
增量同步
- Redis增量同步主要是Slave完成初始化正常工作后,Master的写操作同步到Slave
- 通常情况下, Master每次执行一个写命令就会向Slave发送相同的写命令,然后Slave执行。
心跳监测
在命令阶段,从服务器默认会以每秒一次的频率向主服务器发送命令:
replconf ack <replication_offset>
主要有如下的作用:
- 检测主从的连接状态
- 辅助实现min-slaves
- 检测命令丢失
哨兵模式
哨兵介绍
哨兵(Sentinel)是Redis高可用的解决方案,由一个或者多个sentinel集群监视一个或者多个服务器。
当主服务器下线时,sentinel可以将某一从服务器升级为主服务。
部署方案
配置过程
由于需要启动很多,所以直接使用容器的方式部署。
version: '3' services: redis-master: image: redis:6.2 container_name: redis-master command: redis-server --appendonly yes ports: - 6379:6379 volumes: - ./data/redis-master:/data redis-slave1: image: redis:6.2 container_name: redis-slave1 command: redis-server --slaveof redis-master 6379 ports: - 6380:6379 volumes: - ./data/redis-slave1:/data depends_on: - redis-master redis-slave2: image: redis:6.2 container_name: redis-slave2 command: redis-server --slaveof redis-master 6379 ports: - 6381:6379 volumes: - ./data/redis-slave2:/data depends_on: - redis-master sentinel1: image: redis:6.2 container_name: sentinel1 command: > sh -c "echo 'port 26379' > /data/sentinel.conf && echo 'sentinel monitor mymaster redis-master 6379 2' >> /data/sentinel.conf && echo 'sentinel down-after-milliseconds mymaster 5000' >> /data/sentinel.conf && echo 'sentinel failover-timeout mymaster 10000' >> /data/sentinel.conf && echo 'sentinel parallel-syncs mymaster 1' >> /data/sentinel.conf && redis-sentinel /data/sentinel.conf" ports: - 26379:26379 depends_on: - redis-master - redis-slave1 - redis-slave2 sentinel2: image: redis:6.2 container_name: sentinel2 command: > sh -c "echo 'port 26380' > /data/sentinel.conf && echo 'sentinel monitor mymaster redis-master 6379 2' >> /data/sentinel.conf && echo 'sentinel down-after-milliseconds mymaster 5000' >> /data/sentinel.conf && echo 'sentinel failover-timeout mymaster 10000' >> /data/sentinel.conf && echo 'sentinel parallel-syncs mymaster 1' >> /data/sentinel.conf && redis-sentinel /data/sentinel.conf" ports: - 26380:26380 depends_on: - redis-master - redis-slave1 - redis-slave2 sentinel3: image: redis:6.2 container_name: sentinel3 command: > sh -c "echo 'port 26381' > /data/sentinel.conf && echo 'sentinel monitor mymaster redis-master 6379 2' >> /data/sentinel.conf && echo 'sentinel down-after-milliseconds mymaster 5000' >> /data/sentinel.conf && echo 'sentinel failover-timeout mymaster 10000' >> /data/sentinel.conf && echo 'sentinel parallel-syncs mymaster 1' >> /data/sentinel.conf && redis-sentinel /data/sentinel.conf" ports: - 26381:26381 depends_on: - redis-master - redis-slave1 - redis-slave2