本文摘要介绍了服务器冗余配置的关键步骤,主要包括:

  1. 创建三台Windows Server 2022虚拟机(Server1作为域控制器,Server2/3用于群集);
  2. Server1配置域控制器;
  3. Server2和Server3加入域;
  4. Server2和Server3建立故障转移群集;
  5. 设置共享文件夹见证;
  6. Server2和Server3安装SQL Server 2019;
  7. 启用AlwaysOn高可用性组;
  8. Server2和Server3配置IIS实现自动切换;

一、创建虚拟机

下载虚拟机镜像
下载地址:windows-server-2022
选择你下载的镜像安装虚拟机
三个虚拟机用途
Server1:域控制器
Server2和Server3做故障转移群集、AlwaysOn、还有IIS
启动前将三个虚拟机做如下修改
安装三个虚拟机后
设置虚拟机,确保DVD驱动器在第一位
在这里插入图片描述
取消勾选启用安全启动
在这里插入图片描述
网络适配器改为Default Switch
在这里插入图片描述

给Server2和Server3增加第二个网络适配器,作为心跳网络使用,网络适配器同样需改为Default Switch
在这里插入图片描述
启动三台虚拟机,修改计算机名分别为Server1、Server2、Server3
关闭所有防火墙,启用所有网络发现
对应IP地址为
Server1
IP地址:10.18.224.10
子网掩码:255.255.255.0
首选DNS服务器:10.18.224.10
Server2
以太网
IP地址:10.18.224.11
子网掩码:255.255.255.0
首选DNS服务器:10.18.224.10
以太网 2
IP地址:192.168.1.11
子网掩码:255.255.255.0
高级→DNS→取消勾选在DNS中注册此连接的地址
Server3
IP地址:10.18.224.12
子网掩码:255.255.255.0
首选DNS服务器:10.18.224.10
以太网 2
IP地址:192.168.1.12
子网掩码:255.255.255.0
高级→DNS→取消勾选在DNS中注册此连接的地址

二、创建域控制器

Server1添加域控制器
在这里插入图片描述
安装完成后,将此服务器提升为域控制器
在这里插入图片描述
添加新林,输入域名
在这里插入图片描述
林功能级别和域功能级别:都选择最新的操作系统版本(如Windows Server 2016)。
指定域控制器功能:默认勾选"域名系统(DNS)服务器"和"全局编录"即可。
键入目录服务还原模式(DSRM)密码:这是一个用于灾难恢复的重要密码,务必牢记并妥善保管!
一直点击下一步直到安装完成

三、两台服务器加入域

将Server2和Server3加入域
计算机右键单击→属性→高级系统设置→计算机名→更改→输入域名→确定→输入Server1域管理员的账号密码
在这里插入图片描述
Server2和Server3加入域后重启,使用域账户登录,如CORP\Administrator

四、创建故障转移群集

登录后进入添加角色或功能,添加故障转移群集
在这里插入图片描述
打开Server2故障转移群集管理器,点击创建群集
在这里插入图片描述
添加Server2和Server3
在这里插入图片描述
一直下一步,中间有验证测试,等待完成即可
选择虚拟 IP 地址:从 10.18.224.0/24 中选取一个未被占用的静态 IP,例如 10.18.224.100。
可以在域控制器或任一服务器上用 ping 10.18.224.100 确认无人使用。
取消勾选心跳网络 IP 地址在这里插入图片描述
下一步直到完成,可以看到创建后的群集,Server2当前投票为1,Server3当前投票为0
在这里插入图片描述

五、创建共享文件夹见证

指定见证服务器:找一台单独的、不在群集中的文件服务器(例如域控制器 10.18.224.10),或一个专门用来存放见证文件的网络存储(NAS),专门存储见证数据,以保证见证的独立性。
例:在Server1创建共享文件夹ClusterWitness,并共享此文件夹
在安全中添加Everyone的完全控制
在这里插入图片描述
创建完成后确保Server2和Server3可以访问

进入Server2故障转移群集管理器,右击群集名称→更多操作→配置群集仲裁设置
在这里插入图片描述
选择仲裁见证
在这里插入图片描述
配置共享文件夹见证
在这里插入图片描述
输入创建的共享文件夹路径\Server1\ClusterWitness
在这里插入图片描述
下一步到完成,可以看到群集见证
在这里插入图片描述

六、安装数据库

在Server2和Server3安装SQLServer2019标准版及以上(免费版不支持AlwaysOn,也可以使用开发者版和评估版)

