Docker Swarm集群部署lnmp+redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: Docker Swarm集群部署lnmp+redis

博主使用的配置都在github上面, 大家拉下来即可使用

swarm简单介绍

我们先说一下docker集群之一的swarm集群, 先说一下集群这个东西, 它并不适用于任何项目, 他是为了解决架构中高性能的。将单节点的负载转移到多节点身上, 但是多节点中存在很多问题, 例如节点的状态、通信、调度、任务分配等等, 我们自己来弄的话十分麻烦、相当复杂, 但是使用了docker集群, 它已经帮我们做好了这些工作, 甚至做的更多。

swarmdocker-compose一样, 都是声明yml文件来创建应用服务

那么我们知道, 集群就是多台机器进行工作, 肯定要有masterworker,

来看看集群架构图

master, 多worker, 已经是比较比较复杂了。最少master得有一个,我们这边先弄一个,你们后期可以自己扩展

然后我们再说一下swarm里面的一些概念:

  • services
    swarm service是一个抽象的概念,它只是一个对运行在swarm集群上的应用服务,所期望状态的描述。它就像一个描述了下面物品的清单列表一样:
  1. 服务名称
  2. 使用哪个镜像来创建容器
  3. 要运行多少个副本
  4. 服务的容器要连接到哪个网络上
  5. 应该映射哪些端口
  • task
    Docker Swarm中,task是一个部署的最小单元,task与容器是一对一的关系。
  • stack
    stack是描述一系列相关services的集合。我们通过在一个YAML文件中来定义一个stack。简而言之就是一个应用 包括了什么数据库 框架等,一个服务 = 多个容器

swarm基本操作命令

  • 创建应用
docker stack deploy -c docker-compose.yml laravel
 # -c 指定yml文件 后面跟的是应用名
  • 删除应用
docker stack rm laravel
  • 查看应用
docker stack ps laravel
  • 查看所有服务
docker service ls

小试牛刀-搭建lnmp

因为博主这边docker18.09, 所以我编写version为最新版3.7yml文件, 大家可以对应Docker Engine来编写对应versionyml

  • docker-compose.yml
version: "3.7"   # 声明yml文件版本
services: 
  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=1234567
      - MYSQL_DATABASE=test
      - MYSQL_USER=test
      - MYSQL_PASSWORD=1234567
# redis服务被限制为使用不超过50M的内存和0.50(不超过单个内核的50%)可用处理时间(CPU),并且具有保留20M的内存和0.25CPU时间(始终可用)。
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M
# 构建一个镜像(利用docker-compose执行此文件);如果在集群模式下部署,将忽略此项,docker stack仅仅接受预先构建好的镜像。 
  php-fpm:
    image: wearemobedia/php-fpm:latest
    volumes:
       - ./www:/application
    working_dir: /application  
    environment: 
      - APP_ENV=local
      - APP_DEBUG=true
      - APP_TIMEZONE=UTC
      - DB_CONNECTION=mysql # 设置为服务名 别搞错了 重点
      - DB_HOST=mysql
      - DB_PORT=3306
      - DB_DATABASE=test
      - DB_USERNAME=test
      - DB_PASSWORD=1234567
      - CACHE_DRIVER=redis
      - QUEUE_DRIVER=redis
      - REDIS_HOST=redis
      - REDIS_PORT=6379
    deploy:
      mode: replicated # 默认
      replicas: 1 # 副本数量一个
  webserver:
      image: nginx:alpine
      labels: # 指定标签
        com.example.description: "This label will appear on all containers for the web service"
      volumes:
        - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
        - "80:80"
      depends_on: # 依赖于mysql redis
        - php-fpm
  visualizer: # 可视化的东西
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      restart_policy:  # 配置是否以及如何在退出容器时重新启动容器
        condition: on-failure # 条件
        delay: 1s # 延时
        max_attempts: 3 # 重新启动次数
        window: 120s # 决定重新启动是否成功之前要等待的时间
      placement:
        constraints: [node.role == manager]

