基本答案:我要求的东西不是AOAG设计的一部分。
在我看来,这不是一个好问题。除非这冒犯了别人,否则我会把它留在这里,以防有人和我有同样的想法。
请原谅,因为我不是DBA。
我正在咨询一个项目,很可能需要700到900之间的数据库。该软件不能使用多个SQL实例,必须以相同的SQL实例名称承载所有DB。
客户端的DBA解释了为什么在AlwaysOn可用性组上托管数百个数据库可能是不合理的,而且微软的官方文档虽然没有规定上限,但它确实说明了MS只对100个数据库进行测试。
AlwaysOn故障转移群集不是一个选项,因为数据是共享的,而不是复制的。
我的理解是,AOAG作为SQL实例是可寻址的,并且我无法在多个AOAG之间共享实例名称。
有人向我提到,可能确实可以这样做--添加一个额外的AG,并在相同的SQL实例名称下添加那些附加的do,但是我的搜索无法找到这个选项的描述。
我要么用错误的术语搜索这方面的信息,要么假设AG与SQL实例为1:1,甚至可能为1:m,但每个实例不包含多个AGs。
hostname\instance组成的实例的逻辑地址没有AOAG的关系:
Host --1:n--> Instance --1:n--> database我迷路的
(如果我错了,请纠正我)
人际关系?与AOAG:
AO Cluster (logical name AO\All)
+-- AG
+-- Host A
| +-- Instance One
| +-- db1
| +-- db2
+-- Host B
+-- Instance One (replica of A\Instance One)
+-- db1
+-- db2Host A/Instance One或Host B/Instance One上的dbs可通过AlwaysOn服务的AO\All访问。
在单个DB实例中的AlwaysOn span数据库中是否可能有多个可用组?如果没有,您有建议如何有效地托管这么多的DBs并且总是开着吗?(除了像这里那样的“它应该工作”之外)
换句话说,这是一种可能的架构吗?它是否允许我服务/主持更多的星展(通过加倍的硬件?)
AO Cluster (logical name AO\All)
+-- AG-1 (as specified above)
| +-- Host A
| | +-- Instance One
| | +-- db1
| | +-- db2
| +-- Host B
| +-- Instance One (replica of A\Instance One)
| +-- db1
| +-- db2
+-- AG-2 (as specified above)
+-- Host C
| +-- Instance Two
| +-- db3
| +-- db4
+-- Host D
+-- Instance Two (replica of C\Instance Two)
+-- db3
+-- db4使用db3和db4可以使用与db1和db2相同的逻辑实例名称(AO\All)访问。
发布于 2021-12-07 23:21:54
客户端的DBA解释了为什么在AlwaysOn可用性组上托管数百个DBA可能是不合理的...
这是正确的,虽然如果你有它的硬件,那么它就可以工作,但是在大多数情况下,在所有同时活动的数据库中,拥有数百到数千个数据库将是一场灾难。
...官方的微软文档,虽然它没有说明上限,但它确实指出,MS只对100个数据库进行测试。
这是对特定硬件的特定测试,并不表示一般性能水平、最大值或最小值。这只是一个数据点,测试中具有给定负载的100个数据库将在测试中的硬件上很好地工作。这意味着您的硬件将是不同的,cpus的数量,内存等,因此甚至可能无法运行100。没有最大数量(除了SQL Server的数据库数量之外,这是一个硬上限),唯一知道的方法是测试您的特定设置(包括基础结构和工作负载),以了解上限在哪里。这也可能随着时间的推移而改变,因为用户、工作负载等被添加到系统中,而不是静态的。
我的理解是,AOAG作为SQL实例是可寻址的,并且我无法在多个AOAG之间共享实例名称。
我不确定我是否完全理解这里的语句,但是一个实例( Server运行的可执行文件)可以有一个或多个AGs。这些AGs可以跨越一个或多个实例。
有人向我提到,可能确实可以这样做--添加一个额外的AG,并在相同的SQL实例名称下添加那些附加的do,但是我的搜索无法找到这个选项的描述。
有可能有多个AG,但是一个数据库只能存在于一个AG中。因此,实例承载AGs,AG是数据库的逻辑容器。当逻辑容器( AG)“移动”到可能承载AG的任何其他实例时,该逻辑容器(AG)将移动它(数据库)中的所有资源。AG逻辑容器中的所有数据库都必须在一起,不能分割,因为您不能选择和选择AG中的哪个数据库到每个副本,仅此而已。
我要么用错误的术语搜索这方面的信息,要么假设AG与SQL实例为1:1,甚至可能为1:m,但每个实例不包含多个AGs。
这取决于您如何看待它,但是一个实例可以承载1:m。AG跨越1:8实例。
在单个DB实例中的AlwaysOn span数据库中是否可能有多个可用组?
实例不是数据库,实例承载数据库。AGs是数据库资源的逻辑容器,所有这些资源都“一起”,不管它们被要求去哪里(不管SQL Server允许托管它们,数据库在物理上是可用的)。因此,AG中的单个数据库将在AG跨越的所有其他实例上拥有其自身的精确副本。
但是,您不能跨多个a获取多个数据库,并使它们看起来都像一个实例。它们都需要托管在单个实例上才能工作(这是可能的),然而,您将回到原来的问题“这是太多的数据库,硬件可以处理”。
发布于 2021-12-08 00:30:07
如果没有,您有建议如何有效地托管这么多的DBs并且总是开着吗?
从技术上讲,总是有可用性组(AGs)和始终处于故障转移群集实例中 (FCIs)。
一个FCI可以很好地处理大量的数据库。您需要共享磁盘、SMB3共享或存储空间直接复制磁盘的共享存储。
和
换句话说,这是一种可能的架构吗?
是。您可以跨多个服务器进行伸缩,并且每个AG只在节点的一个子集上进行,例如有3个AGs和6个集群节点:
N1 N2 N3 N4 N5 N6
AG1 X X
AG2 X X
AG3 X X每个AG都有1/3的数据库。或有3个节点
N1 N2 N3
AG1 X X
AG2 X X
AG3 X X 其中,每个节点托管一个AG的主副本和一个AG的二级副本。
但是,这是一种非常复杂和昂贵的解决方案,它可以更好地扩展到大量数据库,如FCI、VM复制、存储复制,或者简单地与您的虚拟机管理程序提供的HA一起使用。
https://dba.stackexchange.com/questions/303655
复制相似问题