主机Redis服务迁移到现有Docker Overlay网络

news/2024/6/17 8:23:43

《麻雀虽小,五脏俱全》之主机现有Redis服务迁移到Docker Swarm Overlay网络,并搭建高可用容器集群。

hello, 好久不见,之前文章记录了一个实战的2C分布式项目的改造过程,结果如下:

其中Redis并未完成容器化改造(目前是主机单点),本文记录将Redis升级到容器化Redis-Sentinel集群

升级思路:

  1. 《Docker-compose搭建Redis高可用哨兵集群》,这里将Redis-Sentinel容器接入现有Docker Swarm overlay网络,规避Redis ClientApp访问不同网络的Redis-Sentinel引发的混乱(因NAT转换和Port映射)。

  2. 利用主机上现有Redis dump.rdb持久化文件快速启动Redis哨兵集群
    (1 master:2slave:3 sentinel)

  3. 修改receiverapp的Redis连接字符串,验证

注意事项

  • 现有的应用程序处于Docker Swarm Overlay网络,默认是不允许附加其他容器,这里我们需要将该Overlay网络配置成可附加,方便Redis-Sentinel接入该网络,所有容器同网络。

......
// 下面生成的overlay网络名称是:eqidstack_webnet
networks:
  webnet:
    driver: overlay
    attachable: true   // 将现有的overlay网络配置为:可附加容器
.....
  • 官方Redis镜像持久化数据存储在:/data, 本处我们需要将现有的主机Redis dump.rdb文件外挂进Master容器。

# 下面是master/slave docker-compose.yml文件
version: '3.7'
services:
  master:
    image: redis
    container_name: redis-master
    command: redis-server  --requirepass zxcde@1  --masterauth zxcde@1
    volumes:
      - /home/redis-sentinel/redis/data:/data
    ports:
      - "6380:6379"
    networks:
      - webnet

  slave1:
    image: redis
    container_name: redis-slave-1
    ports:
      - "6381:6379"
    command:  redis-server --slaveof redis-master 6379 --masterauth zxcde@1  --requirepass zxcde@1
    networks:
      - webnet

  slave2:
    image: redis
    container_name: redis-slave-2
    ports:
      - "6382:6379"
    command: redis-server --slaveof redis-master 6379 --masterauth zxcde@1 --requirepass zxcde@1
    networks:
      - webnet
networks:
  webnet:
    external: true
    name: eqidstack_webnet      // 使用现有的Dokcer Overlay网络
  • 经过验证,StackExchange.Redis最新版本2.1.58 可以更简洁的方式支持Redis-sentinel,:

    只需更改原单点连接字符串,其中10.0.7.41:26379,10.0.7.42:26379,10.0.7.43:26379是sentinel容器端点,serviceName为Sentinel配置的Maser/slave名称。

"redis": "10.0.7.41:26379,10.0.7.42:26379,10.0.7.43:26379,serviceName=mymaster1,password=zxcde@1,abortConnect=false,connectTimeout=10000,writeBuffer=40960"

后记

本文记录较凌乱,需要了解本次实操的背景和过程。
总结起来:将主机上现有单点Redis服务容器化,并搭建哨兵高可用集群, 且将Redis集群与应用程序放在同一Overlay网络,便于同网络段容器通信。

对于ASP.NET Core  && Docker && Redis相关问题,  欢迎各位提出并一起探讨。

  • https://hub.docker.com/_/redis

  • https://stackexchange.github.io/StackExchange.Redis/Configuration.html

  • 前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)

  • 解读三组容易混淆的Dockerfile指令

  • 掌握了Docker Layer Caching才敢自称精通Dockerfile

  • 基于docker-compose的Gitlab CI/CD实践&排坑指南


http://www.niftyadmin.cn/n/1864615.html

相关文章

Linux中作业控制命令

开门见山,最近.NET劝退师要在linux上写些长时间运行的脚本,获取Azure BlobStorage存储的数据。记录一下Linux中后台执行作业的命令。Linux作业作业(Job)是shell管理的进程(每个job都有一个关联的PID),每个作业会被分配一个线性job ID。有两种…

用React hooks实现TDD

本文首发于我的个人博客: https://teobler.com, 转载请注明出处 由于篇幅所限文章中并没有给出demo的所有代码,大家如果有兴趣可以将代码clone到本地从commit来看整个demo的TDD过程,配合文章来看会比较清晰。本文涉及的所有代码地址: teobler/TDD-with-R…

如何利用.NETCore向Azure EventHubs准实时批量发送数据?

最近在做一个基于Azure云的物联网分析项目:.netcore采集程序向Azure事件中心(EventHubs)发送数据,通过Azure EventHubs Capture转储到Azure BlogStorage,供数据科学团队分析。为什么使用Azure事件中心?Azure事件中心是一种Azure上…

Webpack原理(1) — Why Webpack

本文首发于我的个人博客: https://teobler.com, 转载请注明出处 我们怎么使用JS 众所周知&#xff0c;我们在HTML文件中使用JavaScript只能通过script标签来引入&#xff1a; <script src"./index.js"></script><script>console.log(Hello World…

Logging with ElasticSearch, Kibana, ASP.NET Core and Docker

“好久不见&#xff0c;前两周经历了人生第一次"伪牛市"&#xff0c;基金和股市大起大落&#xff0c;更加坚信“你永远赚不到超出你认知范围之外的钱,除非靠着运气”&#xff0c;老韭菜诚不欺我也。当能力与野心不匹配&#xff0c;只能多看书&#xff0c;收割那些不求…

Webpack原理(2) — 加载原理

webpack的核心目的和功能就是打包JavaScript代码&#xff0c;在时间的推进过程中&#xff0c;其逐渐演化成了一个生态体系&#xff0c;成为前端打包代码和处理开发时候必不可少的一个工具。 本文首发于我的个人博客: https://teobler.com, 转载请注明出处&#xff0c; 文章中提…

Webpack原理(3) — 核心概念

本文首发于我的个人博客: https://teobler.com 转载请注明出处 Entry 我们先来看一张图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7XWHVFpq-1582879870653)(https://teobler-image.s3-us-west-1.amazonaws.com/webpack-entry.png)] 从这张图…

如何利用Gitlab-CI持续部署到远程机器?

长话短说&#xff0c;今天聊一聊使用Gitlab-CI 自动部署到远程服务器。如果看过《基于docker-compose的Gitlab CI/CD实践&排坑指南》这篇文章的朋友&#xff0c;会注意到我是在 Gitlab-Runner服务器上自动部署的站点&#xff0c;本次我们结合ssh部署到远程机器(将CI服务器和…