Delivering High-Availability Web Services with NGINX Plus on AWS

Preview:

Citation preview

Delivering High-Availability Web Services with NGINX Plus on AWS

Owen Garrett

Nginx, Inc.

Scott Ward

Amazon Web Services

Introductions and Agenda

• Owen GarrettHead of Products, NGINX

• Scott WardSolutions Architect, Amazon Web Services

Introducing Amazon Web Services

A broad and deep platform that helps customers

build sophisticated, scalable applications

© 2014 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified or distributed in whole or in part without the express consent of Amazon.com, Inc.

A Culture of Innovation: Experiment Often & Fail Without

Risk

Who is using AWS and what are

they using it for?

Startups on AWS

http://aws.amazon.com/solutions/case-studies/

Enterprises on AWS

http://aws.amazon.com/solutions/case-studies/

Infrastructure

Foundation

Services

Regions Availability Zones

Storage(Object, Block and Archive)

NetworkingSecurity &

Access Control

Platform

Services

Databases

Relational

NoSQL

Caching

Analytics

Hadoop

Real-time

Data warehouse

App Services

Queuing

Orchestration

App streaming

Transcoding

Email

Search

Deployment & Management

Containers

Dev/ops Tools

Resource

Templates

Mobile Services

Identity

Sync

Mobile

Analytics

Notifications

Enterprise

ApplicationsVirtual Desktops

Data Workflows

Usage

Tracking

Monitoring

and Logs

Compute(VMs, Auto-scaling and Load Balancing)

CDN and Points of Presence

Collaboration and Sharing

11 regions

28 availability

zones

52 edge locations

Infrastructure

AWS Services Overview

Amazon EC2 – Virtual Servers & resizable compute capacity

Auto Scaling – Scale compute resources up and down

Elastic Load Balancing – Load balancer for compute instances

Amazon Elastic Block Storage (EBS) – Block storage for EC2

AWS Service Overview

AWS Identity and Access Management – AWS Account Access Controls

Amazon Route 53 – Scalable Domain Name System

Amazon CloudWatch – Resource and Application Monitoring

Breaking news - New services on AWS

Amazon EC2 Container Service

Creates and manages clusters made up of Docker containers. It launches and terminates the containers and maintains complete information about the state of your clusterAutomatically schedules containers to help find a balance between your resource needs and availability requirementsUsing EC2 Container Service you can simply launch & manage clusters with thousands of instances and schedule tens of thousands of containers across multiple Availability ZonesAmazon EC2 Container Service launches your containers on your own EC2 instances, so that you do not share resources with other customers, places your clusters in a VPC, and allows you to use your own VPC security groups and network ACLs.Your applications can make use of AWS features such as Elastic IP addresses, resource tags, and Virtual Private Cloud (VPC).

http://aws.amazon.com/ecs/

AWS Code DeployDeploys your released code to a "fleet" of EC2 instances

Accommodate fleets that range in size from one instance all the way up to tens of thousands of instances

Automatically schedules updates across multiple Availability Zones in order to maintain high availability during the deployment

Application and Deployment groups described in YAML-formatted files

Deployment groups identify EC2 instances by tags & can also reference Auto Scaling Groups

Managed via AWS Management Console, CLI or APIs

Can be used in conjunction with Chef recipes or Puppet scripts

Deploy configuration from a variety of repositories (S3, GitHub, etc)

https://aws.amazon.com/codedeploy/

Successful projects use NGINX on AWS

INTRODUCING NGINX AND NGINX PLUS

Amazon web applicationreference architecture

• Route53 DNS

• Elastic Load Balancer

• Autoscaling web and app tiers

• Active/standby databases

Refactoring the architecture with NGINX

NGINX provides basic load balancing for:

– HTTP

– FastCGI

– uWSGI

– SCGI

– memcache

Go further with NGINX Plus

NGINX F/OSS

WebserverAccelerating ProxyApplication Gateway

NGINX Plus

Advanced load balancing featuresHealth checks, Session Persistence

Ease-of-managementDynamic Configuration, Extended Status

Commercial support

regionregion

region

Elastic Load Balancer

Web App 1

NGINX Plus

AMI

Web App 2 Web App 3

