• Docker swarm 集群配置


    一、服务调用关系

    二、服务器环境

    三、软件环境

    3.1 安装docker

    yum  -y  install   docker
    
    systemctl  start  docker
    systemctl  enable  docker

    ExecStart=/usr/bin/dockerd -H 0.0.0.0:2375 -H unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock --default-ulimit nofile=1024000 --default-ulimit memlock=128849018880 --default-ulimit core=-1 --default-ulimit nproc=-1 --default-ulimit stack=-1 --default-ulimit nofile=1024000 --default-ulimit memlock=128849018880 --default-ulimit core=-1 --default-ulimit nproc=-1 --default-ulimit stack=-1 --insecure-registry=172.16.230.22 --insecure-registry=172.16.230.23 --insecure-registry=172.16.230.24 --insecure-registry=172.16.230.31
    ExecReload=/bin/kill -s HUP $MAINPID

    3.2 防火墙关闭

    systemctl stop  firewalld
    
    systemctl  disable  firewalld

    3.3 linux 系统系统优化

    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 255983
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 655350
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) unlimited
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) unlimited
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited

    3.4 各个节点 docker  pull  swarm  下载swarm镜像

    docker  pull  swarm

    四、docker swarm集群部署

    4.1 master创建Swarm(要保存初始化后token,因为在节点加入时要使用token作为通讯的密钥)

    [root@master1 ~]# docker swarm init --advertise-addr 172.16.230.22
    Swarm initialized: current node (0dgfdax3s09w5gk5zxeetvzpf) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-54g6mt7e30979f6jyikaqgokqrgq16irkqdo7fo7av22e8a9uv-5rf4m77xep55sdpy9d4xkx6l9 172.16.230.22:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

    注:上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。 其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。

    通过docker info 可以查看docker swarm 集群信息

    Swarm: active
      NodeID: 0dgfdax3s09w5gk5zxeetvzpf
      Is Manager: true
      ClusterID: ocewqjt24jqcil1y0ugmv4v8z
      Managers: 1
      Nodes: 1
      Default Address Pool: 10.0.0.0/8  
      SubnetSize: 24
      Data Path Port: 4789

    Swarm:active  启动swarm集群

    Managers:1   主节点1个

    Nodes:1      node节点1个

    启动docker swarm之后可以在host上看到启动了2个端口:2377和7946,2377作为cluster管理端口,7946用于节点发现

    4.2 添加node节点到swarm集群中

    Node1节点:
    docker swarm join --token SWMTKN-1-54g6mt7e30979f6jyikaqgokqrgq16irkqdo7fo7av22e8a9uv-5rf4m77xep55sdpy9d4xkx6l9 172.16.230.22:2377
    Node2节点:
    docker swarm join --token SWMTKN-1-54g6mt7e30979f6jyikaqgokqrgq16irkqdo7fo7av22e8a9uv-5rf4m77xep55sdpy9d4xkx6l9 172.16.230.22:2377

    4.3 master节点查看集群

    Master节点: MANAGER STATUS状态 master1 为leader, 其他node节点为空

    4.4  Manager管理节点宕机后其他管理节点仍然可以使用管理

    intermal distributed state store:内部分布式状态存储同步共享到每个节点。

    Manager:多个Manager已Raft来通过机制的选举,进行高可用。

    raft:通常通过投票的方式进行选举,一般是奇数制的节点。

    如果swarm失去法定人数,swarm不能自动恢复,工作节点上的任务继续运行,不受影响,但无法执行管理任务,包括扩展或更新服务,加入或删除节点。恢复的最佳方式是将丢失的leader节点重新联机。如果不可能,唯一方法是使用—force-newcluster管理节点的操作,这将去除本机之外的所有管理器身份。

    docker swarm init --force-new-cluster --advertise-addr 172.16.230.22:2377

    赋值其他工作节点为管理节点

    docker node promote  node1
    docker node promote  node2 

    再次查看节点:

    五、部署docker network overlay网络

    docker network的好处是:在同一个网络上的容器之间可以相互通信, 创建 overlay网络名称为 senyint-overlay ,子网 10.0.1.0/24网段

    [root@master1 ~]# docker network create -d overlay senyint-overlay --subnet 10.0.1.0/24
    n91ydjdmqse6n16668vwjm4va

    六、 部署应用

    docker service create --network senyint-overlay --replicas=3 --name hie-logger  -p 30006:80 172.16.230.31/hie4.0/hie-logger:202004291700
    sleep 50
    docker service create --network senyint-overlay --replicas=3 --name hie-consumer-proxy  -p 30002:80 172.16.230.31/hie4.0/hie-consumer-proxy:202004291700
    sleep 50
    docker service create --network senyint-overlay --replicas=3 --name hie-mq-router  -p 30003:80  172.16.230.31/hie4.0/hie-mq-router:202004291700
    sleep 50
    docker service create --network senyint-overlay --replicas=3 --name hie-producer-adapter  -p 30004:80  172.16.230.31/hie4.0/hie-producer-adapter:202004291700
    sleep 50
    docker service create --network senyint-overlay --replicas=3 --name hie-producer-proxy  -p 9100:80  172.16.230.31/hie4.0/hie-producer-proxy:202004291700
    sleep 50
    docker service create --network senyint-overlay --replicas=3 --name hie-gateway  -p 10000:80  172.16.230.31/hie4.0/hie-gateway:202004291700
    sleep 50
    docker service create --network senyint-overlay --replicas=3 --name oauth-server  -p 6001:80  172.16.230.31/hie4.0/oauth-server:202004291700
    sleep 50
    docker service create --network senyint-overlay --replicas=3 --name hie-rest-server  -p 1003:80 172.16.230.31/hie4.0/hie-rest-server:202004291700
    sleep 50
    docker service create --network senyint-overlay --replicas=3 --name web-admin-server  -p 7001:80  172.16.230.31/hie4.0/web-admin-server:202004291700
    sleep 50
    docker service create --network senyint-overlay --replicas=3 --name hie-service-proxy  -p 9001:80 172.16.230.31/hie4.0/hie-service-proxy:202004291700
    sleep 50
    docker service create --network senyint-overlay --replicas=3 --name hiefrontend  -p 8888:80  172.16.230.31/hie4.0/hiefrontend:202004291700

    七、 查看、更新、删除、扩容

    查看部署了多少服务:
          docker  service  ls
    
    查看服务具体信息:
          docker  service  ps   服务名
    
    扩展服务(扩展3个副本):
          docker  service  scale   服务名=3
    
    更新服务:
          docker  service  update  --image  172.16.230.31/hie4.0/xxxxx:20200430  服务名

    强制重启服务
      docker service update --force 服务名

    八、故障

    8.1  docker service ls 副本数正常, 但是container 启动报错,nacos服务发现只有一个实例

    nacos中 发现了一个 web-amdin-server 实例, 但是在 docker swarm中 启动了2个,通常是其他两个实例启动错误, 和服务的启动顺序有关, 可以删除 docker service rm 服务名, 重现建立

    7.2  服务的container中有两个IP地址, 注册到nacos中时,注册IP是ingress, 访问是overlay 网络,所以rcp 调用不通, 需要研发修改配置文件,指定网卡或者网段。

    7.3  服务之间的调用使用服务名,例如nginx,  但是nginx服务必须在 hie-rest-server 和 web-admin-server oauth-server 之后启动,否则telnet能通, 但是无法调用通。

  • 相关阅读:
    URLEncode解决url中有特殊字符的问题
    监控系统概览
    SpringBoot 上传文件夹
    关于postgresql报 ERROR: XXX does not exist
    postgresql学习
    git学习
    学习博客
    面试准备
    jvm
    线程池面试题
  • 原文地址:https://www.cnblogs.com/fengjian2016/p/12809590.html
Copyright © 2020-2023  润新知