进入从github上拉下来的仓库,利用编写好的yml创建应用

sudo docker stack deploy -c docker-compose.yml laravel

查看一下服务咋样了

都启动完了, 可以查看访问每个节点的ip了, 都没有问题,数据表没有建立,所以抛的异常, redis已经OK

Swarm 集群管理节点新建该文件,其中的 visualizer 服务提供一个可视化页面(就是yml里面声明的那个visualizer),我们可以从浏览器中很直观的查看集群中各个服务的运行节点。来看看效果

结束语

swarm集群功能挺强大,博主不再做过多介绍,资料都在github上, 大家拉取下来看看即可。希望大家多看看文档,实践,下次我们说说k8s

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
Kubernetes 数据可视化 NoSQL
Docker Swarm集群部署lnmp+redis
Docker Swarm集群部署lnmp+redis
105 0
|
NoSQL Redis Docker
docker快速集群部署redis
docker快速集群部署redis
260 0
|
消息中间件 Docker 微服务
16-微服务技术栈(高级):Docker集群部署RabbitMQ
在RabbitMQ的官方文档中,讲述了两种集群的配置方式: ● 普通模式:普通模式集群不进行数据同步,每个MQ都有自己的队列、数据信息(其它元数据信息如交换机等会同步)。例如我们有2个MQ:mq1,和mq2,如果你的消息在mq1,而你连接到了mq2,那么mq2会去mq1拉取消息,然后返回给你。如果mq1宕机,消息就会丢失。 ● 镜像模式:与普通模式不同,队列会在各个mq的镜像节点之间同步,因此你连接到任何一个镜像节点,均可获取到消息。而且如果一个节点宕机,并不会导致数据丢失。不过,这种方式增加了数据同步的带宽消耗。
267 0
|
存储 NoSQL 网络协议
Docker | redis集群部署实战
Docker | redis集群部署实战
280 0
Docker | redis集群部署实战
|
JSON Kubernetes Linux
K8S 集群部署_docker 安装 | 学习笔记
快速学习 K8S 集群部署_docker 安装
138 0
K8S 集群部署_docker 安装 | 学习笔记
|
存储 安全 关系型数据库
【Docker】基于实例项目的集群部署(五)Docker搭建MySQL集群 | PXC集群
【Docker】基于实例项目的集群部署(五)Docker搭建MySQL集群 | PXC集群
713 0
【Docker】基于实例项目的集群部署(五)Docker搭建MySQL集群 | PXC集群
|
网络协议 Linux 网络安全
【Docker】基于实例项目的集群部署(三)Linux基础命令
【Docker】基于实例项目的集群部署(三)Linux基础命令
127 0
【Docker】基于实例项目的集群部署(三)Linux基础命令
|
前端开发 Java 关系型数据库
【Docker】基于实例项目的集群部署(二)部署项目实例介绍与搭建 | 前后端分离项目
【Docker】基于实例项目的集群部署(二)部署项目实例介绍与搭建 | 前后端分离项目
180 0
【Docker】基于实例项目的集群部署(二)部署项目实例介绍与搭建 | 前后端分离项目
|
负载均衡 监控 算法
【Docker】基于实例项目的集群部署(六)数据库负载均衡 | Haproxy分发机制 | 监控负载状况
【Docker】基于实例项目的集群部署(六)数据库负载均衡 | Haproxy分发机制 | 监控负载状况
381 0
【Docker】基于实例项目的集群部署(六)数据库负载均衡 | Haproxy分发机制 | 监控负载状况
|
NoSQL Java 中间件
【Docker】基于实例项目的集群部署(四)Docker虚拟机 | Docker 指令 | Docker容器与镜像
【Docker】基于实例项目的集群部署(四)Docker虚拟机 | Docker 指令 | Docker容器与镜像
314 0
【Docker】基于实例项目的集群部署(四)Docker虚拟机 | Docker 指令 | Docker容器与镜像