docker~swarm搭建docker高可用集羣

回到目錄html

Swarm概念

  Swarm是Docker公司推出的用來管理docker集羣,它將一羣Docker宿主機變成一個單一的,虛擬的主機。Swarm使用標準的Docker API接口做爲其前端訪問入口,換言之,各類形式的Docker Client(docker client in Go, docker_py, docker等)都可以直接與Swarm通訊。Swarm幾乎所有用go語言來完成開發,Swarm0.2發佈,相比0.1版本,0.2版本增長了一個新的策略來調度集羣中的容器,使得在可用的節點上傳播它們,以及支持更多的Docker命令以及集羣驅動。
  Swarm deamon只是一個調度器(Scheduler)加路由器(router),Swarm本身不運行容器,它只是接受docker客戶端發送過來的請求,調度適合的節點來運行容器,這意味着,即便Swarm因爲某些緣由掛掉了,集羣中的節點也會照常運行,當Swarm從新恢復運行以後,它會收集重建集羣信息.前端

Swarm結構圖

Swarm的基本命令

docker node 用來顯示集羣的節點,默認創建時只有一個節點,固然也就談不上高可用了,可使用docker node --help來查看全部node參數node

集羣初始化 docker swarm init  docker

當已經被初始化後,就不能從新執行這個操做了,使用docker node ls 來查看剛創建的集羣api

集羣中的管理節點和工做節點功能圖網絡

 

添加管理節點 docker swarm join ssh

Docker Swarm 命令中還須要添加一些選項:post

* join:代表一個新的節點將被添加進 Swarmui

* –manager:代表節點的性質(manager vs worker)spa

* –listen-addr:讓一個新添加的節點能夠訪問 Swarm 內的其餘節點

* 最後的參數就是第一管理節點的地址(即這一命令將被送到的那個節點)

注意:因爲 –auto-accept manager 選項會在 Swarm 初始化的過程當中被提供,因此第二管理節點會被自動接受。若是沒有這一選項,那麼第二管理節點須要被第一管理節點手動接受。

$ MANAGER2_IP=$(docker-machine ip manager2)
docker-machine ssh manager2 docker swarm join --manager --listen-addr $MANAGER2_IP:2377 $MANAGER1_IP:2377

Swarn部署時使用的腳本,來自網絡

下面是一小段用來建立 Docker 主機並部署 Swarm 的 Shell 腳本。固然了,管理/工做節點的數字都是能夠隨意改動的。
注意:建立兩個管理節點和兩個工做節點,僅僅是用來做示範。在工業生產中,咱們可能須要在集羣裏搭建 3 個管理節點和 5 個工做節點。

# Define the number of managers/workers
MANAGER=3
WORKER=5

# Create the Docker hosts
for i in $(seq 1 $MANAGER); do docker-machine create --driver virtualbox manager$i; done
for i in $(seq 1 $WORKER); do docker-machine create --driver virtualbox worker$i; done

# Init the swarm
docker-machine ssh manager1 docker swarm init --auto-accept manager --auto-accept worker --listen-addr $(docker-machine ip manager1):2377

# Add additional manager(s)
for i in $(seq 2 $MANAGER); do docker-machine ssh manager$i docker swarm join --manager --listen-addr $(docker-machine ip manager$i):2377 $(docker-machine ip manager1):2377; done

# Add workers
for i in $(seq 1 $WORKER); do docker-machine ssh worker$i docker swarm join --listen-addr $(docker-machine ip worker$i):2377 $(docker-machine ip manager1):2377; done

對於上面文章中,只提到了集羣,而沒有談到如何去使用,在創建集羣后,服務的部署咱們能夠用

docker stack deploy  -c test.yml test

下面給出本身寫的一個服務,版本3的

version: "3"

services:
  loggerapi:
    image: logger.api
    build:
      context: ./src/Logger.Api
      dockerfile: Dockerfile
    ports:
      - "5000:80"
    networks:
      - ingress

 loggermanager:
    image: logger.manager
    build:
      context: ./src/Logger.Manager
      dockerfile: Dockerfile
    ports:
      - "5050:80"
    networks:
      - ingress

networks:
  ingress:

這裏有個服務要注意,服務的名稱必定不能有點,如logger.manager這是錯誤的!

來創建一個服務,同時可使用docker service來查看已經運行的服務!

還有一點要注意,yml在進行v3版後,再也不支持build,也就是說,你須要先把鏡像創建好才行!

 

回到目錄

相關文章
相關標籤/搜索