自动部署到F5负载均衡环境负载均衡、环境

2023-09-03 10:13:28 作者:囚畅

我们正在使用的TeamCity CI的构建,我们正试图设置自动部署,以及。

该项目我目前正在部署的Windows服务,根据一个F5负载均衡坐镇。在将来,我们也希望我们的自动化,这也是F5下坐在IIS网站的部署。

从TeamCity的,我们可以执行PowerShell脚本来反安装Windows服务所需的服务器上,把我们的文件给它,然后重新安装服务。

不过,我无法搞清楚如何处理负载均衡。我们将要停用1个节点的时间,注意所有连接砸,然后部署我们的code,并把节点备份。

这似乎将是一个非常普遍的问题,但我发现如何做到这一点令人惊讶的一点信息。

谢谢!

回答

感谢乔纳森·罗西的的iControl PowerShell命令!

集群负载均衡 LVS NAT部署

有关其他用户的缘故,这里是关停,监测连接砸,推code,然后通过PowerShell脚本上的F5负载均衡义无反顾的样本

有关这些脚本工作,你必须首先从下面

提供的答案中的链接安装F5的iControl的cmdlet

  #PULL IN OUR F5效用函数
。 \ F5Functions.ps1


#DEFINE逻辑部署code到一个已经被删除从负载平衡器的节点
功能部署(
    [F5Node] $节点
)
{
    写主机部署到:$ Node.Name
    #TODO:远程关闭服务,推送code,启动备份服务
}


#DEFINE NODES
$节点= @()
$节点+ =新对象F5Node -ArgumentList @(TestNode1,1.1.1.1)
$节点+ =新对象F5Node -ArgumentList @(TestNode2,1.1.1.2)

#部署
DeployToNodes -nodes $节点-F5Host $ F5Host -F5UserName $ F5UserName -F5Password $ F5Password
 

这里是可重复使用的F5Functions脚本

  #Load了F5的PowerShell的iControl管理单元
附加PSSnapin iControlSnapin;

写主机进口F5功能!

添加型@
    公共类F5Node
    {
        公共F5Node(字符串名称,字符串地址){
            地址=地址;
            名称=名称;
        }
        公共字符串的地址{获取;集;}
        公共字符串名称{获取;集;}
        公共字符串QualifiedName的{{返回/通用/+姓名;}}
    }
@

功能DeployToNodes(
    [字符串] $ F5Host = $(抛出缺少所需的参数),
    [字符串] $ F5UserName = $(抛出缺少所需的参数),
    [字符串] $ F5Password = $(抛出缺少所需的参数),
    [F5Node []] $节点= $(抛出缺少所需的参数),
    [INT] $ MaxWaitTime = 300 #seconds ...默认为5分钟
){
    验证-F5Host $ F5Host -F5UserName $ F5UserName -F5Password $ F5Password

    的foreach(在$节点$节点){
        DisableNode -Node $节点

        WaitForConnectionsToDrop -Node $节点-MaxWaitTime $ MaxWaitTime

        #Assume,包括定义的部署方法有一个节点参数此Script
        部署-Node $节点

        EnableNode -Node $节点
    }
}

功能验证(
    [字符串] $ F5Host = $(抛出缺少所需的参数),
    [字符串] $ F5UserName = $(抛出缺少所需的参数),
    [字符串] $ F5Password = $(抛出缺少所需的参数)
)
{
    写主机验证到F5 ......
    初始化-F5.iControl -HostName $ F5Host -Username $ F5UserName -Password $ F5Password
    写主机认证成功!
}

功能ParseStatistic(
        [iControl.CommonStatistic []] $ StatsCollection = $(抛出缺少所需的参数),
        [字符串] $ STATNAME = $(抛出缺少所需的参数)
    )
{
    为($ i = 0; $ I $ -lt StatsCollection.Count; $ I ++){
        如果($ StatsCollection [$ I] .type.ToString()当量$ STATNAME){
            返回$ StatsCollection [$ i] .value.low
            打破
        }
    }
}

功能GetStats(
        [F5Node] $节点= $(抛出缺少所需的参数)
    )
{
    $ ARR = @($ Node.QualifiedName)
    $ nodeStats =(GET-F5.iControl).LocalLBNodeAddressV2.get_statistics($ ARR)
    返回$ nodeStats.statistics.statistics

    #foreach(在$ poolStats.statistics $ memberStats){
    #如果($ memberStats.member.address.ToString()当量$节点 - 和$ memberStats.member.port当量$端口){
    #返回$ memberStats.statistics
    #}
    #}
}

功能GetStatistic(
        [F5Node] $节点= $(抛出缺少所需的参数),
        [字符串] $ STATNAME = $(抛出缺少所需的参数)
    )
{
    $统计= GetStats -Node $节点
    $ STAT = ParseStatistic -StatsCollection $统计-StatName $ STATNAME

    返回$统计
}

功能DisableNode(
    [F5Node] $节点= $(抛出缺少所需的参数)
)
{
    禁用-F5.LTMNodeAddress -Node $ Node.Address
    写主机已禁用节点'$节点'
}

功能EnableNode(
    [F5Node] $节点= $(抛出缺少所需的参数)
)
{
    启用-F5.LTMNodeAddress -Node $ Node.Address
    写主机已启用节点$节点'
}

功能WaitForConnectionsToDrop(
    [F5Node] $节点= $(抛出缺少所需的参数),
    [INT] $ MaxWaitTime = 300
)
{
    $连接= GetCurrentConnections -Node $节点

    $经过= [System.Diagnostics.Stopwatch] :: StartNew();
    而($连接-gt 0  - 和$ elapsed.ElapsedMilliseconds -lt($ MaxWaitTime * 1000)){

        启动睡眠-Seconds 10

        $连接= GetCurrentConnections -Node $节点
    }
}

功能GetCurrentConnections(
    [F5Node] $节点= $(抛出缺少所需的参数)
)
{
    $连接= GetStatistic -Node $节点-StatNameSTATISTIC_SERVER_SIDE_CURRENT_CONNECTIONS
    $名称= $ Node.Name +:+ $ Node.Address
    写主机留在'$名字'$连接,连接
    返回$连接
}
 

解决方案

我还没有使用它,但你看了 F5的iControl Web服务API和href="http://www.f5.com/products/technology/microsoft/powershell/"> F5的iControl PowerShell命令通过F5提供的