автоматическое масштабирование веб-сервисов amazon по зонам доступности

Я запускаю приложение электронной коммерции, теперь мне нужно охватить экземпляры на основе конфигураций автоматического масштабирования. В настоящее время я балансирую количество экземпляров по зонам доступности. Чтобы было понятнее, я запускаю 2 экземпляра в точке доступа-юго-восток-1a и 2 экземпляра в точке доступа-юго-восток-1b, которые однородны по своей природе.

Теперь я хочу включить конфигурацию автоматического масштабирования, чтобы создавать одинаковое количество экземпляров в разных регионах. Чтобы балансировщик нагрузки мог равномерно распределить нагрузку между зонами доступности. Кроме того, нагрузка уменьшается, равное количество экземпляров должно быть отключено в регионе.

Как настроить автомасштабирование???

Пожалуйста, помогите мне.


person Jeevan Dongre    schedule 22.08.2013    source источник


Ответы (1)


Вы не можете настроить автомасштабирование для масштабирования уже существующих экземпляров. В основном вам нужно воссоздать их в конфигурации запуска, а затем автомасштабирование использует эту конфигурацию запуска. Вот шаблон cloudformation:

{
  "AWSTemplateFormatVersion" : "2010-09-09",

  "Description" : "AWS CloudFormation Template to configure chef on an EC2 Instance",

  "Parameters" : {
    "KeyName" : {
      "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance",
      "Type" : "String"
    }
  },

  "Mappings" : {
    "RegionMap" : {
      "us-east-1"      : { "AMI" : "ami-7f418316" },
      "us-west-1"      : { "AMI" : "ami-951945d0" },
      "us-west-2"      : { "AMI" : "ami-16fd7026" },
      "eu-west-1"      : { "AMI" : "ami-24506250" },
      "sa-east-1"      : { "AMI" : "ami-3e3be423" },
      "ap-southeast-1" : { "AMI" : "ami-74dda626" },
      "ap-northeast-1" : { "AMI" : "ami-dcfa4edd" }
    }
  },

  "Resources" : {
    "User" : {
      "Type" : "AWS::IAM::User",
      "Properties" : {
        "Path": "/",
        "Policies": [{
          "PolicyName": "root",
          "PolicyDocument": { "Statement":[{
            "Effect":"Allow",
            "Action":"*",
            "Resource":"*"
          }
                                          ]}
        }]
      }
    },

    "HostKeys" : {
      "Type" : "AWS::IAM::AccessKey",
      "Properties" : {
        "UserName" : { "Ref": "User" }
      }
    },
    "ElasticLoadBalancer" : {
      "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
      "Properties" : {
        "AvailabilityZones" : ["ap-southeast-1a", "ap-southeast-1b"],
        "Listeners" : [{
          "LoadBalancerPort" : "80",
          "InstancePort" : "8080",
          "Protocol" : "HTTP"
        }],
        "HealthCheck" : {
          "Target" : "HTTP:8080/jenkins/",
          "HealthyThreshold" : "3",
          "UnhealthyThreshold" : "5",
          "Interval" : "30",
          "Timeout" : "5"
        }
      }
    },

    "WebServerGroup" : {
      "Type" : "AWS::AutoScaling::AutoScalingGroup",
      "Properties" : {
        "AvailabilityZones" : ["ap-southeast-1a", "ap-southeast-1b"],
        "LoadBalancerNames" : [{"Ref" : "ElasticLoadBalancer"}],
        "LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
        "MinSize" : "1",
        "MaxSize" : "10",
        "DesiredCapacity" : "4"
      }
    },

    "LaunchConfig" : {
      "Type" : "AWS::AutoScaling::LaunchConfiguration",

      "Properties" : {
        "InstanceType" : "m1.small",
        "KeyName" : { "Ref" : "KeyName" },
        "SecurityGroups" : [ {"Ref" : "FrontendGroup"} ],
        "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
      }
    },

    "FrontendGroup" : {
      "Type" : "AWS::EC2::SecurityGroup",
      "Properties" : {
        "GroupDescription" : "Enable SSH and access to Apache and Tomcat",
        "SecurityGroupIngress" : [
          {"IpProtocol" : "tcp", "FromPort" : "8080", "ToPort" : "8080", "CidrIp" : "0.0.0.0/0"},
          {"IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0"},
          {"IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0"}
        ]
      }
    },

    "WaitHandle" : {
      "Type" : "AWS::CloudFormation::WaitConditionHandle"
    },

    "WaitCondition" : {
      "Type" : "AWS::CloudFormation::WaitCondition",
      "DependsOn" : "LaunchConfig",
      "Properties" : {
        "Handle" : { "Ref" : "WaitHandle" },
        "Timeout" : "1200"
      }
    }
  },

  "Outputs" : {
  }
}

Этот шаблон создаст конфигурацию запуска и группу автоматического масштабирования, охватывающую точки ap-southeast-1a и b. Чтобы использовать это, вам нужно будет сделать 1 из 2 вещей.

  1. Создайте золотой образ AMI, в котором весь код приложения и конфигурация хранятся в образе AMI. Если вы пойдете по этому пути, вам нужно, чтобы ваш AMI в основном создавал полностью работающую систему при ее запуске.

Чтобы сделать это внутри этого шаблона облачного формирования, создайте свой AMI, а затем отредактируйте эту строку с новым идентификатором AMI:

"ap-southeast-1" : { "AMI" : "ami-74dda626" },
  1. Создайте сценарий своей среды с помощью AWS Clouformation init или Chef/puppet/etc. Вот ссылка по этому поводу: Инициализация AWS Cloudformation. Это предпочтительный вариант, но вам потребуется много работы по созданию кода инфраструктуры.

В заключение, чтобы автомасштабирование заработало, вам нужно выбрать вариант 1 или 2, а затем запустить опубликованный мной шаблон cloudformation.

Это создаст среду из 4 экземпляров с балансировкой нагрузки, которая будет распределена по точкам ap-southeast-1 a и b.

person BrianJakovich    schedule 22.08.2013