AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[alwayson](server)

Martin Hope
Cat Mucius
Asked: 2021-07-15 03:30:18 +0800 CST

SQL AlwaysOn 可用性组中的数据一致性

  • 1

我有一个 SQL Server 2019 的 AlwaysOn 集群,其中包含一个处于同步模式的 3 个副本的可用性组。根据微软文档:

  1. 辅助副本强化日志并向主副本返回确认。
  2. 在收到来自辅助副本的确认后,主副本完成提交处理并向客户端发送确认消息。

本文更详细地解释了这一点:

  1. 在辅助副本中,日志接收从主副本获取日志记录并写入日志缓存。在参与同步提交模式的每个辅助副本上重复此过程。
  2. 在每个从副本上,都存在重做线程,它将日志记录中提到的所有更改写入数据页和索引页。它刷新日志以强化辅助数据库日志。
  3. 如前所述,在同步数据提交中,主副本等待来自辅助副本的确认。在此阶段,辅助副本发送确认事务强化已在辅助副本上完成。
  4. 一旦主副本收到来自辅助副本的确认,它就会向客户端发送事务完成消息。

因此,如果我理解正确: 如果我通过主副本成功更新记录,则此更新后的值应该立即可供查询辅助副本的客户端使用。

但是,当我对此进行测试时,这不起作用。我运行一个简单的批处理文件,如下所示:

sqlcmd -E -S tcp:SQL-AG-Listener -d TestDB -Q "BEGIN TRANSACTION; UPDATE TestSyncTable SET CurrentTime='%currentTime%'; COMMIT TRANSACTION;"
sqlcmd -E -S tcp:SQL-Server01 -d TestDB -Q "SELECT * FROM TestSyncTable" -K ReadOnly
sqlcmd -E -S tcp:SQL-Server02 -d TestDB -Q "SELECT * FROM TestSyncTable" -K ReadOnly
sqlcmd -E -S tcp:SQL-Server03 -d TestDB -Q "SELECT * FROM TestSyncTable" -K ReadOnly

所以我CurrentTime通过主副本(托管 AG 侦听器)更新该字段,然后立即通过所有三个副本读取它。每个sqlcmd命令都是一个单独的客户端进程,因此它打开了自己独立的 TCP 连接。

然后我看到这样的东西:

SQL-Server01: CurrentTime = 20:02:19.93
SQL-Server02: CurrentTime = 20:02:16.94
SQL-Server03: CurrentTime = 20:02:19.93

(重新格式化输出以获得更好的可读性)

据我所见,主副本始终返回更新后的值。辅助节点也这样做 - 但只是一些短暂的延迟。

所以问题是:为什么?同步模式不应该保证读操作的结果与写操作的结果一致吗?如果辅助副本仅在其重做线程更新数据页面后才发送确认 - 那怎么可能呢?

谢谢,穆修斯。

sql-server database high-availability alwayson data-consistency
  • 1 个回答
  • 117 Views
Martin Hope
A X
Asked: 2021-02-21 12:40:52 +0800 CST

SQL Server Always On 可用性组零停机更新过程

  • 3

这里我有一个 2 节点 SQL Server 2016 AlwaysOn 可用性组集群,有 1 个主节点和 1 个辅助节点。

问题是 - 在群集中的服务器上安装 Microsoft 更新的最佳方式是什么?我一直在努力为此找到好的、明确的建议。

这是我目前的想法:

  1. 在辅助节点上使用 Microsoft Update 安装更新
  2. 重新启动辅助以完成更新
  3. 执行从主节点到辅助节点的手动故障转移
  4. 在新辅助(前主)上使用 Microsoft Update 安装更新
  5. 重新启动新的辅助节点(以前的主节点)
  6. 执行从新主节点到辅助节点的手动故障转移,使原始主节点再次成为主节点

我的理解是,这将:

  • 绝对不会导致应用程序停机
  • 导致没有同步错误
  • 不会造成数据损坏
  • 一半节点更新而另一半节点未更新时集群不会产生错误

这个对吗?有一个更好的方法吗?

在此先感谢 - 非常感谢任何帮助。

sql-server high-availability alwayson sql-server-2016
  • 1 个回答
  • 628 Views
Martin Hope
Lachie White
Asked: 2017-02-16 01:17:36 +0800 CST

AlwaysOn SQL VNet 从 Azure V1 (ASM) 迁移到 V2 (ARM)

  • 2

希望有人能帮忙!

目前正在计划从 Azure 服务管理器迁移到 Azure 资源管理器。

找不到任何文档,并认为我会伸出援手。

使用方法Move-AzureVirtualNetwork将虚拟机从 ASM 迁移到 ARM 时。如果 SQL Alwayson 群集是该虚拟网络中的唯一可用性集。

迁移的时候,对集群有没有影响?

如果是这样,是否可以完全重新配置和重新部署集群?

谢谢,拉奇

sql-server azure alwayson
  • 1 个回答
  • 141 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve