记录最后一次对中型2C企业级项目的容器化改造

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接入该网络,所有容器同网络。
  1. ......
  2. # 下面生成的overlay网络名称是:eqidstack_webnet
  3. networks:
  4. webnet:
  5. driver: overlay
  6. attachable: true // 应用程序Docker swarm overlay网络配置可附加容器
  7. .....
  • 官方Redis镜像持久化数据存储在:/data, 本处我们需要将现有的主机Redis dump.rdb文件外挂进Master容器。
  1. # 下面是master/slave docker-compose.yml文件
  2. version: '3.7'
  3. services:
  4. master:
  5. image: redis
  6. container_name: redis-master
  7. command: redis-server --requirepass zxcde@1 --masterauth zxcde@1
  8. volumes:
  9. - /home/redis-sentinel/redis/data:/data
  10. ports:
  11. - "6380:6379"
  12. networks:
  13. - webnet
  14. slave1:
  15. image: redis
  16. container_name: redis-slave-1
  17. ports:
  18. - "6381:6379"
  19. command: redis-server --slaveof redis-master 6379 --masterauth zxcde@1 --requirepass zxcde@1
  20. networks:
  21. - webnet
  22. slave2:
  23. image: redis
  24. container_name: redis-slave-2
  25. ports:
  26. - "6382:6379"
  27. command: redis-server --slaveof redis-master 6379 --masterauth zxcde@1 --requirepass zxcde@1
  28. networks:
  29. - webnet
  30. networks:
  31. webnet:
  32. external: true
  33. name: eqidstack_webnet
  • 经过验证,最新版本StackExchange.Redis 2.1.58 可以更简洁的方式支持Redis-sentinel, 只需更改连接字符串,其中10.0.7.41:26379,10.0.7.42:26379,10.0.7.43:26379是sentinel容器ip,serviceName配置主节点名称。
  1. "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网络,便于同网络段容器通信。

主机Redis服务迁移到现有Docker Overlay环境的更多相关文章

  1. 使用nginx实现一个主机部署多域名指向不同docker项目

     1,安装 docker yum install docker 使用Docker 中国加速器 vim /etc/docker/daemon.json 添加下面代码 { "registry-m ...

  2. docker 中运行 redis 服务

    先使用 dockerfile 创建一个 redis 容器 FROM ubuntu:latest RUN apt-get update RUN apt-get -y install redis-serv ...

  3. Ubuntu 17.10 用 apt 搭建 lamp 环境、安装 phpmyadmin、redis 服务+扩展、mysql 扩展、开启错误提示、配置虚拟主机

    2018-02-24 13:50:30 更新: 个人喜欢相对原生又不太麻烦,所以用 apt 构建环境.不过,最近使用到现在记得出现过了 3 次 apache 或 mysql 服务器无法启动或无法连接的 ...

  4. redis哨兵集群、docker入门

    redis-sentinel主从复制高可用 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果m ...

  5. 服务迁移之路 | Spring Cloud向Service Mesh转变

    一.导读 Spring Cloud基于Spring Boot开发,提供一套完整的微服务解决方案,具体包括服务注册与发现,配置中心,全链路监控,API网关,熔断器,远程调用框架,工具客户端等选项中立的开 ...

  6. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

  7. Docker Overlay 应用部署

    Docker Overlay 部署条件 要想使用Docker原生Overlay网络,需要满足以下任意条件: 1.Docker运行在Swarm模式 2.使用键值存储的Docker主机集群 本次部署使用键 ...

  8. Redis服务之集群节点管理

    上一篇博客主要聊了下redis cluster的部署配置,以及使用redis.trib.rb工具所需ruby环境的搭建.使用redis.trib.rb工具创建.查看集群相关信息等,回顾请参考https ...

  9. k8s入坑之路(13)服务迁移(定时任务 微服务 传统服务)

    定时任务迁移kubernetes 服务迁移步骤 1.安装好java 2.安装好maven 项目打包 mvn package 测试传参运行 java -cp cronjob-demo-1.0-SNAPS ...

随机推荐

  1. win10系统systeminfo命令的过滤用法

    一.背景: 在win10系统使用systeminfo命令可以查看windows系统信息,但是,默认显示的是全部信息,由于显示内容过多,这对查看特定信息带来一定麻烦.考虑使用该命令时能否使用过滤功能,直 ...

  2. 【C++】cout、cerr、clog之间的区别

    cout.cerr.clog三者都是标准IO库中提供的输出工具. 但是cout是支持重定向操作的.比如freopen()对于cout有效. clog和cerr主要用于错误输出. 因此,如果将程序输出重 ...

  3. Java实现 LeetCode 552 学生出勤记录 II(数学转换?还是动态规划?)

    552. 学生出勤记录 II 给定一个正整数 n,返回长度为 n 的所有可被视为可奖励的出勤记录的数量. 答案可能非常大,你只需返回结果mod 109 + 7的值. 学生出勤记录是只包含以下三个字符的 ...

  4. Java实现 LeetCode 316 去除重复字母

    316. 去除重复字母 给定一个仅包含小写字母的字符串,去除字符串中重复的字母,使得每个字母只出现一次.需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置). 示例 1: 输入: " ...

  5. Java实现 蓝桥杯VIP 算法提高 种树

    算法提高 种树 时间限制:1.0s 内存限制:256.0MB 种树 问题描述 A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门 得到指令后,初步规划出n个 ...

  6. Winform最基础的DBHelper类

    PS:我已经忘记了n遍了 class DBHelper { //连接数据库 public static string connstring = @"Data Source=DESKTOP-8 ...

  7. 第四届蓝桥杯JavaA组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.世纪末的星期 题目描述 曾有邪教称1999年12月31日是世界末日.当然该谣言已经不攻自破. 还有人称今后的某个世纪末的12月31日, ...

  8. python json unicode utf-8处理总结

    1.直接输出字典中文 在python中经常遇见直接print dict(字典),或者dict转json,但是没有给特定的参数,然后打印json字符串,输出的中文就成了unicode码的情况,如下: d ...

  9. monkey命令的基本使用

    看到monkey,你想到了什么?今天给大家分享下monkey命令的基本使用 monkey测试是Android平台自动化测试的一种手段,通过monkey程序模拟用户触摸屏幕,滑动.按键操作等操作对设备上 ...

  10. 一文说通Dotnet Core的后台任务

    这是一文说通系列的第二篇,里面有些内容会用到第一篇中间件的部分概念.如果需要,可以参看第一篇:一文说通Dotnet Core的中间件   一.前言 后台任务在一些特殊的应用场合,有相当的需求. 比方, ...