IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Docker Redis哨兵、集群部署详解 -> 正文阅读

[大数据]Docker Redis哨兵、集群部署详解

1.引言

在实际生产环境当中,缓存时支撑系统业务高效运行的重要基础设施。缓存的可靠性和可用性至关重要,本章利用Docker+docker-compose+Redis以实现单机版的Redis哨兵模式集群部署,阅读本章需要前置了解Docker容器和Redis哨兵模式的相关知识。

2.Redis主从复制

2.1容器编排

完成主从复制、以支撑读写分离(写:主,读:从)

version: '3'
services:
  master:
    image: redis
    container_name: redis-master
    command: redis-server --requirepass 123456
    ports:
      - "6379:6379"
    networks:
      sentinel-master:
        ipv4_address: 172.33.1.0
  slave1:
    image: redis
    container_name: redis-slave-1
    ports:
      - "6380:6379"
    command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456 
    depends_on:
      - master
    networks:
      sentinel-master:
        ipv4_address: 172.33.1.1
  slave2:
    image: redis
    container_name: redis-slave-2
    ports:
      - "6381:6379"
    command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
    depends_on:
      - master
    networks:
      sentinel-master:
        ipv4_address: 172.33.1.2
networks:
  sentinel-master:
    name: redis_sentinel-master
    driver: bridge
    ipam:
      config:
        - subnet: 172.33.0.0/16

2.2主从测试

主机断开连接,从机依旧连接主机,但没有写操作直到主机重新连接

第一次连接主机,从机发送sync同步命令,master接收命令,启动后台存盘经常,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,完成一次全量复制

  • 全量复制:slave接收到数据库文件数据后,将其存盘并加载到内存中
  • 增量复制:master继续将新的所有收集到的修改命令依次传给slave,完成同步
  • 重新连接会触发全量复制

注意:非docker安装的情况下,需要对配置文件进行持久化操作,命令行进行的主从配置重启时会刷新

2.3测试网络

查看网络配置:docker inspect sentinel-master
容器网络测试:

  • apt-get update
  • apt-get install iputils-ping
  • ping slave2
  • ping slave1

3.Redis哨兵集群

3.1 容器编排

version: '2'
services:
  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    ports:
      - "26379:26379"
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - "./conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf"
  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    ports:
      - "26380:26379"
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - "./conf/sentinel2.conf:/usr/local/etc/redis/sentinel.conf"
  sentinel3:
    image: redis
    container_name: redis-sentinel-3
    ports:
      - "26381:26379"
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - "./conf/sentinel3.conf:/usr/local/etc/redis/sentinel.conf"
networks:
  default:
    external:
      name: redis_sentinel-master

3.2 编写哨兵配置文件

分别命名sentinel.conf、sentinel2.conf、sentinel3.conf

port 26379
dir /tmp
sentinel monitor mymaster 172.33.1.0 6379 2
sentinel auth-pass mymaster 123456 
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000  
sentinel deny-scripts-reconfig yes

注意:

  • 配置了静态ip,无需修改任何配置
  • 两票认为master宕机即进行选举:sentinel monitor mymaster 172.33.1.0 6379 2

3.3 测试

  • 查看实例:docker ps
    在这里插入图片描述
  • 查看dockernet:docker inspact redis_sentinel-master
    在这里插入图片描述

4.Redis测试集群

4.1 测试步骤

进入哨兵节点:

  • docker exec -it redis-sentinel-1 bash
  • redis-cli -p 26379
  • sentinel master mymaster
    在这里插入图片描述

关闭主节点、测试主从切换:

  • docker kill redis-master
  • sentinel master mymaster
    在这里插入图片描述

验证:

  • 主节点已自动切换、ip切换
  • 主节点重启不会直接作为主机

4.2 优缺点分析

优点:

  • 哨兵集群,基于主从复制模式,兼又其有点
  • 自动切换,对故障进行转移,可用性更佳
  • 架构更健壮
    缺点:
  • 不易在线扩容
  • 哨兵配置较为复杂

5.Redis问题扩展

5.1 缓存穿透

大量发起redis中未缓存的数据,照成对mysql的大量查询,即缓存穿透。
解决方法:

  • 可用通过布隆过滤器对请求数据进行过滤
  • 设置缓存空对象

5.2 缓存击穿

热点key过期导致的大量直接对mysql的访问。
解决方法:

  • 对热点数据进行过期延时设置
  • 加分布式锁,对同一个key同时只能一个线程查询

5.3 缓存雪崩

缓存集中过期或宕机导致的大量对mysql的不同数据查询
解决方法:

  • 保障redis高可用(集群)
  • 限流降级
  • 数据预热

5.4 分布式锁

阿里:redission

6.参考资料

https://blog.csdn.net/qq_39211866/article/details/88044546

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:39:43  更:2022-03-04 15:42:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:03:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码