使用Powershell配置Windows Failover Cluster群集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Powershell配置Windows Failover Cluster群集相关的知识,希望对你有一定的参考价值。

参考技术A

前面有几篇文章介绍了Windows Failver Cluster集群的相关知识和实际案例,请参考如下:

接下来,我们将尝试如何通过Powershell来更高效的部署和管理Windows故障转移群集。实验环境所用的系统版本为Windows Server 2012,但应适用于更高版本。

本文实验环境为两台Windows Server 2012 R2

如上图,出现报错,这是因为我们的每个节点有两块网卡,分别连接不同的网络(192.168.100.0/24 和192.168.199.0/24),如果集群需要向两个网段同时提供服务或者两个节点来自不同的网段,则可以提供多个虚拟IP如下例;如不需要则可以添加-ignorenetwork参数忽略掉
New-Cluster -Name TestClusterA -Node node1,node2 -StaticAddress 192.168.100.220,192.168.199.220
如果我们集群的地址涉及地址都开启DHCP自动获取IP,我们也可以用下面命令创建
New-Cluster -Name TestClusterA -Node node1,node2
创建集群时,我们还可以指定它创建后所在的AD的OU,比如下面的命令
New-Cluster -Name "CN=TestClusterA,OU=Cluster,DC=buffallos,DC=com" -Node node1,node2 -StaticAddress 192.168.100.220
本例将使用比较常用的方式,只指定静态地址和(192.168.100.0/24)的虚拟IP

集群创建成功

对应的计算机和DNS记录已经创建.
小知识

6.将创建好的iSCSI磁盘添加进群集 TestClusterA

2.将创建好的iSCSI磁盘添加进群集 TestClusterA

如果像设置为节点共享文件夹多数仲裁,可以使用如下命令
PS C:\\> Set-ClusterQuorum -NodeAndFileShareMajority \\\\DC\\ClusterFSW
4.为了方便日后运维,资源可以更改名字,下面我们将加"群集磁盘1"更改为 Witness

用户被分配管理权限后,可以在用户所用的计算机上安装RSAT进行远程管理群集,但是为了安全,不建议将此用户添加到Domain Admins组。
移除某个用户的群集管理权限可以使用 Remove-ClusterAccess
PS C:\\> Remove-ClusterAccess -Cluster TestClusterA Buffallos\\ClusterAdmin
但是这种方式移除用户后,并不能保证该用户已经没有群集权限,因为有可能该用户所隶属的组可能有管理权限,因此如果想明确某个用户不能拥有群集权限可以使用 Block-ClusterAccess ,如下,明确 ClusterAdmin 不能有集群权限
Block-ClusterAccess -Cluster TestClusterA -user buffallos\\ClusterAdmin
7.下面我们将使用powershell快速创建一个群集文件服务角色( Windows 故障转移群集 Part 3 中详述了图形化创建过程),然后再了解下群集组。

执行上面的函数后,结果如下,我们可以看到, 群集磁盘 3 容量最大,我们将它作为文件服务器存储

我们把磁盘3名称改为F_Disk,方便区分

创建文件服务器FileA并创建共享文件夹E:\\Data

默认情况下,群集组类型只有群集组和可用存储组,但是在我们创建了文件服务器后,与文件服务器相关的资源都被放在了FileA这个群集组中,如下

我们定义集群组,其目的就是为了方便管理,一般会把所提供服务或应用所用到的资源归为一组,每当需要管理其相关资源时,可以通过组方式筛选

依赖关系还可以添加,下面我们将FileA组中的闲置磁盘添加文件服务器FileA依存关系,使其被后者依赖

注意:添加的依赖逻辑操作符均为逻辑与(AND),即所有被依赖的资源上线后,依赖者才能上线,下线顺序相反

powershell 使用PowerShell配置IP地址(在Windows上)

# Edit by: Ngoc Khuong (me@ngockhuong.com)
# Website: https://ngockhuong.com

########################## Network Information ##########################

param (
	[string]$Name = "Wi-Fi", # Ethernet / Wi-Fi
    [string]$Type = "DHCP", # Static / DHCP
	[IPAddress]$IP = "192.168.1.2",
    [string] $CIDR = 24, # This means subnet mask = 255.255.255.0,
	[string]$Gateway = "192.168.1.1",
	[string]$Dns = "8.8.8.8,8.8.4.4",
	[string]$IPType = "IPv4"
    
)

#########################################################################

# Get the ID and security principal of the current user account
$myWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent();
$myWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($myWindowsID);

# Get the security principal for the administrator role
$adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator;

# Check to see if we are currently running as an administrator
if ($myWindowsPrincipal.IsInRole($adminRole))
{
    # We are running as an administrator, so change the title and background colour to indicate this
    $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)";
    $Host.UI.RawUI.BackgroundColor = "DarkBlue";
    Clear-Host;
}
else {
    # We are not running as an administrator, so relaunch as administrator

    # Create a new process object that starts PowerShell
    $newProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell";

    # Specify the current script path and name as a parameter with added scope and support for scripts with spaces in it's path
    $newProcess.Arguments = "& '" + $script:MyInvocation.MyCommand.Path + "'"

    # Indicate that the process should be elevated
    $newProcess.Verb = "runas";

    # Start the new process
    [System.Diagnostics.Process]::Start($newProcess);

    # Exit from the current, unelevated, process
    Exit;
}

################### Run your code that needs to be elevated here... ###################

# Retrieve the network adapter that you want to configure
$adapter = Get-NetAdapter | ? {$_.Name -eq $Name}

if ($Type -eq "Static") {

    # Remove any existing IP, gateway from our ipv4 adapter
    If (($adapter | Get-NetIPConfiguration).IPv4Address.IPAddress) {
        Write-Host "Removing existing IP"
        $adapter | Remove-NetIPAddress -AddressFamily $IPType -Confirm:$false
    }

    If (($adapter | Get-NetIPConfiguration).Ipv4DefaultGateway) {
        Write-Host "Removing existing gateway"
        $adapter | Remove-NetRoute -AddressFamily $IPType -Confirm:$false
    }

    # Configure the IP address and default gateway
    Write-Host "Configuring new IP"

    $adapter | New-NetIPAddress `
        -AddressFamily $IPType `
        -IPAddress $IP `
        -PrefixLength $CIDR `
        -DefaultGateway $Gateway

    # Configure the DNS client server IP addresses
    Write-Host "Configuring new gateway"
    $adapter | Set-DnsClientServerAddress -ServerAddresses $DNS
} else {
    $interface = $adapter | Get-NetIPInterface -AddressFamily $IPType

    If ($interface.Dhcp -eq "Disabled") {
        # Remove existing gateway
        Write-Host "Removing existing gateway"
        If (($interface | Get-NetIPConfiguration).Ipv4DefaultGateway) {
            $interface | Remove-NetRoute -Confirm:$false
        }

        # Enable DHCP
        Write-Host "Enabling DHCP on interface"
        $interface | Set-NetIPInterface -DHCP Enabled

        # Configure the  DNS Servers automatically
        Write-Host "Enabling automatic DNS"
        $interface | Set-DnsClientServerAddress -ResetServerAddresses
    }
}
Write-Host "Restarting adapter"
$adapter | Restart-NetAdapter
Start-Sleep -s 5

以上是关于使用Powershell配置Windows Failover Cluster群集的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Powershell DSC 为 Windows 服务设置自动启动配置

使用Powershell管理Windows计划任务

使用Powershell配置Windows Failover Cluster群集

设置Windows PowerShell环境变量

如何安装和配置 Windows Azure PowerShell

powershell Boxstarter Windows 10配置