无论使用什么可用性模式,如果一个事务在辅助数据库上重做失败,就会导致辅助副本进入”NOT SYNCHRONIZING“状态,即使处于同步提交模式,主副本的事务也不需要等待该副本的响应就可以提交。
如果用户想中断数据库的数据同步,而不想影响可用性组中的其他数据库,可以通过在SSMS中选择Suspend Data Movement来手动挂机,挂起之后,该数据库在各个可用性副本上的状态都会变成”NOT SYNCHRONIZING“状态。
四,AlwaysOn的故障转移
当WSFC触发故障转移之后,一个辅助副本被选择成为新的主副本角色,该副本上的SQL Server实例对可用性数据库执行恢复操作,使其成为新的主数据库;在故障转移完成之后,如果原先的主副本还可用,那么它就成为辅助副本,它上面的数据库就成为了辅助数据库。
但AlwaysOn发现故障之后,是否立即出发故障转移呢?这取决于可用性副本的可用性模式和故障转移模式,如图:
只有主副本和转移的目标副本都配置为”同步提交模式+自动故障转移“模式时,才能实现两个可用性副本之间的自动故障转移。在三种故障转移模式中,只有强制故障转移可能丢失数据。自动故障转移和手动故障转移,都必须配置在同步提交模式下,必须数据库都处于SYNCHRONIZED状态。对于异步提交模式的辅助副本,无论数据是否已经达到同步,都只会处于SYNCHRONIZING状态,只能支持强制故障转移。
五,创建可用性组
1,在创建AG之前,配置SQL Server实例启用AlwaysOn
在SQL Server配置管理器(SQL Server Configuration Manager)中打开SQL Server 实例的属性,输入Windows 故障转移集群的名称,并勾选“Enable AlwaysOn Availabilitty Groups”选项启用AlwaysOn 可用性组,在所有可用性副本上都启用SQL Server实例的AlwaysOn 可用性组。
2,使用SSMS连接任意主副本的SQL Server实例,打开新建AG向导(New Availability Group Wizard)
连接到主副本,是因为该副本上拥有所有的可用性数据库,如果所有的可用性副本上都有相同的数据库副本,那么可以连接任意一个副本。
3,指定AG的名字,勾选“Database Level Health Detection”选项
4,选择可用性数据
从数据库列表中需要添加到可用性组中的数据,这些数据库将成为一个整体一起发生故障转移,本例勾选Test_DW。
添加到可用性组中的数据库必须满足一定的要求:
数据库可以读写;
数据库的恢复模式是FULL;
数据库已经做过完整备份;
5,添加可用性副本
使用“Add Replica”添加可用性副本,在Availability Replicas列表中,能够查看各个可用性副本的配置:
Server Instance:副本的实例名称
Initial Role :是副本初始角色,Primary是主副本,Secondary是辅助副本;
勾选“Automatic Failover” :副本的故障转移模式是自动故障转移;
勾选“Synchronous Commit”:副本的可用性模式是同步提交模式;
“Readable Secondary”:可读的辅助副本,主数据库是可读写的,辅助数据库可以设置为可读的;
6,创建Listener
创建一个可用性组的侦听器,实际上是虚拟的服务器,
Listener DNS Name:网络名,命名为TestAGListener;
Port:推荐使用默认端口1433;
Network Mode:IP地址的分配方式,建议使用Static IP,本例使用DHCP
Subnet:子网,系统自动设置
7,选择如何在辅助副本上初始化AG中的数据
FULL:向导自动对主数据库做完整备份和日志备份,并将备份文件存放在共享目录中,其他副本通过共享目录获得数据库的备份,并在各自的SQL Server实例上还原数据库。通过FULL初始化方式,必须确保主副本上的存储主数据库文件的路径在辅助副本上也存在,即数据库文件的存储路径一致。
Join Only:如果已经手动在各个辅助副本上还原了数据库,使用该选项,将各个辅助副本直接加入到可用性组中。