This is TCP balancer managed by Zoidberg.
- Zero configuration, only options to set are management host and port.
- Marathon ready, no wrappers needed to run on Marathon.
- Connection retries in case that upstream server does not respond.
This runs zoidberg-tcp with management interface on http://127.0.0.1:12345:
docker run -rm -it --net host \
-e HOST=127.0.0.1 -e PORT=12345 \
bobrik/zoidberg-tcp:0.3.0
It's up to you how to discover launched balancer in
Zoidberg. Both static (list of servers)
and dynamic (mesos or marathon finders) are supported.
For mesos and marathon finders the following labels should be set
to make app available:
zoidberg_port_X_app_nameapplication name, doesn't really matter now.zoidberg_port_X_balanced_byload balancer name to announce.zoidberg_port_X_listenset listen address (host:port).
Here X is the port index. Each port creates a separate app so you can
expose them through different load balancers.
Example:
zoidberg_port_0_app_name: myapp.example.com
zoidberg_port_0_balanced_by: example-lb-tcp
zoidberg_port_0_listen: 127.0.0.1:23232Application with these labels will be announced on all load balancers with name
set to example-lb-tcp. On these load balancers 127.0.0.1:23232 will be
forwarding connections to all application instances on the port at index 0.
It is possible to use zoidberg-nginx
with zoidberg-tcp when some ports are HTTP and some ports are plain TCP.
GET /metrics returns metrics in prometheus format from management endpoint.
- SO_REUSEPORT
- Weighted least connections balancing mode