Lucas.de
Lucas.de

Reputation: 605

Docker swarm scaling behaviour on port mapping

I have a swarm composed of three nodes:

$ sudo docker node ls
ID                            HOSTNAME         STATUS              AVAILABILITY        MANAGER STATUS
i12s3zxsn4vu1c98bv3i5idr8     node03           Ready               Active
i2ckxvsju4tmommxim3dbfq7l     node02           Ready               Active
wak4isl46dn7pbo39drrhphju *   node01           Ready               Active              Leader

Then I run 1 replica of nginx on that swarm and map his port to 8080:

$ sudo docker service create --replicas 1 --publish 8080:80 --name nginx nginx
$ sudo docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
neahnb9mvi1i        nginx               replicated          1/1                 nginx:latest        *:8080->80/tcp

From there, i can reach nginx on http://node01:8080

Next, I scale nginx instances to 6:

$ sudo docker service scale nginx=6
$ sudo docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
neahnb9mvi1i        nginx               replicated          6/6                 nginx:latest        *:8080->80/tcp

From there, i'm still able to reach nginx on http://node01:8080.

However, if docker swarm expose several node as a unique host, how does he manage the port during such a scaling operation as all my nginx services are mapped on the same 8080 port? Is there a round robin load balancing between all services instances done by swarm internally and returning the answer on 8080?

Upvotes: 2

Views: 714

Answers (2)

herm
herm

Reputation: 16315

You can reach any service (deployed with a stack) which exposes its port by using the IP of any machine in the swarm and that port. Docker swarm will then forward that request to one of the replicas. Which replica is decided by the healthstate (unhealthy services are ignored) and the load balancing option that is configured which by default is round robin.

Upvotes: 1

David J Eddy
David J Eddy

Reputation: 2037

I believe the requests to the hosts get assigned in a round-robin type assignment.

Found this handy article about it http://blog.scottlogic.com/2016/08/30/docker-1-12-swarm-mode-round-robin.html . Checkout the part titled 'INGRESS AND ROUND ROBIN LOAD BALANCING'.

Upvotes: 2

Related Questions