Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Auto Scaling with Ruby, AWS, Jenkins and Redis

JeDDieChuang
February 05, 2015

Auto Scaling with Ruby, AWS, Jenkins and Redis

This is a basic tech experience to build auto scale with AWS shared from LIVEhouse.in. The slide also includes how we coordinate auto scaling and the release deployment.

JeDDieChuang

February 05, 2015
Tweet

More Decks by JeDDieChuang

Other Decks in Technology

Transcript

  1. “ Methods of adding more resources for a particular application

    fall into two broad categories: horizontal and vertical scaling. http://en.wikipedia.org/wiki/Scalability Michael, Maged; Moreira, Jose E.; Shiloach, Doron; Wisniewski, Robert W. (March 26, 2007). "2007 IEEE International Parallel and Distributed Processing Symposium"
  2. Scale Vertically ▸ Scale up and down about SCALABILITY Scale

    Horizontally ▸ Scale out scale up scale down 1 4
  3. Place your screenshot here Content Matters When the live show

    attracts people, they will become audience right away.
  4. Amazon EC2 ▸ Amazon Elastic Compute Cloud ◦ “A web

    service that provides resizable compute capacity in the cloud” ◦ “Designed to make web-scale cloud computing easier for developers” ▪ Scale up/down; start, stop, terminate...etc. EASY management with a great UI.
  5. AMI ▸ Amazon Machine Images ◦ “A template for the

    root volume for the instance (for example, an operating system, an application server, and applications)” A script of an instance.
  6. AWS CLI ▸ AWS Command Line Interface ◦ “A unified

    tool to manage your AWS services” ▪ AWS CLI and AWS EC2 CLI ▪ Github • aws/aws-sdk-ruby • aws/aws-cli ◦ Access key ▪ AWS Identity and Access Management (IAM) API.
  7. `ec2-run-instances #{AMI_ID} #{REGION} #{GROUP} #{SUBNET} #{INSTANCE_TYPE} #{BLOCK_DEVICE_MAPPING}` Launch an Instance

    Using an Image. launch instance Image ID security group small? large? additional store volume
  8. ec2-run-instances ec2-run-instances ami-1a2b3c4d -s subnet-1a2b3c4d -t c1.medium OUTPUT> RESERVATION r-1a2b3c4d

    111122223333 INSTANCE i-1a2b3c4d ami-1a2b3c4d pending c1.medium YYYY-MM-DDTHH:MM:SS+0000 10.0.0.146 … from Amazon doc
  9. Do All in One ▸ Pros ◦ Simple flow ▸

    Cons ◦ Legacy > 5 mins Facts that matter Break Things Down ▸ Pros ◦ Flexible to handle ▸ Cons ◦ Different entries by time It takes 5 minutes to run an instance up process launch + IP go online process
  10. `ec2-disassociate-address # {ASSOCIATION_ID} #{REGION}` Disassociates Elastic IP from Instance. the

    link ec2-disassociate-address -a eipassoc-048c746d OUTPUT> ADDRESS eipassoc-048c746d example from Amazon doc
  11. AWS ELB ▸ Elastic Load Balancing ◦ “Automatically distributes incoming

    application traffic across multiple Amazon EC2 instances in the cloud.” Traffic-monitoring UI and the metrics. Icon made by Freepik from www.flaticon.com is licensed under CC BY 3.0
  12. elb-register-instance-with-lb aws elb register-instances-with-load-balancer --load- balancer-name my-test-loadbalancer --instances i- 4e05f721

    OUTPUT> { "Instances": [ {"InstanceId": "i-315b7e51"}, {"InstanceId": "i-4e05f721"} ] } from Amazon doc
  13. `elb-deregister-instances-with-lb # {LOAD_BALANCER} #{INSTANCE_ID} #{REGION} #{CREDENTIAL_FILE}` Cut Instance out from

    Load Balancer. aws elb register-instances-with-load-balancer --load-balancer-name my-test-loadbalancer --instances i-4e05f721 OUTPUT> {"Instances": [{"InstanceId": "i-315b7e51"}]} from Amazon doc
  14. `aws elb describe-instance-health # {LOAD_BALANCER} #{REGION}` Returns the current state

    of the instances registered with the specified load balancer.
  15. describe-instance-health aws elb describe-instance-health --load-balancer-name MyHTTPSLoadBalancer OUTPUT> { "InstanceStates": [

    {"InstanceId": "i-cb439ec2", "ReasonCode": "N/A", "State": "InService", "Description": "N/A"} ] } from Amazon doc
  16. `mon-get-stats #{METRIC} #{NAMESPACE} #{STATISTICS} #{REGION} #{DIMENSIONS} #{CREDENTIAL_FILE}` Get time-series data

    for one or more statistics of a given Metric. get time-series data requestCount, HTTPCode_Backend_2XX, ... aws/elb sum lb name
  17. mon-get-stats mon-get-stats RequestCount --statistics "Sum" -- namespace "AWS/ELB" OUTPUT> 2015-01-29

    12:01:00 687.0 Count 2015-01-29 12:02:00 753.0 Count 2015-01-29 12:03:00 836.0 Count from Amazon doc
  18. Amazon ElastiCache ▸ Amazon ElastiCache ◦ “makes it easy to

    deploy, operate, and scale an in-memory cache in the cloud” Redis, a key-value database.
  19. Redis “Redis is an open source, BSD licensed, advanced key-value

    cache and store. ” - http://redis.io Different data structures: strings, hashes, lists, sets, ... Icon made by Carlos Prioglio from www.iconfinder.com is licensed under CC BY-NC-SA 3.0
  20. A Robot’s Day Its name is Bee! Icon made by

    Freepik from www.flaticon.com is licensed under CC BY 3.0
  21. The Basic Process ▸ Basic actions ◦ ec2-run-instances ◦ ec2-allocate-address

    ◦ ec2-associate-address ◦ elb-register ◦ elb-deregister ◦ ec2-disassociate-address ◦ ec2-release-address ◦ ec2-terminate-instances
  22. Watch for Status ▸ Now what should be done? ◦

    Add/remove instance ▪ Number of online-servers ▪ Traffic and threshold ◦ Register/deregister instance with load balancer ◦ Update instance status ▪ pending / Initializing / running / stop / problem ◦ White List ◦ Limitation ▪ Time ▪ Scaling Icon made by Freepik from www.flaticon.com is licensed under CC BY 3.0
  23. Track Things Down ▸ Online instances ▸ Waken instances ▸

    Problem instances Redis data type: List. i-abcde01 i-bcdef02 i-cdefg03
  24. Track Things Down ▸ Instance information ▸ The timestamp of

    the last instance initialized Redis data type: String. i-abcde01: "{id: i-abcde01, status: initializing, private_ip: 192.168.0.1, public_ip: 54.12.23.34, created_at: 2015/01/20 14:03:00}"
  25. http://capistranorb. com/ Icon made by Charles Lowell and Frontside from

    jenkins-ci.org is licensed under CC BY-SA 3.0
  26. Always put the NEWEST service online. Icon made by OCHA

    , icon made by Freepik, icon made by Sarfraz Shoukat from www.flaticon.com is licensed under CC BY 3.0 Icon made by Charles Lowell and Frontside from jenkins-ci.org is licensed under CC BY-SA 3.0
  27. Get servers’ IP `aws ec2 describe-instances #{REGION} --filters "Name=instance-state-name,Values=running" "Name=instance.group-name,Values=FrontEnd"

    "Name=tag-value,Values=FrontEnd Production*" "Name=ip-address,Values=*"` RESERVATION r-1a2b3c4d 111122223333 INSTANCE i-1a2b3c4d ami-1a2b3c4d running my-key-pair 0 m1.small YYYY-MM-DDTHH:MM: SS+0000 us-west-2b windows monitoring-disabled 50.112.172.209 10.0.0.167 vpc-1a2b3c4d subnet-1a2b3c4d ebs hvm xen ABCDE1234567890123sg-1a2b3c4d default false BLOCKDEVICE /dev/sdb vol-1a2b3c4d YYYY-MM-DDTHH:MM:SS.SSSZtrue NIC eni-1a2b3c4dsubnet-1a2b3c4d vpc-1a2b3c4d111122223333in-use10.0.1.167 true NICATTACHMENT eni-attach-1a2b3c4d 0 attached YYYY-MM-DDTHH:MM:SS+0000true GROUP sg-1a2b3c4d my-security-group PRIVATEIPADDRESS 10.0.1.167 PRIVATEIPADDRESS 10.0.1.12 TAG instance i-1a2b3c4d Name Windows from Amazon doc
  28. Build Image `ec2-create-image #{INSTANCE_ID} #{NAME} #{DESCRIPTION} --no-reboot #{REGION}` ec2-create-image i-10a64379

    --name "Standard Web Server" --description "Standard web server AMI" OUTPUT> IMAGE ami-4fa54026 from Amazon doc
  29. Credits Special thanks to all the people who made and

    released these awesome resources for free: ▸ Busy Icons by Olly Holovchenko ▸ Presentation template by SlidesCarnival ▸ Photographs by Unsplash ▸ Paper backgrounds by SubtlePatterns ▸ Other icons are from ▸ http://www.freepik.com ▸ http://www.flaticon.com ▸ https://livehouse.in ▸ http://jenkins-ci.org