SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
Load Balancing Applications with NGINX in a CoreOS Cluster
1. #nginx #nginxplus
Load Balancing Applications with NGINX in a
CoreOS Cluster
1
Kevin Jones - Engineer, NGINX, Inc. @webopsx
Michael Pleshakov - Engineer, NGINX, Inc. @plshkv
3. #nginx #nginxplus3
• Quick Overview of Our Deployment Plan
• Quick Overview of CoreOS, etcd and fleet
• Discuss Using etcd as a Service Discovery Tool
• Discuss Using fleet as Application Deployment Scheduler
• Discuss Using NGINX as a Software Load Balancer
• Tie It All Together With…. A Live Demo!
Our Objectives… wait CoreOS party bus?!
4. #nginx #nginxplus4
What Exactly is Service Discovery?
https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/
• Used for tracking dynamic assigned IP addresses
and port numbers of services
• Tracking credentials, protocols, version or
environment details of services
8. #nginx #nginxplus8
• Open Source Project
• Easy to Setup
• Run Services as Containers
• Stable & Reliable Update System
• Secure
Why we like CoreOS…
9. #nginx #nginxplus9
• Built in Cluster
Management! (fleet)
• Built in Service
Discovery Tool! (etcd)
Most Importantly…
11. #nginx #nginxplus11
What is fleet?
• Present your CoreOS cluster as a single init system
• Schedule deployment units across a cluster
• Deploy containers on arbitrary hosts
• Distribute services as ephemeral units across a cluster
of CoreOS machines
• Maintain set number of instances and re-schedule on
failure
• Remote configuration using fleetctl
12. #nginx #nginxplus12
core@core-01 ~ $ fleetctl list-machines
MACHINE IP METADATA
20f5eff1... 172.17.8.103 -
23a36596... 172.17.8.102 -
6ee835cb... 172.17.8.101 -
fd546c18... 172.17.8.104 -
Use fleetctl To Manage Your Cluster
https://coreos.com/fleet/docs/latest/using-the-client.html
14. #nginx #nginxplus14
Conflict - Tells fleet not to schedule more than one Unit on the same machine.
EnvironmentFile - Imports the CoreOS environment variables from a specified file.
ExecStart - Executes a command at the launch of the Unit.
MachineOf - Tells fleet to schedule the Unit on the the same server of the specified Unit.
BindsTo - Links the two Units so they stop at the same time.
ExecStop - Executes a command and the stop of the Unit.
After - Tells fleet to schedule deployment after the specified Unit.
Unit File Configurations Used…
16. #nginx #nginxplus
What is etcd?
16
• Reliable distributed key/value storage
• Written in Go
• Simple interface (HTTP+JSON)
• Secure (SSL client cert auth)
• Fast
https://github.com/coreos/etcd
17. #nginx #nginxplus17
core@core-01 ~/unit-files $ etcdctl ls /services/backend
/services/backend/172.17.8.104:8080
/services/backend/172.17.8.103:8080
/services/backend/172.17.8.102:8080
Use etcdctl To Manage Your Key Store
20. #nginx #nginxplus20
confd - http://www.confd.io/
Method 1: Configuration Management
confd is a lightweight configuration management tool focused on:
• keeping local configuration files up-to-date using data stored in etcd,
consul, dynamodb, redis, vault, zookeeper or env vars and processing
template resources.
• reloading applications to pick up new config file changes
21. #nginx #nginxplus21
Method 2: NGINX Plus API
core@core-01 ~/unit-files $ curl 127.0.0.1:8081/upstream_conf?upstream=backend
server 172.17.8.103:8080; # id=2
server 172.17.8.102:8080; # id=7
server 172.17.8.104:8080; # id=8
Dynamic Reconfiguration API (upsteam_conf) - HTTP based API to manage NGINX upstream
servers
22. #nginx #nginxplus22
How Can NGINX Plus Help?
Active Health Checks - Ability to perform regular expression match against the body of the
response, specific HTTP status code and specific header response
location @healthcheck {
internal;
proxy_pass http://backend;
proxy_connect_timeout 1s;
proxy_read_timeout 1s;
health_check interval=1s;
}
23. #nginx #nginxplus23
Well How About Open Source NGINX?
Passive Health Checks - If the response from a particular server fails with an error, NGINX will
mark this server as failed, and will try to avoid selecting this server for subsequent inbound
requests for a while.
• fail_timeout - Sets the time during which the specified number of failed attempts should
happen and still consider the server unavailable. In other words, the server is unavailable for
the interval set by fail_timeout. (default 10 seconds)
• max_fails - sets the number of failed attempts that should happen during the specified time
to still consider the server unavailable. (default 1)