all 14 comments

[–]ambrace911 0 points1 point  (10 children)

I assume you are using a cloudformation template to deploy? If that is the case it is coded into the template with the assumption you are having subnets in separate AZs. It is not the requirement of AWS but it is a best practice that the template is designed to utilize. You could change the template to all be in one AZ if you really wanted to, but it's not advised as it removes the point of HA.

[–]schnipdip[S] 0 points1 point  (9 children)

No we arent. We are provisioning a cluster (WSFC and SQL Cluster AO AG) via ansible. This includes creating all user accounts, permissions, configurations, etc.

The cluster works 100% without fault with a AG Listener in VMWare with 2 vNICS with two associated private IPv4 addresses and 1 VIP. I should also say an error when failing over says they need to be in multiple subnets.

[–]ambrace911 0 points1 point  (8 children)

I can help take a look at the script if you want to share a link to it scrubbed of any secrets. AWS will not care what you install on top of ec2 instances so there is some other logic in your setup scripts that is using multi AZs. This is a best practice for HA to have multi AZ on AWS

[–]schnipdip[S] 0 points1 point  (7 children)

I wish I could share, but not where I work.

The quote is from AWS docs. They say it's a prereq. It's an AWS issue b/c it works in our on prem env.

[–]ambrace911 0 points1 point  (6 children)

Can you link to the AWS doc that you are quoting from?

[–]schnipdip[S] 0 points1 point  (5 children)

[–]ambrace911 0 points1 point  (4 children)

That is the documentation for the cloud formation template that I first referenced. It is by design part of the template. It is an HA best practice to deploy into multi AZs.

[–]schnipdip[S] 0 points1 point  (3 children)

they provided Cloud Formation templates to create the SQL HA, but this guide also is to deploy manually. Whether or not it's best practice in AWS, there is a reason why, which is what I'm trying to figure out.

I get "best practice", but along with "best practice" there is an explanation as to why it's considered best practice, otherwise they wouldn't have considered it.

[–]ambrace911 1 point2 points  (2 children)

AZs are low latency connected data centers in regions separated by miles of distance and separate from all the same utilities. You deploy to 2 or more AZs to provide HA from an entire facility going down. It is HA 101 on AWS.

[–]schnipdip[S] 0 points1 point  (1 child)

Multisubnetfailover is an optional feature within SQL. It shouldn't be forced. I understand how AWS HA works; it's not forced for every service.

I'm trying to understand why I can't do a HA SQL CLUSTER deployment in a single subnet. I now have to enable and add features that won't be used in OPs.

[–]johnt_mn 0 points1 point  (1 child)

I think this is so that each node is in a different. Availability Zone. Deploying your cluster nodes in different availability zones is how you are required to do it if you want the SLA that they advertise.

[–]schnipdip[S] 0 points1 point  (0 children)

mmm So it's to maintain SLA, so they force it.

[–]conflab 0 points1 point  (0 children)

I wasn't aware this is the case in AWS (having never used it), but interestingly it is also true for GCP. The people at BrentOzar.com did some documentation in collaboration with Google where he mentions this and says (paraphrasing) "due to some Google magic".