在Feature Selection 界面选择所有Feature,取消勾选Machine Learning Services and
Language Extensions 和PolyBase Query Service for External Data,点击Next
在这里插入图片描述
开启sa登录,后续有Add Current User的全部添加进去,直至安装完成
在这里插入图片描述

七、启用Always On

启用Server2和Server3Always On
配置为域管理员登录
进入Sql Server Configuration Manager,点击SQL Server Services→右击SQL Server(MSSQLSERVER),选择属性→点击Log On→输入域管理员账号密码→点击确定
在这里插入图片描述
点击Always On Availability Groups→勾选Enable Always On Availability Groups→点击确定
在这里插入图片描述
右击SQL Server(MSSQLSERVER)重启服务
在这里插入图片描述
在Server2上还原数据库,然后做下数据库备份(Always On要求)
可以看到我们要启用Always On的数据库,右击Always On高可用性→新建可用性组向导
在这里插入图片描述
输入可用性组名称,群集类型选择Windows Server 故障转移群集,勾选数据库级别运行状况检测
在这里插入图片描述
勾选数据库,检查状态为满足先决条件
在这里插入图片描述
添加Server3,勾选自动故障转移
在这里插入图片描述
配置端点,改为心跳网络IP,注意SQL Server 服务账户为域管理员
在这里插入图片描述
创建侦听器
在这里插入图片描述
下一步直到完成,检查Server2和Server3都是正常状态
在这里插入图片描述
使用侦听器IP登录数据库
在这里插入图片描述
Always On配置完成,以后数据库连接全部使用侦听器IP

八、配置IIS

在Server2和Server3启用IIS
在这里插入图片描述
安装完成后,重新进入勾选应用程序开发及其中ASP.NET 4.8,其余内容会自动勾选,然后安装
在这里插入图片描述
在Server2和Server3添加网站,IP先不设置,端口为8080(根据自己需要设置)
在这里插入图片描述
确保Server2和Server3网站可以正常使用,点击浏览后页面正常访问
在这里插入图片描述
修改IP为Always On侦听器IP
在这里插入图片描述
WIN + R输入services.msc进入服务,右击Windows Process Activation Service启动类型改为自动(不要用延迟启动)
在这里插入图片描述
在Server1浏览器输入http://10.18.224.20:8080/测试可以访问
然后关闭Server2,测试还能正常访问
启动Server2然后关闭Server3,测试还能正常访问

以下内容为可选优化项,根据自己需求配置
观察发现后台服务器切换时有一定延迟
在Server2Server3上,以管理员身份打开 PowerShell,然后执行以下命令:

Get-Cluster | Format-List -Property *Subnet*, *Cross*, *Heartbeat*

参数 当前值 含义
SameSubnetDelay 1000 毫秒 (1秒) 每1秒发送一次心跳
SameSubnetThreshold 20 次 允许连续 20 次心跳失败
CrossSubnetDelay 1000 毫秒 (1秒) 跨子网心跳间隔(此处与同子网相同)
CrossSubnetThreshold 20 次 跨子网允许失败次数

集群判定一个节点宕机所需的时间 = Delay × Threshold
当前计算:1 秒 × 20 次 = 20 秒(最快检测出节点故障)
加上 IP 资源切换、ARP 更新等额外开销,客户端实际感受到的延迟约为 25~30 秒。

改为3次失败判为故障

Get-Cluster | ForEach-Object {
    $_.SameSubnetThreshold = 3      # 同子网:连续3次失败判为故障
    $_.CrossSubnetThreshold = 3     # 跨子网:同上
    # 心跳间隔保持 1 秒(1000 毫秒)不变
}

改后检查是否更改成功

Get-Cluster | Format-List -Property *Subnet*, *Cross*, *Heartbeat*

测试方法:
在Server1上,以管理员身份打开 PowerShell,然后执行以下命令(改为你自己的地址):

while ($true) {
    try {
        # 用你的实际地址,如果该方法需要参数会导致失败,请改用 .asmx 的默认帮助页(不加方法名)
        $response = Invoke-WebRequest -Uri "http://10.18.224.20:8080/WeighingSystemWebService.asmx" -TimeoutSec 2 -ErrorAction Stop
        Write-Host "$(Get-Date -Format 'HH:mm:ss') OK" -ForegroundColor Green
    } catch {
        Write-Host "$(Get-Date -Format 'HH:mm:ss') FAIL - $_" -ForegroundColor Red
    }
    Start-Sleep -Milliseconds 500
}

测试结果,7秒左右
在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