6

我们在 Amazon EC2 上运行我们的 Web 应用程序,并使用负载平衡、自动缩放的 Web 服务器 (IIS)。

在自动缩放之前,我们的部署过程是将文件复制到几个大型 Web 服务器。

现在通过自动缩放,我们可以随意出现和消失 5 到 12 个网络服务器,这使得部署过程更加困难。

为了解决这个问题,我编写了一个 powershell 脚本,该脚本检索自动缩放组中服务器的 IP,并使用 MSDeploy 将它们与指定的部署服务器(在负载均衡器中,在自动缩放组之外)同步。然后它会创建一个新的 AMI 并更新自动缩放配置。

一切似乎都很好,直到重建部署服务器后,同步脚本才更新网站的运行状态。所以我可以将网站置于维护模式。

我想知道:

  • 其他人如何解决问题(特别是在自动缩放 ec2 中同步 iis 服务器)(在没有用于 IIS 8 的 WFF 的情况下)

  • 为什么启动/停止同步失败

代码:

Set-AWSCredentials -AccessKey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -SecretKey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Set-DefaultAWSRegion "us-west-2"

$date = get-date
$dateString = $date.ToString("yyyyMMdd-HHmm")
$name = $dateString +  "Web"
$imageId = new-ec2image -InstanceId x-xxxxxxxx -Name $name -NoReboot 1

$launchConfiguration = New-ASLaunchConfiguration -LaunchConfigurationName $name -ImageId $imageId -InstanceType "m3.medium" -SecurityGroups @('Web') -InstanceMonitoring_Enabled $false

Update-AsAutoScalingGroup -AutoScalingGroupName "XxxxxxxxxxxxXxxxxxxxxx" -LaunchConfigurationName $name

$a = Get-ASAutoScalingInstance | select -expandproperty InstanceId | Get-EC2Instance | select -expandproperty RunningInstance | select -property PrivateIpAddress

foreach($ip in $a)
{
        $command = "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
        $arg = "-dest:webServer,computerName=" + $ip.PrivateIpAddress;
        $args = @('-verb:sync', '-source:webServer', $arg)
        &$command $args
}
4

1 回答 1

5

不要尝试和“同步”网络服务器。考虑进行一次性安装 - 并允许用于部署管理同步的工具启动。

我过去所做的是使用 CloudFormation 创建环境,并结合 cfn-init 和 cfn-hup 进行安装。然后,部署过程变成了将新包重新部署到 S3 之类的地方,然后使用 CloudFormation 来提升版本的情况。

这会触发 cfn-hup 更新,从而每个服务器将从 S3 拉下包并重新安装。

此外 - 如果您的扩展组扩展,它会在向负载均衡器注册实例之前自动使用 cfn-init 下载并完全安装包。

这里有几个类似的 StackOverflow 问题

我也在很多个月前写了两篇关于它的文章

这应该给你足够的开始。

于 2014-04-02T17:57:43.987 回答