Route53 hosted zone

Web App 1

NGINX Plus

AMI

Web App 2 Web App 3

Relevant NGINX Plus features• Content-based routing• Request Prioritization• Health Checks• Session Persistence• PROXY support• Dynamic Reconfiguration (inc DNS)• Extended Status

Content-based Routing

Full control over request routing for multiple applications

Single front-end ELB service

Multiple front-end domainsMultiple back-end applications

Request Prioritization

Internet

Large spike of traffic risks overwhelming upstream servers

NGINX Plus limits concurrent connections to upstream servers

and queues additional traffic

Upstream servers protected from

effects of traffic spike

max_conns=150

Health Checks

Sophisticated, app-specifichealth checks

Detect application failuresOrchestrate upgrades

Session Persistence

Per-application session persistence rules

Cookie-insertion, rules-based,Learn mode

Consistent-hash load balancing

PROXY protocol

Internet

Amazon ELB (multiple availability zones)Load-balances TCP with PROXY protocol

NGINX proxies WebSockets and terminates SPDY traffic

Allows for support for WebSocket proxyingand SPDY termination

Dynamic Reconfiguration

Control load balancing configuration dynamically

http {

resolver 192.168.0.2;

upstream backends {

zone backends 64k;

server api.u.com resolve;

}

upstream_conf;

}

DNS

Changes in DNS can dynamically update NGINX Plus’ load balancing configuration API

Upstream_conf API gives a simple HTTP API to control configuration

Extended Status

… with CloudWatch integration

GET /status/connections/active 17

GET

/status/upstreams/demoupstream

s/0/server

”192.168.45.2:80"

{

checks: 15375,

fails: 183,

unhealthy: 165,

last_passed: true

}

GET

/status/upstreams/demoupstream

s/0/health_checks

Complementing Amazon ELB

Monitoring with Cloudwatch

Know what is going on with your

environment at all times

Amazon CloudWatch

Default Amazon EC2

metricsCPU Utilization (Percent)

Disk Reads (Bytes)

Disk Read Operations (Operations)

Disk Writes (Bytes)

Disk Write Operations (Operations)

Network In (Bytes)

Network Out (Bytes)

Status Check Failed (Count)

1 or 5 minute intervals

NGINX Metrics into Amazon CloudWatchstatus.html CloudWatch

Install Agent$ sudo yum install nginx-cw-agent

$ sudo apt-get install nginx-cw-agent

NGINX Metrics into Amazon CloudWatchstatus.html CloudWatch

Update Configuration$ /etc/nginx-cw-agent/nginx-cw-agent.ini

[source1]

name=exampleorg

url=http://example.org/status

[source2]

name=examplecom

url=http://example.com/status

http_user=testuser

http_pass=testpass

NGINX Metrics into Amazon CloudWatchstatus.html CloudWatch

Start Background AgentTest - $ /usr/bin/nginx-cw-agent.py –f start

All in - $ sudo service nginx-cw-agent start

View Metrics

NGINX with Amazon CloudWatch Logs

• Consolidate metrics and alarming for log files from 1 or many instances

• Define filters to parse content from your log files

• Measure and alarm on specific attributes

• Define retention period for your log files

EC2

CloudWatch

NGINX with Amazon CloudWatch Logs

Filter

Alarm

NGINX with Amazon CloudWatch Logs

EC2

EC2EC2

EC2 EC2

EC2

Capture logs from multiple instances in one place

CloudWatch

NEXT STEPS

Get started with NGINX Plus AMI

http://aws.amazon.com/marketplace

Finding NGINX Plus on AWShttp://aws.amazon.com/marketplace - search for NGINX

ubuntu@ip-172-31-20-254:~$ /etc/init.d/nginx status

* nginx is running

ubuntu@ip-172-31-20-254:~$ cd /etc/nginx/conf.d

ubuntu@ip-172-31-20-254:~$ nginx –s reload

Is it running…?

Check out the NGINX Plus on AWS whitepaper

Partner Whitepapers:http://aws.amazon.com/whitepapers/

http://d0.awsstatic.com/whitepapers/AWS_NGINX_Plus-whitepaper-final_v4.pdf

THANK YOU

Recommended