WEBVTT 0:00:02.640000 --> 0:00:06.360000 In this video, we're going to take a look at virtual machine availability 0:00:06.360000 --> 0:00:11.060000 within Azure. The topics we're going to cover, I'm going to start out 0:00:11.060000 --> 0:00:13.900000 with something that takes pretty important, that is the actual service 0:00:13.900000 --> 0:00:19.180000 level agreements that Marshall gives you currently for availability. 0:00:19.180000 --> 0:00:25.540000 Then we're going to talk about the ways in which you can implement availability. 0:00:25.540000 --> 0:00:28.480000 We'll talk about the original way which is availability sets, what they 0:00:28.480000 --> 0:00:31.340000 are, their components, how they work. 0:00:31.340000 --> 0:00:34.880000 Then something that's a bit newer and I think actually one of the more 0:00:34.880000 --> 0:00:43.020000 important really improvements that Marshall has made to Azure over time 0:00:43.020000 --> 0:00:44.340000 and that is availability zones. 0:00:44.340000 --> 0:00:48.140000 We'll talk about why I think that's so important and we'll go ahead and 0:00:48.140000 --> 0:00:53.580000 jump right in. I want to start out pretty simple, talk about the Azure 0:00:53.580000 --> 0:00:56.900000 Virtual Machine Availability Service Level agreements. 0:00:56.900000 --> 0:01:01.020000 There are three different levels available from Microsoft. 0:01:01.020000 --> 0:01:07.840000 This means that if your machines over the course of a month are not at 0:01:07.840000 --> 0:01:12.800000 running capacity, so if either they're offline or if they're in a sufficiently 0:01:12.800000 --> 0:01:16.700000 degraded capacity, that Marshall is not meeting that SLA and there's some 0:01:16.700000 --> 0:01:19.000000 compensation for that. 0:01:19.000000 --> 0:01:23.840000 The lowest is 99.9 percent availability, so it's going to be available 0:01:23.840000 --> 0:01:26.780000 99.9 percent of any given month. 0:01:26.780000 --> 0:01:30.240000 You can do that if you're using premium storage. 0:01:30.240000 --> 0:01:34.220000 Even if you have a single virtual machine, but it is running with all 0:01:34.220000 --> 0:01:38.980000 premium disks that includes OS and any data disks, then it has a guaranteed 0:01:38.980000 --> 0:01:41.840000 uptime of 99.9 percent. 0:01:41.840000 --> 0:01:46.560000 To get higher uptime, the two options are the option that's been around 0:01:46.560000 --> 0:01:49.820000 pretty much forever, which is an availability set which I'll go into. 0:01:49.820000 --> 0:01:53.040000 As you can see, you get 99 .95 percent availability. 0:01:53.040000 --> 0:01:56.780000 In order to have that, you have to have at least two virtual machines 0:01:56.780000 --> 0:02:01.700000 that are running the same workload in an availability set. 0:02:01.700000 --> 0:02:06.700000 An availability set will limit the placement of your virtual machines 0:02:06.700000 --> 0:02:09.180000 to a single data center. 0:02:09.180000 --> 0:02:13.580000 The next level up is what's called an availability zone. 0:02:13.580000 --> 0:02:16.200000 The availability zone, as you can see, is actually going to give you four 0:02:16.200000 --> 0:02:18.140000 nines availability. 0:02:18.140000 --> 0:02:21.360000 With an availability zone, if you're using availability zones, you have 0:02:21.360000 --> 0:02:25.500000 to have at least two virtual machines in different zones. 0:02:25.500000 --> 0:02:29.940000 Each zone actually represents a different physical data center in the 0:02:29.940000 --> 0:02:35.440000 same region. I would have to run the VMs in the same region, so maybe 0:02:35.440000 --> 0:02:39.680000 they're all running in each US, but there are three zones, zones zero, 0:02:39.680000 --> 0:02:44.520000 one and two, and I can't zero, one, two, and three. 0:02:44.520000 --> 0:02:48.900000 I can distribute the VMs across those zones. 0:02:48.900000 --> 0:02:50.680000 Zones give you better protection. 0:02:50.680000 --> 0:02:52.880000 Obviously, you have a higher level availability. 0:02:52.880000 --> 0:02:57.500000 Zones are not available everywhere, and they do come with some caveats, 0:02:57.500000 --> 0:03:00.580000 and we'll get to that when we talk about availability zones. 0:03:00.580000 --> 0:03:01.100000 But there you go. 0:03:01.100000 --> 0:03:06.600000 Those are the basics of your availability SLAs, something that everybody 0:03:06.600000 --> 0:03:12.520000 who is an administrator in Azure should know really just from memory. 0:03:12.520000 --> 0:03:15.300000 Now, I want to talk about availability sets. 0:03:15.300000 --> 0:03:17.360000 Here's the idea. 0:03:17.360000 --> 0:03:22.240000 I have a workload that I need to be highly available, so what I will do 0:03:22.240000 --> 0:03:27.460000 is I will have multiple virtual machines, and I'll have a load balancer 0:03:27.460000 --> 0:03:30.380000 in front of those multiple virtual machines. 0:03:30.380000 --> 0:03:32.180000 This is my load balancer. 0:03:32.180000 --> 0:03:36.620000 All these other guys are my workloads, and they're all tied in and I'm 0:03:36.620000 --> 0:03:37.860000 connecting through the load balancer. 0:03:37.860000 --> 0:03:40.900000 That gives me basic availability. 0:03:40.900000 --> 0:03:44.480000 However, that's not enough to get the SLA from Microsoft. 0:03:44.480000 --> 0:03:50.240000 In fact, if you want availability, regardless of the SLA, that's not enough. 0:03:50.240000 --> 0:03:54.140000 What you want to do is implement something called an availability set 0:03:54.140000 --> 0:03:58.960000 at a minimum. The availability set is a resource. 0:03:58.960000 --> 0:04:00.560000 It's kind of a logical resource. 0:04:00.560000 --> 0:04:02.960000 In and of itself, it doesn't do anything, but I'm going to tell you the 0:04:02.960000 --> 0:04:05.200000 components and why it matters. 0:04:05.200000 --> 0:04:06.700000 I have an availability set. 0:04:06.700000 --> 0:04:14.480000 This is my availability set. 0:04:14.480000 --> 0:04:23.120000 The availability set is made up of two things. 0:04:23.120000 --> 0:04:31.700000 I have what's called fault domains, of which there can be one to three. 0:04:31.700000 --> 0:04:40.580000 I have one to three fault domains, and then distributed across the fault 0:04:40.580000 --> 0:04:49.480000 domains, I have update domains, where I can have between one and 20 update 0:04:49.480000 --> 0:04:53.900000 domains. But if you have one fault domain or one update domain, that doesn't 0:04:53.900000 --> 0:04:56.580000 really do you much good. 0:04:56.580000 --> 0:04:59.900000 I'm just going to say update, but it's an update domain. 0:04:59.900000 --> 0:05:02.520000 There we go, but domain down below it. 0:05:02.520000 --> 0:05:04.160000 I didn't plan very well. 0:05:04.160000 --> 0:05:05.400000 There we go, update domain. 0:05:05.400000 --> 0:05:09.580000 Now, when you have that, when you provision virtual machines, you can 0:05:09.580000 --> 0:05:13.920000 specify that you want to provision them into this availability set. 0:05:13.920000 --> 0:05:20.220000 Here's a VM that's running my web app, and I provision another VM that's 0:05:20.220000 --> 0:05:24.780000 also running an instance of my web app, and so on. 0:05:24.780000 --> 0:05:30.160000 Now, once I provision enough virtual machines that take up all the update 0:05:30.160000 --> 0:05:36.900000 domains, it just starts round robbing them into the update domain. 0:05:36.900000 --> 0:05:41.540000 So in this case, I've got two fault domains, I've got four update domains, 0:05:41.540000 --> 0:05:46.660000 and I've got six virtual machines running the same workload. 0:05:46.660000 --> 0:05:52.080000 Now, in front of that, I would have my load balancer, and so I'll just 0:05:52.080000 --> 0:05:54.100000 draw this in. It'll probably be a different load balancer, but I'd have 0:05:54.100000 --> 0:05:58.000000 all these guys tied into the load balancer. 0:05:58.000000 --> 0:06:06.380000 And I just didn't feel like deleting anything, but there we go. 0:06:06.380000 --> 0:06:09.840000 That's my new environment. 0:06:09.840000 --> 0:06:12.060000 Couple things about this. 0:06:12.060000 --> 0:06:14.920000 I'm going to go almost backwards before I talk about what the update domains 0:06:14.920000 --> 0:06:17.080000 and fault domains, just to get some things out of the way. 0:06:17.080000 --> 0:06:22.660000 First of all, you can only add a virtual machine to an availability set 0:06:22.660000 --> 0:06:25.540000 when you provision the virtual machine. 0:06:25.540000 --> 0:06:30.740000 I cannot take an existing virtual machine and move it into an availability 0:06:30.740000 --> 0:06:34.380000 set. To do that, I would need to deprovision the virtual machine, and 0:06:34.380000 --> 0:06:38.880000 then reprovision a new virtual machine using the same disks, but reprovision 0:06:38.880000 --> 0:06:41.520000 that into the availability set. 0:06:41.520000 --> 0:06:47.700000 Also, the type of availability set has to be aligned with the way you're 0:06:47.700000 --> 0:06:51.620000 storing your disks in your virtual machine, or you could actually put 0:06:51.620000 --> 0:06:55.120000 it the other way, because the availability set would exist first. 0:06:55.120000 --> 0:06:59.700000 And by that, I mean it depends on whether it is managed or unmanaged disks. 0:06:59.700000 --> 0:07:04.540000 If I have a virtual machine that is using managed disks, I can only place 0:07:04.540000 --> 0:07:08.800000 that into an availability set that was established for virtual machines 0:07:08.800000 --> 0:07:11.520000 with managed disks, and vice versa. 0:07:11.520000 --> 0:07:13.720000 So that's sort of how they do. 0:07:13.720000 --> 0:07:16.520000 But now, what are these things fault domains and update domains? 0:07:16.520000 --> 0:07:20.980000 Well, when you think about availability, it's about making sure that you 0:07:20.980000 --> 0:07:23.920000 have at least some instances running. 0:07:23.920000 --> 0:07:28.940000 And the things that could get in the way of that, first, hardware failures. 0:07:28.940000 --> 0:07:32.920000 Different fault domains are completely isolated within the data center. 0:07:32.920000 --> 0:07:37.460000 They have different power supplies, they have different networking, everything 0:07:37.460000 --> 0:07:41.140000 physical, they're in different racks, different locations physically in 0:07:41.140000 --> 0:07:41.980000 the data center. 0:07:41.980000 --> 0:07:47.320000 So even if you lost an entire rack, you lost an entire set of Hyper-V 0:07:47.320000 --> 0:07:50.600000 clusters, this is going to put them in different clusters. 0:07:50.600000 --> 0:07:52.780000 And if you have three, of course, that's going to put it in three different 0:07:52.780000 --> 0:07:59.940000 places. The update domains, Azure is actually software, and it's getting 0:07:59.940000 --> 0:08:01.480000 updated all the time. 0:08:01.480000 --> 0:08:05.700000 It's actually running on Hyper-V, and that base layer, that control layer, 0:08:05.700000 --> 0:08:06.780000 is being updated. 0:08:06.780000 --> 0:08:11.640000 Now, most times it does not require a reboot of the Hyper-V clusters that 0:08:11.640000 --> 0:08:14.580000 are running your virtual machines, although sometimes it might. 0:08:14.580000 --> 0:08:18.960000 And what the update domains do is Microsoft is going to guarantee that 0:08:18.960000 --> 0:08:22.860000 it's not going to reboot to update domains at the same time. 0:08:22.860000 --> 0:08:25.920000 And so that's why they're called update domains, is that it is protecting 0:08:25.920000 --> 0:08:28.860000 you from actually internal software updates. 0:08:28.860000 --> 0:08:31.800000 So long and short of this, you add a minimum. 0:08:31.800000 --> 0:08:34.880000 If you've got virtual machines, even if you only have one virtual machine, 0:08:34.880000 --> 0:08:38.160000 I always recommend that you either use availability sets or we're going 0:08:38.160000 --> 0:08:40.320000 to talk about now availability zones. 0:08:40.320000 --> 0:08:44.200000 But even with one, if it's not done right now, go ahead and provision 0:08:44.200000 --> 0:08:47.560000 it that way, because that way you're not going to have to worry about 0:08:47.560000 --> 0:08:51.100000 having to reprovision it when you get that second one, and you want to 0:08:51.100000 --> 0:08:55.860000 get the SLA, or more importantly, you want actual, solid availability. 0:08:55.860000 --> 0:08:57.680000 So that's the availability set. 0:08:57.680000 --> 0:09:00.200000 Now, let's talk about availability zones. 0:09:00.200000 --> 0:09:02.540000 Availability zones are actually a little bit simpler. 0:09:02.540000 --> 0:09:04.460000 And here's the idea. 0:09:04.460000 --> 0:09:08.980000 There is, by the way, an intrinsic update concept in here as well. 0:09:08.980000 --> 0:09:12.400000 But the whole thing we just think about zones. 0:09:12.400000 --> 0:09:16.680000 Where availability zones are available, and that's the one downside to 0:09:16.680000 --> 0:09:20.220000 available, one of a couple of very minimal downsides is that they're not 0:09:20.220000 --> 0:09:22.680000 actually available everywhere. 0:09:22.680000 --> 0:09:27.400000 Where the zones are available, there will be three. 0:09:27.400000 --> 0:09:32.620000 And what you do is, when you deploy your virtual machines, you specify 0:09:32.620000 --> 0:09:37.300000 which availability zone you want to deploy a virtual machine to. 0:09:37.300000 --> 0:09:40.640000 So in this case, I would have, let's say, three virtual machines all running 0:09:40.640000 --> 0:09:52.340000 the same workload, all with their own independent managed disks. 0:09:52.340000 --> 0:09:54.820000 So, I would have a load balancer. 0:09:54.820000 --> 0:10:01.600000 And if this is public, in front of that, I'd have a public IP address, 0:10:01.600000 --> 0:10:04.880000 or if it's internal, it would not. 0:10:04.880000 --> 0:10:09.960000 And that's it. Now, what happens is that each one of these zones is a 0:10:09.960000 --> 0:10:12.240000 different data center, a different physical data center. 0:10:12.240000 --> 0:10:15.940000 So if you lose an entire data center, your workload is still going to 0:10:15.940000 --> 0:10:17.320000 run. And that's really important. 0:10:17.320000 --> 0:10:19.120000 That's really what's critical here. 0:10:19.120000 --> 0:10:23.220000 Now, in addition to the fact that it's limited in terms of where all it 0:10:23.220000 --> 0:10:26.500000 can run, and I will tell you, availability zones are not just for virtual 0:10:26.500000 --> 0:10:31.440000 machines. There are other platform services that actually support availability 0:10:31.440000 --> 0:10:34.540000 zones as well. So this is something that is permeating really throughout 0:10:34.540000 --> 0:10:38.000000 Azure. And I think it's really important because it gives you that extremely 0:10:38.000000 --> 0:10:42.980000 high level of resiliency and availability. 0:10:42.980000 --> 0:10:47.500000 And about a year ago, for example, there was the loss of a data center. 0:10:47.500000 --> 0:10:50.380000 It got struck by lightning, lightning took out the power, took out the 0:10:50.380000 --> 0:10:54.540000 power, which to the air conditioning unit, which meant that it overheated, 0:10:54.540000 --> 0:10:57.000000 and they had to shut down that entire data center. 0:10:57.000000 --> 0:10:59.860000 If everything was done, the data center, you'd be down. 0:10:59.860000 --> 0:11:02.980000 However, if you had the availability zones, if you're taking advantage 0:11:02.980000 --> 0:11:05.240000 of that, you'd still be up and running. 0:11:05.240000 --> 0:11:09.920000 Now, one downside to that is that while the availability zone itself does 0:11:09.920000 --> 0:11:12.940000 not cost you anything, neither does the availability set. 0:11:12.940000 --> 0:11:17.220000 It kind of does indirectly because if you're going to use a load balancer 0:11:17.220000 --> 0:11:28.240000 with an availability zone, it has to be a standard load balancer, and 0:11:28.240000 --> 0:11:29.780000 you pay for a standard load balancer. 0:11:29.780000 --> 0:11:39.460000 You do not pay for a basic load balancer. 0:11:39.460000 --> 0:11:41.340000 A standard public IP address. 0:11:41.340000 --> 0:11:45.500000 Again, you're going to pay for that, whereas you would not pay typically 0:11:45.500000 --> 0:11:50.920000 for a basic public IP address with some caveats there. 0:11:50.920000 --> 0:11:51.680000 But that's the idea. 0:11:51.680000 --> 0:11:56.200000 It's a pretty straightforward idea, a very powerful concept, and frankly, 0:11:56.200000 --> 0:11:58.880000 not particularly difficult to implement. 0:11:58.880000 --> 0:12:04.140000 And so what I would like to do is just give you a quick demonstration 0:12:04.140000 --> 0:12:06.460000 of virtual machine availability. 0:12:06.460000 --> 0:12:09.020000 And this really is going to be fairly quick because I'm going to show 0:12:09.020000 --> 0:12:13.960000 you through the portal where you can go to actually set this up. 0:12:13.960000 --> 0:12:18.040000 So let's go ahead and take a look. 0:12:18.040000 --> 0:12:25.720000 Here's my portal, and I am going to waste no time. 0:12:25.720000 --> 0:12:33.040000 I'm going to create a resource, and we'll create an Ubuntu server resource. 0:12:33.040000 --> 0:12:38.340000 And I am going to create. 0:12:38.340000 --> 0:12:49.260000 I am available via our demo, sorry, in the name of the resource group, 0:12:49.260000 --> 0:12:54.100000 and this is going to be available VM. 0:12:54.100000 --> 0:12:56.800000 Of course, put it in the east. 0:12:56.800000 --> 0:13:03.460000 Now right here, availability options, no infrastructure redundancy required. 0:13:03.460000 --> 0:13:07.480000 And I can go availability zone, they just put this one in, you actually 0:13:07.480000 --> 0:13:11.080000 set it up as a scale set, that's interesting, or availability set. 0:13:11.080000 --> 0:13:13.280000 I'm going to choose availability set first. 0:13:13.280000 --> 0:13:18.220000 Now I don't have an availability set, so I can create a new one. 0:13:18.220000 --> 0:13:26.040000 And that's going to let me set up a new availability set. 0:13:26.040000 --> 0:13:32.500000 And I can specify how many fault domains, two or three, default is two, 0:13:32.500000 --> 0:13:37.160000 update domains, the default is five, and go up to 20. 0:13:37.160000 --> 0:13:40.020000 I'm not paying for that differentiation. 0:13:40.020000 --> 0:13:43.840000 Now using managed disks, this one, you'll notice it's grayed out, it is 0:13:43.840000 --> 0:13:47.820000 using managed disks because again, it has to align with what I'm doing. 0:13:47.820000 --> 0:13:50.320000 And I can go ahead and create that and hit new. 0:13:50.320000 --> 0:13:54.420000 But I'm going to change that over to availability zone. 0:13:54.420000 --> 0:13:57.600000 And I choose availability zone one, two or three. 0:13:57.600000 --> 0:14:00.040000 I'm going to put this in zone one. 0:14:00.040000 --> 0:14:08.600000 There's my image, there's my size, I'm going to go with password. 0:14:08.600000 --> 0:14:11.120000 And go, got my password. 0:14:11.120000 --> 0:14:14.300000 And the ports are fine. 0:14:14.300000 --> 0:14:18.400000 Disks, take down to that. 0:14:18.400000 --> 0:14:21.780000 Now I do want to show you networking. 0:14:21.780000 --> 0:14:25.020000 So I've got the public IP address, it is creating one. 0:14:25.020000 --> 0:14:30.480000 Now that has to be a, let's see if I go new, yeah. 0:14:30.480000 --> 0:14:36.080000 When I go new, the skew is grayed out and it's only allowed to be static. 0:14:36.080000 --> 0:14:40.060000 And that is because, again, I'm using it with zones. 0:14:40.060000 --> 0:14:45.420000 Now also with a public IP address, I have the ability to make it in a 0:14:45.420000 --> 0:14:48.980000 specific zone or make the public IP address zone redundant. 0:14:48.980000 --> 0:14:52.360000 We'll make it zone redundant. 0:14:52.360000 --> 0:14:57.100000 Now the other thing that I can do is I could place this behind an existing 0:14:57.100000 --> 0:14:59.960000 load balancing solution. 0:14:59.960000 --> 0:15:06.280000 But I would need to have one that exists and that is set up for zones, 0:15:06.280000 --> 0:15:08.360000 which I don't, so I'm not going to do this. 0:15:08.360000 --> 0:15:12.820000 But if I did, it would, again, have to be a standard load balancer. 0:15:12.820000 --> 0:15:17.020000 But that's it. Okay, again, I just, really, the only things I needed to 0:15:17.020000 --> 0:15:21.840000 do, I went in and I said, I do want this to give me zone availability 0:15:21.840000 --> 0:15:23.940000 or an availability zone. 0:15:23.940000 --> 0:15:27.880000 I put it in the availability zone and I verified that the public IP address 0:15:27.880000 --> 0:15:32.700000 is what I want. And at this point, I just created. 0:15:32.700000 --> 0:15:40.500000 And again, there's no cost specifically and directly to the availability 0:15:40.500000 --> 0:15:42.380000 set or the availability zone. 0:15:42.380000 --> 0:15:45.360000 The only cost with the availability zone is the fact that you're going 0:15:45.360000 --> 0:15:49.860000 to have to upgrade your public IP address and upgrade your load balancer 0:15:49.860000 --> 0:15:51.720000 if you're using a load balancer. 0:15:51.720000 --> 0:15:52.880000 Right? And so that's it. 0:15:52.880000 --> 0:15:56.500000 That's how you set up high availability for your virtual machines.