gpt4 book ai didi

.net - 自动部署到 F5 负载平衡环境

转载 作者:行者123 更新时间:2023-12-04 01:09:30 26 4
gpt4 key购买 nike

我们目前正在使用 TeamCity 进行 CI 构建,我们也在尝试设置自动化部署。

我目前尝试部署的项目是位于 F5 负载均衡器下的 Windows 服务。将来,我们还希望自动部署我们也位于 F5 下的 IIS 网站。

从 TeamCity 中,我们可以执行 PowerShell 脚本来卸载所需服务器上的 Windows 服务,将我们的文件推送到它,然后重新安装该服务。

但是,我无法弄清楚如何处理负载平衡器。我们希望一次禁用 1 个节点,观察所有连接是否断开,然后部署我们的代码并恢复节点。

这似乎是一个非常普遍的问题,但我发现有关如何执行此操作的信息非常少。

谢谢!

已回答

感谢 Jonathon Rossi 提供 iControl Powershell cmdlet!

为其他用户着想,这里是关闭、监控连接断开、推送代码,然后通过 powershell 脚本重新打开 F5 负载均衡器的示例

要使这些脚本正常工作,您首先必须从以下答案中提供的链接安装 F5 iControl cmdlet

#PULL IN OUR F5 UTILITY FUNCTIONS
. .\F5Functions.ps1


#DEFINE LOGIC TO DEPLOY CODE TO A NODE THAT HAS ALREADY BEEN REMOVED FROM THE LOAD BALANCER
function Deploy(
[F5Node]$Node
)
{
Write-Host "Deploying To: "$Node.Name
#TODO: Remotely shut down services, push code, start back up services
}


#DEFINE NODES
$nodes = @()
$nodes += New-Object F5Node -ArgumentList @("TestNode1", "1.1.1.1")
$nodes += New-Object F5Node -ArgumentList @("TestNode2", "1.1.1.2")

#DEPLOY
DeployToNodes -Nodes $nodes -F5Host $F5Host -F5UserName $F5UserName -F5Password $F5Password

这是可重用的 F5Functions 脚本
#Load the F5 powershell iControl snapin
Add-PSSnapin iControlSnapin;

Write-Host "Imported F5 function!!!"

Add-Type @'
public class F5Node
{
public F5Node(string name, string address){
Address = address;
Name = name;
}
public string Address {get;set;}
public string Name {get;set;}
public string QualifiedName {get{return "/Common/" + Name;}}
}
'@

function DeployToNodes(
[string]$F5Host = $(throw "Missing Required Parameter"),
[string]$F5UserName = $(throw "Missing Required Parameter"),
[string]$F5Password = $(throw "Missing Required Parameter"),
[F5Node[]]$Nodes = $(throw "Missing Required Parameter"),
[int]$MaxWaitTime = 300 #seconds... defaults to 5 minutes
){
Authenticate -F5Host $F5Host -F5UserName $F5UserName -F5Password $F5Password

foreach($node in $Nodes){
DisableNode -Node $node

WaitForConnectionsToDrop -Node $node -MaxWaitTime $MaxWaitTime

#Assume the Script that included this script defined a Deploy Method with a Node param
Deploy -Node $node

EnableNode -Node $node
}
}

function Authenticate(
[string]$F5Host = $(throw "Missing Required Parameter"),
[string]$F5UserName = $(throw "Missing Required Parameter"),
[string]$F5Password = $(throw "Missing Required Parameter")
)
{
Write-Host "Authenticating to F5..."
Initialize-F5.iControl -HostName $F5Host -Username $F5UserName -Password $F5Password
Write-Host "Authentication Success!!!"
}

function ParseStatistic(
[iControl.CommonStatistic[]]$StatsCollection = $(throw "Missing Required Parameter"),
[string]$StatName = $(throw "Missing Required Parameter")
)
{
for($i=0; $i -lt $StatsCollection.Count; $i++){
if($StatsCollection[$i].type.ToString() -eq $StatName){
return $StatsCollection[$i].value.low
break
}
}
}

function GetStats(
[F5Node]$Node = $(throw "Missing Required Parameter")
)
{
$arr = @($Node.QualifiedName)
$nodeStats = (Get-F5.iControl).LocalLBNodeAddressV2.get_statistics($arr)
return $nodeStats.statistics.statistics

#foreach($memberStats in $poolStats.statistics){
# if($memberStats.member.address.ToString() -eq $Node -and $memberStats.member.port -eq $Port){
# return $memberStats.statistics
# }
#}
}

function GetStatistic(
[F5Node]$Node = $(throw "Missing Required Parameter"),
[string]$StatName = $(throw "Missing Required Parameter")
)
{
$stats = GetStats -Node $Node
$stat = ParseStatistic -StatsCollection $stats -StatName $StatName

return $stat
}

function DisableNode(
[F5Node]$Node = $(throw "Missing Required Parameter")
)
{
Disable-F5.LTMNodeAddress -Node $Node.Address
Write-Host "Disabled Node '$Node'"
}

function EnableNode(
[F5Node]$Node = $(throw "Missing Required Parameter")
)
{
Enable-F5.LTMNodeAddress -Node $Node.Address
Write-Host "Enabled Node '$Node'"
}

function WaitForConnectionsToDrop(
[F5Node]$Node = $(throw "Missing Required Parameter"),
[int]$MaxWaitTime = 300
)
{
$connections = GetCurrentConnections -Node $Node

$elapsed = [System.Diagnostics.Stopwatch]::StartNew();
while($connections -gt 0 -and $elapsed.ElapsedMilliseconds -lt ($MaxWaitTime * 1000)){

Start-Sleep -Seconds 10

$connections = GetCurrentConnections -Node $Node
}
}

function GetCurrentConnections(
[F5Node]$Node = $(throw "Missing Required Parameter")
)
{
$connections = GetStatistic -Node $Node -StatName "STATISTIC_SERVER_SIDE_CURRENT_CONNECTIONS"
$name = $Node.Name + ":" + $Node.Address
Write-Host "$connections connections remaining on '$name'"
return $connections
}

最佳答案

我没用过,但是你看过F5 iControl Web 服务 API 和 F5 iControl PowerShell cmdlets F5 提供。 PowerShell cmdlet 从 2007 开始出现并且可以从F5 DevCentral下载.

好像有Enable-MemberDisable-Member您将能够使用的 cmdlet。

关于.net - 自动部署到 F5 负载平衡环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com