Service Discovery in NGINX Plus via etcd

Service Discovery in NGINX Plus via etcd

Service discovery is one of the big challenges for applications with a microservices architecture and for other distributed or service-oriented systems. The network locations of service instances can change frequently due to autoscaling, failures, or upgrades, so they are usually dynamically assigned. That means applications need a sophisticated service discovery mechanism for tracking the existence and current location of a service instance.

This blog post describes how to dynamically add or remove servers in an NGINX Plus upstream group by registering them with etcd, a popular open source tool for service discovery. The solution uses NGINX Plus’ on-the-fly reconfiguration API, which eliminates the need to reload the NGINX Plus configuration when changing the set of load-balanced servers. With NGINX Plus Release 8 (R8), changes you make with the API can be configured to persist across restarts and configuration reloads.

CoreOS has developed etcd as a distributed, consistent key-value store for shared configuration and service discovery. Its service discovery protocol helps any new etcd member to discover all other members during the cluster bootstrap phase, using a shared discovery URL.

To make it easier to combine the NGINX Plus on-the-fly reconfiguration API with etcd, we’ve created a GitHub project called etcd-demo, which includes step-by-step instructions for setting up the demo deployment described here. Using tools like Docker, Docker Compose, Homebrew, and jq, you can spin up a Docker–based environment in which NGINX Plus load balances HTTP traffic to a couple of hello-world applications, with all components running in separate Docker containers.

How the Demo Works

First we spin up a separate Docker container for each of the following apps:

  • etcd – Performs service discovery.
  • Registrator – Registers services with Consul. Registrator monitors for containers being started and stopped and updates Consul when a container changes state.
  • hello – Simulates a backend server. This is another GitHub project from NGINX, Inc., an NGINX web server that serves an HTML page containing the web server’s hostname, IP address, and port.
  • A second instance of hello – Simulates another backend server.
  • NGINX Plus R8 – Load balances the other listed services.

The NGINX Plus container listens on the public port 80, and the built-in NGINX Plus dashboard on port 8080. The etcd container advertises a fixed IP address of 10.0.2.15 for intercontainer communication and listens on ports 2379, 2380, and 4001.

Registrator monitors Docker for new containers that are launched with exposed ports, and registers the associated service with etcd. By setting environment variables within the containers, we can be more explicit about how to register the services with etcd. For each hello (web server) container, we set the SERVICE_TAGS environment variable to production to identify the container as an upstream server for load balancing by NGINX Plus. When a container quits or is removed, Registrator removes its corresponding key from etcd automatically.

Finally, we use the script included in the demo, etcd_exec_watch.sh, to invoke an external handler, script.sh, every time there is an update to the list of registered services (that is, a change to etcd keys). The external handler uses environment variables set by etcd to determine which servers to add and remove from the NGINX Plus upstream group. If ETCD_WATCH_ACTION=set, the handler adds servers named by ETCD_WATCH_VALUE, and if ETCD_WATCH_ACTION=delete it removes servers that are not also present in etcd.

Summary

Using a script and handler like the ones in etcd-demo to dynamically reconfigure your upstream groups based on the services registered with etcd automates the process of upstream reconfiguration in NGINX Plus. This automation also frees you from having to figure out how to issue the API calls correctly and reduces the amount of time between the state change of a service in etcd and its addition or removal in the NGINX Plus upstream group.

Try out automated reconfiguration of NGINX Plus upstream groups using etcd for yourself:

The post Service Discovery in NGINX Plus via etcd appeared first on NGINX.

Source: Service Discovery in NGINX Plus via etcd

About KENNETH 19694 Articles
지락문화예술공작단

Be the first to comment

Leave a Reply

Your email address will not be published.


*


이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.