zoukankan      html  css  js  c++  java
  • docker swarm 集群搭建和臫servoce对服务扩容

    层次关系

    docker 用来搭建容器,一个个容器自己搭建累,
    docker-compose 来批量运行容器,形成一个项目,项目需要高可用,需要集群化
    docker swarm来对docker集群进行编排管理的,后期用k8s代替swarm,基本十台左右的集群 没必要用k8s,用swarm也可以.

    ca          Display and rotate the root CA  #显示swarm的证书
    init        Initialize a swarm
          --advertise-addr string                  Advertised address (format: <ip|interface>[:port])   给swarm添加一个Ip(这里可以选私网也可以选公网,私网流量免费)
          --autolock                               Enable manager autolocking (requiring an unlock key to start a stopped manager)
          --availability string                    Availability of the node ("active"|"pause"|"drain") (default "active")
          --cert-expiry duration                   Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
          --data-path-addr string                  Address or interface to use for data path traffic (format: <ip|interface>)
          --data-path-port uint32                  Port number to use for data path traffic (1024 - 49151). If no value is set
                                                   or is set to 0, the default port (4789) is used.
          --default-addr-pool ipNetSlice           default address pool in CIDR format (default [])
          --default-addr-pool-mask-length uint32   default address pool subnet mask length (default 24)
          --dispatcher-heartbeat duration          Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
          --external-ca external-ca                Specifications of one or more certificate signing endpoints
          --force-new-cluster                      Force create a new cluster from current state
          --listen-addr node-addr                  Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
          --max-snapshots uint                     Number of additional Raft snapshots to retain
          --snapshot-interval uint                 Number of log entries between Raft snapshots (default 10000)
          --task-history-limit int                 Task history retention limit (default 5)
    
    
    join        Join a swarm as a node and/or manager
          --advertise-addr string   Advertised address (format: <ip|interface>[:port])
          --availability string     Availability of the node ("active"|"pause"|"drain") (default "active")
          --data-path-addr string   Address or interface to use for data path traffic (format: <ip|interface>)
          --listen-addr node-addr   Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
          --token string            Token for entry into the swarm
    
    join-token  docker swarm join-token [OPTIONS] (worker|manager)  显示加入管理节点或者工作节点的令牌
    	 -q, --quiet    Only display token
    	 --rotate   Rotate join token
    
    leave       Leave the swarm
    unlock      Unlock swarm
    unlock-key  Manage the unlock key
    update      Update the swarm
    
    

    swarm 节点 分管理节点(Manager)和工作节点(Worker)

    只有manager才能进行操作配置,manager之间相互通信相互管理,manager控制worker,但是worker不能控制manager
    swarm 根据Raft算法一致性,需要至少3个管理节点运行集群服务才能正常运行

    swarm的命令如下

    这里要清楚一点 集群就是多台服务器,如果按照三主三从的原则,就是6台服务器, 那么假如第一台服务器,私网ip为172.18.0.2
    那么docker swarm init --advertise-addr 172.18.0.2 就会把这台服务器创建成管理节点的master,另外可以通过提示得到加入工作节点和新增管理节点的命令

    第二台机器粘贴 docker swarm join --token SWMTKN-1-2rv9be2a6dfyodnbp4p954ya40ai6jl2h5qu6m4duc1zd9iged-91nqungv5xgu3u5lfo4y3sdq7 172.18.0.2:2377 就会变成工作节点
    通过docker node ls可以看到有leader标识为管理节点

    同时在第一台管理节点上 通过打印docker swarm join-token worker/manager,会显示加入管理和工作节点的命令,再其他的服务器粘贴即可加入对应节点

    docker swarm join-token worker
        docker swarm join --token SWMTKN-1-2rv9be2a6dfyodnbp4p954ya40ai6jl2h5qu6m4duc1zd9iged-91nqungv5xgu3u5lfo4y3sdq7 172.18.0.2:2377
    docker swarm join-token manager
    To add a manager to this swarm, run the following command:
        docker swarm join --token SWMTKN-1-2rv9be2a6dfyodnbp4p954ya40ai6jl2h5qu6m4duc1zd9iged-2371e8napgmtn05v8bqkrannm 172.18.0.2:2377
    

    reachable和leader都是管理节点, reachable算是leader的备份管理节点,一旦leader崩溃,reachable节点会升为leader,而leader重新上线后会变为reachable

    Raft协议 集群可用,至少要3个主节点,集群在Raft协议下运行的前提是 至少要>1台的管理节点存活.

    swarm leave 如果要把工作节点改成管理节点,可以先用leave命令,然后生成加入管理节点的令牌

    对任何一个节点使用了 leave就意味着离开集群,过一会集群中 docker node ls命令会看到显示down

    swarm 的网络模式 PublishMode,ingress,Overlay

    Overlay: 4台服务器的集群,会有4个ip,内部的容器也无法ping通,通过Overlay模式会把4台主机加入到一个大的虚拟网络中,这样他们彼此之间可以相互访问
    ingress: Overlay的加强版,具有负载均衡的功能
    看下面的docker service 起来的服务,一台机子上运行了5个tomcat服务

    5个服务并到了一个A类的内网网段中去了.

    docker service

    swarm形成的集群提供了服务的概念,但是他的优点还在于扩容便捷.比如平时三主三从,突然访问量变大需要扩容到五主五从,那么可以通过创建服务副本的概念瞬间扩容,这里就需要用到docker service
    service的大致命令如下

    Commands:
      create      Create a new service                                  增  --mode string replicated, global, replicated-job, or global-job) (default "replicated")
      创建的任务以何时模式启动,默认是副本模式,只在服务的副本里运行启动,global是不分副本还是原生,随机都可以启动
      inspect     Display detailed information on one or more services  查
      logs        Fetch the logs of a service or task
      ls          List services
      ps          List the tasks of one or more services
      rm          Remove one or more services                          删
      rollback    Revert changes to a service's configuration
      scale       Scale one or multiple replicated services            和下面 update ----replicas功能一样,用来扩容和缩容服务副本
      update      Update a service                                     改  --replicas uint   用来创建副本个数
    
    

    启动一个docker service 语法:docker service create -p 8080:8081 --name sql mysql:5.7
    语法其实和docker run 一模一样 镜像不存在也会自动去拉镜像
    而docekr run启动的容器无法扩缩容器的功能,所以如果想要扩缩容器,启动的时候要用docker service, 因为他启动的是一种服务的概念而不是容器

    docker service update --replicas 10 mysql:5.7 这条命令会让主从机器上运行10个mysql的容器服务,默认分配是几台服务器机子随机分配,

    要缩容也方便, docker service update --replicas 1 mysql:5.7 就把10个缩成了1个
    还可以用docker service scale mysql=5 语法也可以实现服务副本的扩容缩容

  • 相关阅读:
    WPF数据绑定机制是如何实现
    C#自定义特性的使用
    MVVMLight学习笔记(一)---MVVMLight概述
    C# Autofac学习笔记
    EFCodeFirst快速搭建入门
    SQL having与where用法区别
    EventWaitHandle 类
    C# EF 使用 (CodeFirst模式)
    wmi 远程启动程序
    Centos 7 的一些 基础知识
  • 原文地址:https://www.cnblogs.com/Young-shi/p/15027905.html
Copyright © 2011-2022 走看看