author | Tero Marttila <terom@qmsk.net> |
Mon, 10 Oct 2016 20:18:13 +0300 | |
changeset 142 | dbed5a455927 |
parent 141 | 0ebc46106159 |
child 144 | 775e3eab3f30 |
permissions | -rw-r--r-- |
136 | 1 |
# Design and Implementation of the <a href="https://github.com/qmsk/clusterf"><tt>clusterf</tt></a> Load Balancer for Docker Clusters |
124 | 2 |
|
129 | 3 |
### Author |
4 |
Tero Marttila |
|
5 |
||
130 | 6 |
### Submitted |
7 |
Thesis submitted for examination for the degree of Master of Science in Technology at <a href="http://comnet.aalto.fi/">Aalto University Department of Communications and Networking</a>, |
|
8 |
||
9 |
Espoo 10.10.2016 |
|
10 |
||
124 | 11 |
### Thesis supervisor |
12 |
Prof. Raimo Kantola |
|
13 |
||
14 |
### Thesis advisor |
|
15 |
PhD. Pasi Sarolahti |
|
16 |
||
140
d4e4d9bc129d
masters: presentation slides
Tero Marttila <terom@qmsk.net>
parents:
139
diff
changeset
|
17 |
## Seminar Presentation |
133
0cabdaa5299b
masters: seminar presentation first
Tero Marttila <terom@qmsk.net>
parents:
131
diff
changeset
|
18 |
|
140
d4e4d9bc129d
masters: presentation slides
Tero Marttila <terom@qmsk.net>
parents:
139
diff
changeset
|
19 |
Presented 08.10.2016 ([slides](https://mycourses.aalto.fi/pluginfile.php/292054/mod_folder/content/0/Marttila_071016.pdf?forcedownload=1)]. |
133
0cabdaa5299b
masters: seminar presentation first
Tero Marttila <terom@qmsk.net>
parents:
131
diff
changeset
|
20 |
|
124 | 21 |
## Abstract |
22 |
||
23 |
### Relation to a bigger picture |
|
125
c6cd97f94bf7
masters seminar slides, architecture
Tero Marttila <terom@qmsk.net>
parents:
124
diff
changeset
|
24 |
[Docker](https://www.docker.com/) uses the Linux container `namespace` and `cgroup` primitives to provide isolated application runtime environments, allowing the distribution of self-contained application images that can be run in the form of Docker containers. |
124 | 25 |
|
26 |
Container platforms provide the infrastructure needed to deploy horizontally scalable container services into the Cloud, including orchestration, networking, service discovery and load balancing. |
|
27 |
||
137 | 28 |
### Purpose |
139
ffc7e191b63c
masters: abstract linux IPVS links
Tero Marttila <terom@qmsk.net>
parents:
138
diff
changeset
|
29 |
This thesis studies container networking architectures and existing Cloud load balancer implementations to create a design for a scalable load balancer using the [Linux IPVS](http://www.linuxvirtualserver.org/software/ipvs.html) network-level load balancer implementation. |
124 | 30 |
|
31 |
The `clusterf` load balancer architecture uses a two-level load balancing scheme combining different packet forwarding methods for scalability and compatibility with existing Docker applications. |
|
32 |
||
33 |
A distributed load balancer control plane is implemented to provide automatic load balancing for Docker containers. |
|
34 |
||
35 |
### Research method |
|
36 |
The `clusterf` load balancer is evaluated using a testbed environment, measuring the performance the network-level Linux IPVS implementation. |
|
37 |
||
139
ffc7e191b63c
masters: abstract linux IPVS links
Tero Marttila <terom@qmsk.net>
parents:
138
diff
changeset
|
38 |
The scalability of the `clusterf` load balancer is tested using Equal-Cost Multi-Path (ECMP) routing and [IPVS connection synchronization](http://www.linux-vs.org/docs/sync.html). |
124 | 39 |
|
40 |
### Key results |
|
41 |
The result is that the network-level Linux IPVS load balancer performs significantly better than the application-level HAProxy load balancer in the same configuration. |
|
42 |
||
43 |
The `clusterf` design allows for horizontal scaling with connection failover between IPVS load balancers. |
|
44 |
||
45 |
### Practical implications |
|
46 |
The current `clusterf` implementation requires the use of asymmetric routing within a network, such as provided by local Ethernet networks. |
|
47 |
||
48 |
Extending the `clusterf` design to support deployment onto existing Cloud infrastructure platforms with different networking implementations would qualify the `clusterf` load balancer for use in container platforms. |
|
49 |
||
50 |
## Thesis |
|
51 |
||
138 | 52 |
Pending publication. |
124 | 53 |
|
142 | 54 |
In the meantime, refer to the [Presentation Slides](//static.qmsk.net/www/masters/clusterf-presentation.pdf). |
141 | 55 |
|
138 | 56 |
## [The `clusterf` Load Balancer](https://github.com/qmsk/clusterf) |
57 |
||
58 |
### Design |
|
59 |
The architecture of the `clusterf` load balancer is shown in the Figure below. |
|
125
c6cd97f94bf7
masters seminar slides, architecture
Tero Marttila <terom@qmsk.net>
parents:
124
diff
changeset
|
60 |
|
131
06542208a5fc
typofix clusterf-architecture.svg url
Tero Marttila <terom@qmsk.net>
parents:
130
diff
changeset
|
61 |
<img src="//static.qmsk.net/www/masters/clusterf-architecture.svg" style="width: 100%" /> |
125
c6cd97f94bf7
masters seminar slides, architecture
Tero Marttila <terom@qmsk.net>
parents:
124
diff
changeset
|
62 |
|
138 | 63 |
### Implementation |
124 | 64 |
The Go implementation of the `clusterf` load balancer control plane is available on GitHub: |
65 |
||
66 |
> [`go get github.com/qmsk/clusterf`](https://github.com/qmsk/clusterf) |