Docker Swarm集群部署lnmp+redis

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
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数据库实现在线游戏中的游戏玩家积分排行榜功能。
目录
相关文章
|
4月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
362 79
|
6月前
|
NoSQL Redis Docker
Docker——阿里云服务器利用docker搭建redis集群
本文详细记录了使用Docker搭建Redis集群的过程,包括检查Docker和Docker Compose的安装、创建Redis配置文件、编写`docker-compose.yml`文件、启动Redis节点、创建Redis集群的具体步骤,以及最终的验证方法。文章还提供了在多服务器环境下搭建Redis集群的注意事项,帮助读者全面了解 Redis 集群的部署流程。
679 70
|
7月前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
5月前
|
NoSQL Redis 数据库
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
361 10
|
9月前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
239 14
|
8月前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
291 7
|
4月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
4月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
643 0
|
4月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
170 32